技術的には、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
コメント
- ログインシェルとしての/ usr / sbin / nologinはセキュリティ目的に役立ちますか?
- I '興味があります/ bin / falseが" 1 "の戻りコードを返すのに21kのコードを必要とする理由! (そして/ sbin / nologinは4.7kしかかかりません)
- 読むのに便利です。 / sbin / nologinと/ bin / falseの違いは何ですか
- @MarkStewart少し遅すぎますが、読みたいと思うかもしれません trueとfalseが非常に大きいのはなぜですか?と Linux用の本当に小さなELF実行可能ファイルの作成に関する旋風チュートリアル。
- @nxnevええ' ELFのオーバーヘッドについては考えていませんでした。そして、私の昔のIBMの時代から、単純な1つのオペコードアセンブリ命令であるプログラムIEFBR14がありました。BR14-レジスター14に分岐し、レジスター14にあるものに設定された戻りコードでプログラムを終了します。
回答
/sbin/nologin
がシェルとして設定されている場合、ユーザーの場合そのシェルがログインすると、「このアカウントは現在利用できません」という丁寧なメッセージが表示されます。このメッセージは、ファイル/etc/nologin.txt
で変更できます。
/bin/false
は単なるバイナリであり、呼び出されるとすぐに終了し、falseを返します。したがって、シェルログとしてfalse
を持っている人はで、「false
が終了するとすぐにログアウトされます。シェルを/bin/true
に設定すると、誰かがログインできないようにするのと同じ効果があります。ただし、false
は、true
の規則として使用される可能性があります。これは、人にはシェルがないという概念を伝えます。
nologin
のマニュアルページを見ると、4.4 BSD(1990年代初頭)で作成されたと書かれています。 )そのため、false
が作成されてからかなり経ちました。 false
をシェルとして使用することは、おそらくUNIXの初期から引き継がれた慣習にすぎません。
nologin
はよりユーザーフレンドリーなオプションであり、ログインしようとしているユーザーにカスタマイズ可能なメッセージが表示されるため、理論的にはそれを使用することをお勧めします。ただし、nologin
とfalse
はどちらも、誰かがシェルを持っておらず、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 'の回答に同意しないことに注意してください。私は彼をこの結論に導いたかもしれないものを推測しているだけです。しかし、私のコメントは少し遅れています。 - いいえ!デフォルトのログインシェルは特権と同じではありません。