web-dev-qa-db-ja.com

/ sbin / nologinと/ bin / falseの違いは何ですか

技術的には、pampam_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
185
xenoterracide

/sbin/nologinがシェルとして設定されている場合、そのシェルを持つユーザーがログインすると、「このアカウントは現在使用できません」という丁寧なメッセージが表示されます。このメッセージは、/etc/nologin.txtファイルで変更できます。

/bin/falseは、呼び出されたときにすぐに終了してfalseを返すバイナリにすぎないため、シェルにfalseとしてログインしているユーザーがログインすると、falseが終了するとすぐにログアウトされます。 。シェルを/bin/trueに設定すると、誰かがログインできないようにするのと同じ効果がありますが、falseは、その人の概念を伝えるのがはるかに優れているため、trueよりも規約としておそらく使用されますシェルはありません。

nologinのmanページを見ると、4.4 BSD(1990年代初頭)で作成されたと書かれているため、falseが作成されてからかなり時間がかかりました。シェルとしてのfalseの使用は、おそらくUNIXの初期の頃から引き継がれた慣習にすぎません。

nologinはよりユーザーフレンドリなオプションであり、ログインしようとするユーザーにカスタマイズ可能なメッセージが表示されるため、理論的にはそれを使用することをお勧めします。しかし、nologinfalseのどちらも、シェルがなく、sshを実行できないという同じ結果になります。

212
Mark McKinstry

一部のFTPサーバーでは、有効なシェルがある場合にのみFTPアクセスが許可されます。 /sbin/nologinは有効なシェルと見なされますが、/bin/false ではありません。

(「有効」とは、終了ステータスが0であることを意味しますが、/etc/shellsも含まれる可能性があります。これは、おそらくシステム、FTPソフトウェア、および構成に依存します。)

29
Mikel

/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を使用するのが一般的でしたが、ユーザーがキックオフされた理由がユーザーにわからないため、混乱を招く可能性があります。

14
penguin359

私のマシンでは、nologinは常に同じメッセージを英語で表示し、引数は無視します。 /bin/falseは、--versionで示される言語で--helpおよび$LC_CTYPEに応答します。これらの外観上の違い以外は、同じ効果があります。

使いやすさの点では、nologinは、英語を話す実在の人物のアカウントで使用する場合に適しています。セキュリティに関しては、違いはありません。

/ bin/falseのみのジョブは、ゼロ以外の終了コードで終了します。

コマンドラインで試してください:

$:> /bin/false
$:> echo $?
1
$:>

一部の教育機関では、パスワードファイルのシェルフィールドで/ bin/falseを使用しています。ユーザーがログインしようとすると、シェルは/ bin/falseなので、すぐに終了します

3
shellter

Linuxでは、/sbin/nologinutil-linux プロジェクトからのものですが、/bin/falseGNU Coreutils の一部です。それらは異なる役割を果たし、nologinには、ログインしているシェルとしてそれを持っている人にメッセージを出力するオプションがあります。LinuxコマンドはBSDから来ており、異なるものである長い歴史があるようです。 FreeBSD falseは単に1 を返しますが、nologinTTYで実行し、ログイン試行中にメッセージをsyslogに送信します。 Linuxのバージョンは少し複雑です(falseは、 --helpの出力、私は仮定します)が基本的に同じ方法で実行します。

3
jsbillings

同じプログラムでもかまいませんが、意味が異なります。プログラム名がすべてを物語っています。

  • / bin/falseはfalse値を返すことを目的としています。プログラムとして実行されます。
  • / bin/nologinは、アカウントにログインが許可されていないことをユーザーに示すことを目的としています。 (ログインシェルを使用します。)
1
BillThor