' / sbin / nologinと/ bin / falseの違い

技術的には、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のマニュアルページを見ると、4.4 BSD(1990年代初頭)で作成されたと書かれています。 )そのため、falseが作成されてからかなり経ちました。 falseをシェルとして使用することは、おそらくUNIXの初期から引き継がれた慣習にすぎません。

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

コメント

  • /usr/sbin/nologinはDebianベースのディストリビューション用です。
  • 少なくともBSD実装もログに記録します opensource.apple.com/source/system_cmds/system_cmds-735/ … に示すように、ログインはsyslogを試行します。 、一方、/ bin / falseは'何もログに記録しません
  • これは驚くべき答えであり、素晴らしい歴史がここに示されています。よくできました!
  • /etc/nologin.txtカスタムメッセージ機能はUbuntuでは使用できません。

回答

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

(「有効」とは終了ステータスは0ですが、/etc/shellsも入る可能性があります。おそらく、システム、FTPソフトウェア、および構成によって異なります。)

コメント

  • ええ、その'はおそらくpamを使用するftpプログラムの一部であり、あなたが言ったように、

。推測です…間違っている可能性があります。

  • Ubuntu8.04と14.04の両方をチェックしました。 nologinコマンドはfalseと同様のステータス1で終了し、true、false、またはnologinは/ etc / shellsに含まれません。もしそうなら、ユーザーはchshを使用してそのようなシェルを選択し、自分のアカウントから自分自身をロックアウトすることができます。
  • 回答

    /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を使用するのが一般的でしたが、ユーザーがログインしないため混乱する可能性がありました。なぜ「キックオフ」されたのかを知ってください。

    コメント

    • /bin/true/bin/falseは、シェルスクリプトで取得できるものとは限りません。zsh trueおよびfalseは組み込みであり、bash/bin/*バージョンを使用します

    回答

    私のマシンでは、nologinは常に同じメッセージを英語で表示し、引数を無視します。/bin/false--versionと応答します$LC_CTYPEで示される言語のdivid = “fe8c9622ef”>

    。これらの外観上の違いを除けば、同じ効果があります。

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

    コメント

    • おそらくfalseのようですは実際のユーザーがいないシステムアカウント用であり、nologinは無効なアカウント用です。
    • OSは何ですか?Centos nologinバージョンは引数を取りませんが、/etc/nologin.txtからメッセージを読み取ることができます。

    回答

    Linuxでは、/sbin/nologin util-linux プロジェクトから取得されますが、/bin/false GNU Coreutils の一部です。これらはさまざまな役割を果たし、nologinには次のようなユーザー向けのメッセージを印刷するオプションがあります。ログインしているシェルとしてそれを使用します。LinuxコマンドはBSから取得されますD、彼らは異なっているという長い歴史を持っているようです。 FreeBSD falseは単に1 を返しますが、nologin TTYで実行され、ログイン試行中にsyslogにメッセージを送信することを確認してください。 Linuxバージョンはもう少し複雑です(false –helpの出力のために国際化を使用してあらゆる種類の楽しいことを実行しますが、基本的に同じ方法で実行します。

    回答

    / bin / false唯一の仕事は、ゼロ以外の終了コードで終了することです。

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

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

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

    回答

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

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

    回答

    どちらもほぼ同じ仕事をしますが、/bin/falseは、非特権ユーザーに役立ちます。一方、/sbin/nologinは特権ユーザー向けです。

    コメント

    • ああ、どうでしたかその結論に達しましたか?
    • おそらく彼は/etc/passwdを調べました。新しくインストールしたDebianストレッチの/etc/passwdを調べました。このボックスでは、いくつかの例外を除いて、ほぼすべてのシステムアカウント(ユーザーID < 1000)にシェルとして/usr/sbin/nologinがあります。 @pythondetective 'の回答に同意しないことに注意してください。私は彼をこの結論に導いたかもしれないものを推測しているだけです。しかし、私のコメントは少し遅れています。
    • いいえ!デフォルトのログインシェルは特権と同じではありません。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です