/bin/falseは、のコンパニオンであるユーティリティプログラム/bin/trueです。これは、unixが機能完全であることを確認するために、抽象的な意味で役立ちます。ただし、これらのプログラムの新たな目的が見つかっています。BASHステートメントを検討してください/some/program || /bin/true。これは$? = 0、の戻り値に関係なく、常にブール値をtrue()に評価します/some/program。
確認したように/bin/false、の緊急の使用は、ログインを許可されていないユーザーのヌルシェルとしてです。この場合のシステムは、シェルが実行に失敗したかのように動作します。
POSIX(私は間違っているかもしれませんが、SUSかもしれませんが)は、これらのコマンドの両方を、適切なブール値を返す以外に何もしないように制約します。
/sbin/nologinは、/bin/false(ブール値falseを返す)に似た動作をするBSDユーティリティですが、実行も/bin/false禁止されているため、出力も出力します。これはユーザーが何が起こったのかを理解するのに役立つはずですが、実際には多くのターミナルエミュレーターはシェルが終了すると単純に閉じられ、場合によっては読み取り不可能なメッセージを表示します。
にリスト/sbin/nologinする目的はほとんどありません/etc/shells。の標準的な効果は、ユーザーが自分のシェルを変更/etc/shellsするchshときに使用できるプログラムをリストすることです(そして、自分のシェルをに変更する信頼できる理由はありません/sbin/nologin)。スーパーユーザーは、誰のシェルも何にでも変更できます。ただし、両方を一覧表示することもできます/sbin/nologinし、/bin/false中に/etc/rsh使用して自分の殻を変更これらのシェルを持つユーザーを禁止しますた、chsh彼らは殻を得ること不幸な出来事で。
FTPデーモンは、/ etc / shellsにないシェルを持つユーザーへのアクセスを許可しない場合があります。または、希望する他のロジックを使用する場合があります。sftp(同様の機能を提供する)は類似しているが安全であるため、FTPの実行はどのような場合でも避ける必要があります。一部のサイトでは/sbin/nologin、sftpアクセスを許可する一方でシェルアクセスを無効にするために使用してい/etc/shellsます。これにより、ユーザーがcronジョブの作成を許可されている場合、バックドアが開かれる可能性があります。
いずれの場合も、scp無効なシェルでは動作しません。 scponlyこのインスタンスでシェルとして使用できます。
さらに、シェルの選択はsu -(AKA su -l)の動作に影響します。特に、/sbin/nologinシェルの場合、の出力は標準出力に出力されます。これはには当てはまりません/bin/false。どちらの場合でも、コマンドの実行su -clは失敗します。
最後に、答え:
アカウントを無効にするには、これらのいずれにも依存せず、/sbin/nologin情報目的のためにシェルを設定します(/sbin/nologinin /etc/shellsである場合を除き、その時点で使用/bin/falseすべきではありません)。代わりに、のパスワードフィールドに設定/etc/passwdする!ことで保証され、cryptパスワードなしのために有効であることを。/etc/shadowバグを回避するために、同じ方法でハッシュを設定することを検討してください。 passwd -lあなたのためにこれを行います。
アカウントを無効にする3番目の方法は、アカウントの有効期限フィールドを古い日付(例:)に設定することusermod --expiredate 1です。これにより、セットアップでユーザーがパスワードなしでUNIXアカウントに対して認証できるようになり、使用しているサービスにシェルが不要な場合に、ログインが防止されます。