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


69

シェルをに設定して、ユーザーアカウントを無効にすることを推奨することをよく耳にし/bin/falseます。しかし、既存のLinuxシステムでは、多数の既存のアカウント(すべてサービスアカウント)が/sbin/nologin代わりにシェルを持っていることがわかります。

/sbin/nologinアカウントが無効になっているというメッセージをユーザーに出力して終了するマニュアルページから確認できます。おそらく/bin/false何も印刷しません。

また、それ/sbin/nologinはにリストされていますが/etc/shells、そうで/bin/falseはありません。

manページには、FTPがリストされていないシェルを持つユーザーのアクセスを無効にし、/etc/shells他のプログラムが同じことを行う可能性があることを示しています。それは、誰かが/sbin/nologinシェルとして持っているアカウントでFTPで接続できるということですか?

ここの違いは何ですか?ユーザーアカウントを無効にするには、これらのうちどれを使用する必要がありますか?リストに/etc/shellsは他にどんな効果がありますか?



1
機能する一般的な情報として。システム管理の観点から具体的に考えています。
マイケルハンプトン

バックグラウンダーとしての意味。
-dmourati

回答:


70

/bin/falseは、のコンパニオンであるユーティリティプログラム/bin/trueです。これは、unixが機能完全であることを確認するために、抽象的な意味で役立ちます。ただし、これらのプログラムの新たな目的が見つかっています。BASHステートメントを検討してください/some/program || /bin/true。これは$? = 0、の戻り値に関係なく、常にブール値をtrue()に評価します/some/program

確認したように/bin/false、の緊急の使用は、ログインを許可されていないユーザーのヌルシェルとしてです。この場合のシステムは、シェルが実行に失敗したかのように動作します。

POSIX(私は間違っているかもしれませんが、SUSかもしれませんが)は、これらのコマンドの両方を、適切なブール値を返す以外に何もしないように制約します。

/sbin/nologinは、/bin/false(ブール値falseを返す)に似た動作をするBSDユーティリティですが、実行も/bin/false禁止されているため、出力も出力します。これはユーザーが何が起こったのかを理解するのに役立つはずですが、実際には多くのターミナルエミュレーターはシェルが終了すると単純に閉じられ、場合によっては読み取り不可能なメッセージを表示します。

にリスト/sbin/nologinする目的はほとんどありません/etc/shells。の標準的な効果は、ユーザーが自分のシェルを変更/etc/shellsするchshときに使用できるプログラムをリストすることです(そして、自分のシェルをに変更する信頼できる理由はありません/sbin/nologin)。スーパーユーザーは、誰のシェルも何にでも変更できます。ただし、両方を一覧表示することもできます/sbin/nologinし、/bin/false中に/etc/rsh使用して自分の殻を変更これらのシェルを持つユーザーを禁止しますた、chsh彼らは殻を得ること不幸な出来事で。

FTPデーモンは、/ etc / shellsにないシェルを持つユーザーへのアクセスを許可しない場合があります。または、希望する他のロジックを使用する場合があります。sftp(同様の機能を提供する)は類似しているが安全であるため、FTPの実行はどのような場合でも避ける必要があります。一部のサイトでは/sbin/nologin、sftpアクセスを許可する一方でシェルアクセスを無効にするために使用してい/etc/shellsます。これにより、ユーザーがcronジョブの作成を許可されている場合、バックドアが開かれる可能性があります。

いずれの場合も、scp無効なシェルでは動作しません。 scponlyこのインスタンスでシェルとして使用できます。

さらに、シェルの選択はsu -(AKA su -l)の動作に影響します。特に、/sbin/nologinシェルの場合、の出力は標準出力に出力されます。これはには当てはまりません/bin/false。どちらの場合でも、コマンドの実行su -clは失敗します。

最後に、答え:

アカウントを無効にするには、これらのいずれにも依存せず、/sbin/nologin情報目的のためにシェルを設定します(/sbin/nologinin /etc/shellsである場合を除き、その時点で使用/bin/falseすべきではありません)。代わりに、のパスワードフィールドに設定/etc/passwdする!ことで保証され、cryptパスワードなしのために有効であることを。/etc/shadowバグを回避するために、同じ方法でハッシュを設定することを検討してください。 passwd -lあなたのためにこれを行います。

アカウントを無効にする3番目の方法は、アカウントの有効期限フィールドを古い日付(例:)に設定することusermod --expiredate 1です。これにより、セットアップでユーザーがパスワードなしでUNIXアカウントに対して認証できるようになり、使用しているサービスにシェルが不要な場合に、ログインが防止されます。


9
この答えは完全に異なるオプションをまとめたもの(と質問に答える)一方で、私は、少なくとも株式Debianのリポジトリで、利用可能であるこのユースケースのために有益なリソースを指すようにする必要性を感じたtitantools:パッケージをnoshell。この疑似シェルは監査機能を提供し、syslogへのロギングnoshellはシェルとしてアカウントを使用しようとしますが、アクセスは許可しません。
-dawud

1
これは作り話されることなく、使用することを、特定のヴィンテージ(せき)のシステム管理者の間で実際にはかなり一般的である/bin/falseにはログインしてはならない人々のためのログインシェルとして。
MADHATTER

2
それが本来の意図された使用ではないという意味での外典。時代錯誤とは言いませんでした。私は毎日それを見ます:)
ファルコンモモット

1
無効なパスワードでアカウントを無効にしても、sshではうまく機能しません。ユーザーが以前に公開キー認証を設定していた場合、とにかく取得できる可能性があります。
joshudson

3
sshdは、pubkey authを使用しても、特定の方法でロックされているアカウント(!で始まるパスワードハッシュが具体的に言及されている)をチェックするために文書化されています。
ファルコンモモット14

13

これについていくつかの調査を行った後、使用する方法は、何をロックアウトする必要があるかによって異なります。ユーザーがこれをシェルに設定してログインすると、少なくともRHEL派生物でThis account is currently unavailable.ファイル/etc/nologin.txtを作成することでこれを変更できることに注意してくださいというメッセージが表示されます。

ご存知のとおり/bin/false、シェルではありません。動作方法は、バイナリが終了した直後にログアウトするfalseを返すことです。/bin/true同じ効果が得られることに注意してください。

FTPの質問に関して:はい、シェルを設定する/sbin/nologinと、ユーザーがFTPにログインできるようになる/bin/false/bin/true、ユーザーがサービスにログインできなくなります。

したがって、/bin/falseまたは/bin/true一方で、任意のサービスへのログインからユーザーを防ぐために最善である/sbin/nologin、まだユーザーがSSHまたはローカルコンソールアカウントが非アクティブで、最高使用されているユーザーにフィードバックを提供しながら、唯一のSSH /ローカル以外のサービスにログインできるようになりますコンソールをロックアウトする必要があります。


2

ええと、/ bin / falseがFTPアクセスを許可しないことを証明しようとしましたか?

ユーザーのシェルを/ bin / falseに変更しただけで、問題なくFTP転送できました。

/ dev / nullを使用して、ユーザーを完全にロックアウトします(電子メールを除き、ユーザーは引き続きPOP3を使用できます)。


入った/etc/shells?FTPサーバーはどのように構成されていますか?
マイケルハンプトン

ユーザーがFTPサーバーにログインするにはシェルが必要であるというルールはありません。
ペッターH

一部のFTPデーモンでは許可されませんが、他では許可されません。さまざまな機能の間で機能にはかなりの違いがあります。古典的な実装では、シェルを持っていない人はアクセスできませんが、すべての実装がそうする必要があるわけではありません。
ファルコンモモット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.