技術的には、pam
がpam_shells
でシェルをチェックするように設定されていない限り、シェルを使用していない場合、これらのいずれも実際にログインを妨げることはありません。私のシステムではそれらのサイズは異なるため、実際に何かをしているのではないかと思います。違いは何ですか?なぜ両方存在するのですか?なぜどちらを使用するのですか?
-rwxr-xr-x 1 root root 21K Feb 4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar 2 14:59 /sbin/nologin
/sbin/nologin
がシェルとして設定されている場合、そのシェルを持つユーザーがログインすると、「このアカウントは現在使用できません」という丁寧なメッセージが表示されます。このメッセージは、/etc/nologin.txt
ファイルで変更できます。
/bin/false
は、呼び出されたときにすぐに終了してfalseを返すバイナリにすぎないため、シェルにfalse
としてログインしているユーザーがログインすると、false
が終了するとすぐにログアウトされます。 。シェルを/bin/true
に設定すると、誰かがログインできないようにするのと同じ効果がありますが、false
は、その人の概念を伝えるのがはるかに優れているため、true
よりも規約としておそらく使用されますシェルはありません。
nologin
のmanページを見ると、4.4 BSD(1990年代初頭)で作成されたと書かれているため、false
が作成されてからかなり時間がかかりました。シェルとしてのfalse
の使用は、おそらくUNIXの初期の頃から引き継がれた慣習にすぎません。
nologin
はよりユーザーフレンドリなオプションであり、ログインしようとするユーザーにカスタマイズ可能なメッセージが表示されるため、理論的にはそれを使用することをお勧めします。しかし、nologin
とfalse
のどちらも、シェルがなく、sshを実行できないという同じ結果になります。
一部のFTPサーバーでは、有効なシェルがある場合にのみFTPアクセスが許可されます。 /sbin/nologin
は有効なシェルと見なされますが、/bin/false
ではありません。
(「有効」とは、終了ステータスが0であることを意味しますが、/etc/shells
も含まれる可能性があります。これは、おそらくシステム、FTPソフトウェア、および構成に依存します。)
/bin/false
は、エラーで終了する以外に何もしないプログラムにコマンドを渡す必要があるときにいつでも使用できるシステムコマンドです。 /bin/true
のコンパニオンです。これらはどちらも非常に古い標準のPOSIXユーティリティであり、どちらも定義上は出力を生成しません。 trueは、次のように無期限にループするシェルスクリプトに使用されることがあります。
while true; do
...
# Waste time
if [ $wasted_time -gt 100000 ]; then
exit 0
fi
...
done
/usr/sbin/nologin
は、シェルを置き換えるように特別に設計されており、ログインできないというメッセージが出力されます。それが存在する前は、ダミーユーザーには/bin/false
を使用するのが一般的でしたが、ユーザーがキックオフされた理由がユーザーにわからないため、混乱を招く可能性があります。
私のマシンでは、nologin
は常に同じメッセージを英語で表示し、引数は無視します。 /bin/false
は、--version
で示される言語で--help
および$LC_CTYPE
に応答します。これらの外観上の違い以外は、同じ効果があります。
使いやすさの点では、nologin
は、英語を話す実在の人物のアカウントで使用する場合に適しています。セキュリティに関しては、違いはありません。
/ bin/falseのみのジョブは、ゼロ以外の終了コードで終了します。
コマンドラインで試してください:
$:> /bin/false
$:> echo $?
1
$:>
一部の教育機関では、パスワードファイルのシェルフィールドで/ bin/falseを使用しています。ユーザーがログインしようとすると、シェルは/ bin/falseなので、すぐに終了します
Linuxでは、/sbin/nologin
は util-linux プロジェクトからのものですが、/bin/false
は GNU Coreutils の一部です。それらは異なる役割を果たし、nologinには、ログインしているシェルとしてそれを持っている人にメッセージを出力するオプションがあります。LinuxコマンドはBSDから来ており、異なるものである長い歴史があるようです。 FreeBSD false
は単に1 を返しますが、nologin
は TTYで実行し、ログイン試行中にメッセージをsyslogに送信します。 Linuxのバージョンは少し複雑です(false
は、 --helpの出力、私は仮定します)が基本的に同じ方法で実行します。
同じプログラムでもかまいませんが、意味が異なります。プログラム名がすべてを物語っています。