false と nologin

falsenologin の違いを調べたお話.

以前から同じことを何度も書いていたので,ここにまとめることにした.

false と nologin の違い

いずれを指定しても,端末へのログインを拒否できる.今回のお題は「ログイン シェルとして用いたとき,異なる点はどこか.」

/etc/shells に記述されているか

FreeBSD では false は入っていない*1.この場合,ログイン シェルとして指定することはできない.

ソースコードで読み比べる

観察から推測することも可能だが,せっかく FreeBSD なのでソース コードを読みくらべてみるのもおもしろい.

false (/usr/src/usr.bin/false/false.c)
単純に return 1
nologin (/usr/src/usr.sbin/nologin/nologin.c)
ログ ファイルと標準出力にメッセージを書き込み return 1

つまり…

nologin は文字通りログインを拒否するために作られているため,目的に対して false よりも適切な処理を行う.みんな nologin つかおう.

余談だが nologin なら FTP からログインできる とは /etc/shells に書かれているためだと思われる.

*1:記述されている OS も存在するらしい