login shells
cookies:x:1000:1000::/home/cookies:/bin/zsh
このときの一番最後の/bin/zshについで。
man useraddとか眺めると
-s shell ユーザのログインシェルの名前。 デフォルトではこのフィールドは空白となり、 システムがデフォルトのログインシェルを選ぶ。
と。
僕が見たことあるログインシェルは/bin/bash,/bin/zsh,/sbin/nologin,/bin/falseくらい。
あと、自作ログインシェルの起動についてのサイトは見たことあったかも。
ここで一つ疑問。/bin/trueを/bin/falseの代わりにログインシェルにしたらどうなるのかな、と。
実験してみたけど、まあ予想通り/bin/falseと大して変わらない。
ぐぐってみても、大して変わらないが、慣習として/bin/falseを使うようになったんだろうという説。
まあそうだよね。ユーザがログインしようとしてもそれを強制的に終了させる目的なら、trueよりfalseっぽいよね。
あとあとわかったことだけど、/sbin/nologinもnon-zeroを返すようなので、falseのほうがいいのかもしれない。
いろいろ調べた。
/sbin/nologin
"This account is currently not available."とかいうメッセージを表示してからexit.
終了コードはnon-zero。
/bin/false
直ちにexit.
終了コードはindicate failure。(non-zero)
/bin/true
直ちにexit.
終了コードはindicate success。(zero)
/sbin/nologinと/bin/falseの違い
メッセージの有無だけじゃない。
よく言われるのが(?)nologinはFTPにログインできるが、falseはできないというやつ。
valid login shellかどうからしく、それは/etc/shellsに書かれているかどうか。
# でも、僕のArchLinux,/sbin/nologinも/etc/shellsに書かれてないんだけど。
また、FTPがOSの管理品でないのは間違いないので、validかどうかチェックしてるのはFTPソフト側であって、設定変えれば回避できたりするとか。
/etc/shells
valid login shellsのリストを書いておく場所。
chshでこれに含まれていないものを指定しようとすると怒られる。
ただ、useradd -sで指定する分には、/bin/falseだろうと/usr/bin/slだろうとなんでもOK。
==おまけ==
/etc/nologin
このファイルを作っておくと、root以外のloginが失敗するようになる。具体的には、ユーザ名にroot以外の文字を入力した途端にエラー。
もともとログインしてたユーザが、sudoをしようとして自分のパスワードを入力するときも有効になるが、sudoさん"Sorry, try again"とか"1 回パスワード試行を間違えました"とかしか言わなくって困った。
しかもsudoに時間のキャッシュを設けている場合はloginを通り抜けてるわけなので普通にできたりして、いろいろめんどくさそう。