回答:
による正しい方法usermod(8)
は次のとおりです。
usermod --lock --expiredate 1970-01-02 <username>
(実際には、への引数--expiredate
は、形式の現在の日付より前の任意の日付にすることができますYYYY-MM-DD
。)
説明:
--lock
ユーザーのパスワードをロックします。ただし、他の方法(公開鍵など)によるログインは引き続き可能です。
--expiredate YYYY-MM-DD
指定された日にアカウントを無効にします。man shadow 5
1970-01-01によると、あいまいな値であり、使用されません。
私は自分のマシンでこれをテストしました。このコマンドを実行した後、パスワードまたは公開キーを使用したログインはできません。
後でアカウントを再度有効にするには、次を実行します:
usermod --unlock --expiredate '' <username>
usermod --unlock --expiredate '' username
それを行うように見えます。
usermod
言う:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
--expiredate 1
それだけでは不十分ですか?
sudo su username
別のアカウントを使用して動作するようです。
パスワードをロックし、シェルをに変更します/bin/nologin
。
sudo usermod --lock --shell /bin/nologin username
(または、より簡潔に、sudo usermod -L -s /bin/nologin username
。)
ssh username@hostname /bin/bash
、デフォルトのシェルに関係なく、ユーザーにbashプロンプトを表示します。
sudo chsh -s /bin/nologin
/etc/passwd
手で編集するよりも良いでしょう。また、一部のシステムでは、/sbin/nologin
です。
別の簡単な方法を次に示します。期限切れのユーザーアカウントを設定できます。これにより、アカウントのパスワードベースのログインとsshキーベースのログインの両方が防止されますが、パスワードは変更されません。
アカウントをロックするには:
# chage -E 0 username
ユーザーアカウント 'username'はシステムでロックアウトされます。ユーザーアカウントを再度有効にするには、次の手順を実行します。
アカウントのロックを解除するには:
# chage -E -1 username
ユーザーアカウント 'username'は、以前と同じパスワードを使用してシステムで再度有効になります。'chage'バイナリは、Red Hat Linuxのshadow-utilsパッケージ、またはDebian Linuxのpasswdパッケージの一部です。
Legateの答えにコメントするのに十分な担当者がいませんが、この答えが別のユースケースに役立ったことを共有したいと思いました。
1.)問題のアカウントは、エンドユーザーアカウントではなく、アプリケーションを実行しているローカルサービスアカウントです。
2.)エンドユーザーが自分でsshしsudo /bin/su <user>
、サービスアカウントが直接ログインできない監査証跡要件により、ユーザーになり、アプリケーションを管理します。
3.)サービスアカウントは、(有効なシェルを持っている必要があり/bin/bash
、ない/sbin/nologin
エンタープライズスケジューリングプラットフォーム(ローカルルートとして、エージェントの実行が)することができなければならないので、)su - <user>
と持っていないsu -s /bin/bash <user>
、完全なシェルがないという能力を、リモートジョブを実行するために必要とされます複数のサーバーとデータベースを含む大規模なバッチ操作用。
だから...
passwd -l <user>
公開鍵認証はPAMをバイパスし、直接ログインを許可するため、制約を満たしません。
usermod -s /sbin/nologin <user>
エンタープライズスケジューラが破損するため、制約を満たさない
usermod --lock --expiredate 1970-01-01 <user>
これが私たちの勝者です。リモートログインは無効になっていますがsu <user>
、他のユーザーも同様にrootができるsudo
ため、スケジューラが適切に機能し、承認されたエンドユーザーが必要に応じてターゲットサービスアカウントになります。
解決策をありがとう!
完全に削除するには、を使用しますuserdel
。
アカウントを削除すると、そのユーザーIDがファイルシステムでどこかで使用され、同じユーザーIDでアクセスした場合、新しいユーザーがそれらのファイルの所有権を継承するリスクがあることに注意してください。
削除されたユーザーが所有しているファイルの所有者を変更する必要があります。
ユーザーを後で追加し直したい場合は、その行を/etc/passwd
(およびSolaris上で/etc/shadow
)などの一時ファイルに保存します/etc/passwd_deleted
。
そのように追加して戻すと、同じユーザーIDと同じパスワード(上記のファイルのいずれかで暗号化されます)を使用できます
免責事項:私は自分でUNIXを学んだので、ユーザーを一時的に無効にするより良い方法があれば驚かないでしょう。実際、私があなたが話している秘密/公開鍵が何であるかさえ知りません。またfind
、その所有者のユーザーIDを持つファイルを検索するために使用できるコマンドがあると確信しています
誰かがssh_config経由でそれをやってみましたか?たぶんこれはhttp://www.techrepublic.com/blog/opensource/set-up-user-accounts-quickly-and-securely/86に役立つかもしれません
また、PasswordAuthenticationがnoに設定されていることを確認して、すべてのログインが公開鍵を使用するようにします。