SSHを含むサーバーのユーザーアカウントを完全にロックします。

SSHを含むサーバーのユーザーアカウントを完全にロックします。

可能であれば、ホームページを混乱させずに一部のユーザーアカウントをロックする必要があります。

一般的な方法は、usermod -L user公開鍵認証(通常はこのサーバーで使用されます)を使用してSSHログインを開いたままにすることです。

私はできることmv /home/user/.ssh /home/user/_sshを知っています。しかし、これは正しい方法ですか?

私は何を見逃していますか?

答え1

このマニュアルはman usermod推奨ソリューションを提供します。

-L--lockユーザーのパスワードをロックします。これにより、!暗号化されたパスワードの前に1つが配置され、パスワードが効果的に無効になります。このオプション-pはまたはで使用できません-U

注:アカウントをロックするには(パスワードを使用してアクセスするのではなく)EXPIRE_DATEに設定する必要があります1

それから

-e--expiredate EXPIRE_DATEユーザーアカウントが無効になる日付。日付は形式で指定されますYYYY-MM-DD

EXPIRE_DATEのパラメータはアカウントの有効期限を無効にします。

それでは実際のケースに変えてみてください

usermod -L -e 1 someuser     # Lock
usermod -L -e '' someuser    # Unlock

デフォルトの有効期限を設定した場合は、/etc/default/useraddロック解除プロセスにその値(存在する場合)を含めることができます。

usermod -U -e "$( . /etc/default/useradd; echo "$EXPIRE")" someuser

cronロックされたアカウントを持つユーザーだけでなく、期限切れのアカウントを持つユーザーに対してもスケジュールされた操作は無効になります。エラーメッセージには、journalctl -u cron期限切れのユーザーのアカウント名が表示されます(この場合test2)。

Apr 30 11:47:01 pi CRON[26872]: pam_unix(cron:account): account test2 has expired (account expired)
Apr 30 11:47:01 pi cron[472]: Authentication failure
Apr 30 11:47:01 pi CRON[26872]: Authentication failure

スケジュールされたジョブはatまだ試行されていません。 (期限が過ぎると実行されるかはわかりませんが、経験上そうではないようです。)

ロックされ、期限切れのアカウントですでに実行されている他のプロセスは、影響を受けずに実行され続けます。

答え2

"usermod -L user"を実行した後、この行を最後に追加してSSHアクセスを拒否できます。/etc/ssh/sshd_config文書:

DenyUsers user

または、ユーザーをグループに追加して、SSH ログインが拒否されるように、この目的のためにグループを作成することもできます。

groupadd deny-ssh
usermod -a -G deny-ssh user

そして最後にグループを追加してください/etc/ssh/sshd_config文書:

DenyGroups deny-ssh

各変更後/etc/ssh/sshd_configファイルは、変更を適用するためにsshdデーモンが再ロードされていることを確認します。

systemctl reload sshd

reloadコマンドは新しい設定をロードし、既存のSSHセッションをすべて開いたままにします。


あるいは、ログインしてもシェルを取得できないようにユーザーシェルを変更できます。

usermod --shell /usr/sbin/nologin user

1つのコマンドで上記のすべてを行う単純なbashスクリプトを作成することをお勧めします。

ログインが拒否されました。sh:

#!/bin/bash

#Lock user account
usermod -L $1

#Deny SSH connections
usermod -a -G deny-ssh $1

#Remove user Shell
usermod --shell /usr/sbin/nologin $1

#Reload sshd
systemctl reload sshd

これで、次のようにスクリプトを実行できます。

./deny-logon.sh user

そして、「ユーザー」に対して上記のすべての変更が自動的に適用されます。

編集:@roaimaのソリューションが最も正確です。アカウントの有効期限が切れると、そのアカウントへのすべてのアクセスが無効になります。これは、ユーザーがログインしないようにしたい場合に実行する必要がある操作です。

答え3

ユーザーのユーザー名またはグループを追加して、ユーザーのSSHログインを無効にできる必要があります。

/etc/ssh/sshd_config

設定DenyUsersおよび/またはDenyGroup

望むよりman 5 sshd_config

sshdを忘れないでくださいHUP

答え4

アカウントをロックするのは正しいことです。 SSH を防ぐために、authorized_keys ファイルを削除することもできます。

SSH以外にログインする他の方法もあることを覚えておいてください。

「*rc」ルーチンを使用して何かをするのは厄介ですが、通常は「sftpのみ」アカウントに使用されます(SftpまたはSCPで呼び出されるユーティリティアカウントの場合)。

しかし、!パスワードは良いです変化回復が必要な場合はパスワードを入力してください。

いつものようにバックアップを安全に保管してください。

関連情報