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


169

技術的に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


パス/bin/falseはどこにでも存在する必要がありますが、存在しません/sbin/nologin: '/ sbin / nologin':そのようなファイルまたはディレクトリはありません。なぜDebianやUbuntuの/usr/sbin/nologin代わりになっ/sbin/nologinているのでしょうか?
-baptx

4
/ bin / falseが「1」のリターンコードを返すのに21kのコードを必要とする理由を知りたいのですが。(および/ sbin / nologinには4.7kしかかかりません)
マークスチュワート

1
@MarkStewart少し遅すぎますが、読んでたいと思うかもしれませんLinux用の本当にちっぽけなELF実行可能ファイルの作成に関するWhirlwindチュートリアル
nxnev

1
@nxnevええ、ELFのオーバーヘッドについては考えませんでした。私の昔のIBM時代から、単純な1つのオペコードアセンブリ命令であるプログラムIEFBR14がありました。BR14-レジスタ14に分岐し、レジスタ14にあるものに設定されたリターンコードでプログラムを終了します。
マークスチュワート

回答:


198

ときは/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をすることができないのと同じ最終結果を持っています。


10
/usr/sbin/nologinDebianベースのディストリビューション用。
Diemo

3
少なくともBSD実装では、opensource.apple.com /
source

28

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

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


1
ええ、それはおそらくpamを使用したftpプログラムの一部であり、pam_shellsを使用したpamはあなたが言ったようにチェックします/etc/shells。ただ推測...私は間違っている可能性があります。
xenoterracide

4
Ubuntu 8.04と14.04の両方をチェックしました。nologinコマンドはfalseに類似したステータス1で終了し、true、false、またはnologinのいずれも/ etc / shellsに含まれません。その場合、ユーザーはchshを使用してそのようなシェルを選択し、自分のアカウントからロックアウトできます。
ペンギン359

12

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


4
これは注目に値するもの/bin/true/bin/falseあり、必ずしもシェルスクリプトで取得できるものではありません。内zsh truefalseビルトインされ、bash使用する/bin/*バージョンを
xenoterracide

4

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

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


4
おそらくfalse実際のユーザーを持たないシステムアカウントnologin向けであり、無効なアカウント向けです。
-xenoterracide

1
あなたのOSは何ですか?Centos nologinバージョンは引数を取りませんが、からメッセージを読み取ることができます/etc/nologin.txt
アレクサンダーゴンチー

3

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

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

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

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


2

Linuxでは/sbin/nologinutil-linuxプロジェクトに由来しますが、GNU Coreutilsの/bin/false一部です。それらは異なる役割を果たし、nologinにはログインしているシェルとしてそれを持っている人にメッセージを出力するオプションがあります。LinuxコマンドはBSDから来ており、異なる歴史があるようです。 FreeBSDは、単に1を返しながら、チェックがそれだことを確認するTTY上で実行され、ログイン試行時にsyslogにメッセージを送信します。 Linuxバージョンはもう少し複雑です(--helpの出力のために国際化であらゆる種類の楽しいことをしていると思います)が、基本的には同じ方法で実行されます。falsenologinfalse


1

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

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

-4

どちらも多かれ少なかれ同じ仕事をしますが/bin/false、非特権ユーザーには便利です。一方、/sbin/nologin特権ユーザー向けです。


4
ああ、どうしてその結論に達しましたか?
fpmurphy

おそらく彼は調べた/etc/passwd/etc/passwdインストールしたばかりのDebianストレッチを調べたところです。このボックスで/usr/sbin/nologinは、いくつかの例外を除き、ほぼすべてのシステムアカウント(ユーザーID <1000)がシェルとして使用されます。@pythondetectiveの答えに同意しないことに注意してください。私は彼がこの結論に至った理由を推測しています。しかし、私のコメントは少し遅れています。
ビナルス

番号!デフォルトのログインシェルは特権と同じではありません。
MUYベルギー

優れた「探偵」ではない
Emobe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.