セキュリティ上の理由でユーザーシェルを無効にする


58

システム間のファイル転送、監視など、きめの細かい許可が必要な自動化タスク用に作成するユーザーアカウントがいくつかあります。

これらの「ユーザー」がシェルを持たず、ログインできないように、これらのユーザーアカウントをロックダウンするにはどうすればよいですか?これらのユーザーアカウントの1つとして誰かがSSHで接続できる可能性を防止したいと考えています。

回答:


63

このusermodコマンドを使用して、ユーザーのログインシェルを変更できます。

usermod -s /sbin/nologin myuser

または

usermod -s /usr/sbin/nologin myuser

OSが/ sbin / nologinを提供していない場合、シェルを/ bin / falseなどのNOOPコマンドに設定できます。

usermod -s /bin/false myuser

1
/bin/falseより一般的です/bin/true
jw013

@ jw013回答を更新しましたが、両方とも正常に動作するはずです。
ヨルダン

1
Debianでは、nologin実際には次の場所にあることに注意してください/usr/sbin/nologin
xebeche

これは私の最初のアイデアだった、設定する際に、残念ながら一部のユーザーアカウントの「有効」の使用が無効になっているnologin
ハビエル・

2
@ jw013実際に私が持って/usr/local/bin/maybeいる/dev/urandomLYは、これら二つの間で選択されます。多分私はそれを使用する必要があります:D
hegez

21

ログインシェルを変更しても、必ずしもユーザーの認証が妨げられるわけではありません(ユーザーのシェルがに記載されているかどうかを確認する一部のサービスを除く/etc/shells)。

システムがunixユーザーに提供するさまざまなサービスに対する認証をユーザーはまだ受けられる可能性があり、おそらく任意のコマンドを直接実行しない場合でも、いくつかのアクションの実行を許可される可能性があります。

シェルを変更する/bin/falseか、/usr/sbin/nologinコマンドのみを実行するために使用することができるサービス(コンソールログイン、SSH、telnetの、rloginの、REXEC ...)上でコマンドを実行しているからそれらを防ぐことができますので、影響を与える許可を唯一のいくつかのサービスのために。

たとえばssh、それでもポート転送を行うことができます。

passwd -lパスワード認証を無効にしますが、ユーザーはまだ(のような他の認証方法を使用することを許可することができるauthorized_keysssh)。

pam少なくともLinux上では、使用することができますpam_shells許可シェル(で述べたものとユーザーに認証または許可を制限するためにモジュールを/etc/shells)。の場合ssh、他の認証方法(のような)に加えaccount認証のsshd使用に関して認可()レベルで行うか、(like and friends)のディレクティブで行うことができます。pam authorized_keyssshd_config/etc/ssh/sshd_configAllowUsers

ただし、グローバルなpam承認にいくつかの制限を追加するとcron、それらのユーザーとしてジョブを実行できなくなる可能性があることに注意してください。


ありがとうございました。次に、次のスキーマを与えられた場合、何をお勧めしますか:sftpまたはsshfsを介してホームフォルダーにアクセスする必要があるユーザーを作成する必要がありますが、シェルでログインできないようにする必要があります。それも可能ですか?私は、PAMモジュールは、後藤の解決策になるかもしれませんが、私はそれをすべて理解していないように落ちた:|
Stphane

-あなたはrsshに見てとることができ@Stphane manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
ハートSimha

4

/etc/passwdファイルを編集し、ユーザーシェルをから/bin/bashまたは/bin/shに変更します/sbin/nologin


8
答えは正しいですが、/ etc / passwdを手動で編集することはお勧めできません。
ヨルダン

3
どうして?私がプロのシステム管理者である限り、これは私たちがやってきたことです。(約20年後)実際、すべてのlinux / unixディストリビューションに/ etc / passwdまたは/ etc / groupを変更するツールがあるわけではありません。それらは手編集に害はありません。
マークコーエン

6
単一のユーザーではなく、手作業で編集することで、「全員のログインを中断する」という間違いを犯すのははるかに簡単です。
ヨルダン

2
@jordanm:vipwそのような間違いを防ぐ方法があります。
eudoxos

4

まず、を使用してパスワードを無効にしますpasswd -l username

forオプションのmanページにも注意してください:passwd-l

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

1
これは望ましくない場合があります。たとえば、メールにアクセスするためにシステムアカウントにパスワードが必要になる場合があります。
ヨルダン

1
一部のメールシステムでは、独自のパスワードメカニズムを使用できます。DovecotとEximにメール専用パスワードを使用しています。これにより、システムパスワードを使用しないサーバーでWebメールを使用できるようになります。仮想メールドメインは、サーバーのパスワードシステムに結合されていないため、独自のパスワードが必要です。
-BillThor

2

chshコマンドを使用できます。

~# chsh myuser

要求されたら、新しいシェルの詳細を入力します。

Login Shell [/bin/sh]: /bin/nologin

またはより短いバージョン:

~# chsh myuser -s /bin/nologin

0

ユーザーがログを記録したり、ポート転送を可能にするsshでの認証さえできないようにするには(ここで Stephane で説明します)、ユーザーをシステムのnobodyユーザーに似るように変更します。

  • ブロックされたパスワード認証/etc/shadow*または!!適切なフィールドで)
  • 無効なシェル/etc/passwd(例:/sbin/nologin適切なフィールド)
  • 読み取り専用のホームディレクトリ/etc/passwd(例:/適切なフィールド)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.