2026年5月30日
2026年5月30日
Linuxでアカウントをロック・アンロックする方法|passwd・usermod・faillockの使い分け
Linux でユーザーを一時的に使えなくするときは、「パスワードだけを止める」のか「アカウント全体を止める」のかで使うコマンドが違います。passwd -l でロックしても SSH 鍵ではログインできるため、退職者や侵害が疑われるアカウントを止める目的には足りません。この記事のコマンドと動作は、2026年11月時点で shadow-utils と linux-pam のマニュアル(man ページ)で確認したものです。
以下のコマンドはすべて root 権限で実行します。例のユーザー名は alice です。
ロックの種類
| 方法 | 止まるもの | 止まらないもの |
|---|---|---|
passwd -l / usermod -L |
パスワードでのログイン | SSH 鍵など、パスワード以外の認証 |
usermod --expiredate 1 |
アカウント全体(PAM を通るログインはすべて拒否) | すでにログイン中のセッション |
ログインシェルを /usr/sbin/nologin に変更 |
対話シェルでのログイン | シェルを使わない接続(SFTP の設定によっては接続できる) |
| faillock(pam_faillock) | 一定回数パスワードを間違えたあとの認証 | 管理者が設定した回数・時間に達するまでのログイン |
状態を確認する
passwd -S でパスワードの状態を確認できます。
sudo passwd -S alice
2番目の欄が状態です。L はパスワードがロックされている、NP はパスワードが無い、P は使えるパスワードがある、という意味です(ディストリビューションによっては LK・PS のように表示されます)。
アカウントの有効期限は chage -l で確認します。「Account expires」(日本語環境では「アカウント期限切れ」)の行が never 以外の日付なら、その日以降はアカウントが使えません。
sudo chage -l alice
/etc/shadow を直接見る場合は、2番目の欄(パスワードのハッシュ)の先頭に ! が付いていればロックされています。/etc/shadow は手で書き換えず、以下のコマンドで変更します。
sudo grep '^alice:' /etc/shadow
パスワードをロック・アンロックする
パスワードでのログインだけを止めるには passwd -l(または usermod -L)を使います。ハッシュの先頭に ! が付き、どのパスワードとも一致しなくなります。
# ロック
sudo passwd -l alice
# アンロック(ロック前のパスワードに戻る)
sudo passwd -u alice
usermod -L と usermod -U も同じく ! を付け外しします。
sudo usermod -L alice
sudo usermod -U alice
passwd のマニュアルにあるとおり、これはアカウントを無効にするものではなく、SSH 鍵など別の認証方法ではログインできます。
アカウント全体を止める
SSH 鍵でのログインも含めて止めるには、アカウントの有効期限を過去の日付にします。passwd のマニュアルは usermod --expiredate 1(有効期限を1970年1月2日にする)を案内しています。パスワードのロックと組み合わせると、パスワードと有効期限の両方で止まります。
sudo usermod --lock --expiredate 1 alice
有効期限切れのアカウントは、PAM のアカウント確認で拒否されます。SSH でも UsePAM yes(多くのディストリビューションの初期設定)の場合は鍵認証でも入れません。
元に戻すときは、有効期限を空にしてパスワードのロックを外します。
sudo usermod --unlock --expiredate '' alice
chage でも同じ操作ができます。chage -E 0 で有効期限を1970年1月1日に、chage -E -1 で期限なしに戻します。
sudo chage -E 0 alice
sudo chage -E -1 alice
ログイン中のセッションを終わらせる
ロックや有効期限の設定は、すでにログインしているセッションを切りません。すぐに止める必要がある場合は、そのユーザーのプロセスを終了します。
# systemd-logind が管理するセッションを終了
sudo loginctl terminate-user alice
# 残っているプロセスがあれば終了
sudo pkill -KILL -u alice
SSH 鍵とcronも確認する
侵害が疑われる場合は、ロックに加えて ~alice/.ssh/authorized_keys に知らない鍵が追加されていないか、crontab -l -u alice で不審な定期実行が無いかも確認してください。
ログインシェルを nologin にする
サービス用のアカウントなど、対話的にログインさせないアカウントはシェルを nologin にします。パスは Debian・Ubuntu、RHEL 系とも /usr/sbin/nologin です。
sudo usermod -s /usr/sbin/nologin alice
戻すときは元のシェル(例: /bin/bash)を指定します。シェルの変更だけでは、SFTP などシェルを使わない接続が許可される場合があるため、利用者を止める目的では有効期限の設定を使います。
パスワードを間違えたあとの自動ロック(faillock)
一定回数パスワードを間違えたアカウントを自動でロックするのは、PAM の pam_faillock モジュールです。以前使われていた pam_tally2 は linux-pam から削除されています。
設定は /etc/security/faillock.conf に書きます。主な項目と初期値は次のとおりです。
| 項目 | 意味 | 初期値 |
|---|---|---|
deny |
この回数を超えて連続で失敗するとロック | 3 |
fail_interval |
失敗を数える期間(秒) | 900 |
unlock_time |
ロックが自動で解除されるまでの秒数(0 なら管理者が解除するまで) | 600 |
even_deny_root |
root もロックの対象にする | 無効 |
RHEL 8・9 とその互換 OS では、authselect で faillock を有効にしてから faillock.conf を編集します。
sudo authselect enable-feature with-faillock
sudo authselect current
Ubuntu や Debian では初期状態で pam_faillock は有効になっていません。有効にするには /etc/pam.d/ の認証設定を編集する必要があり、書き方を誤ると誰もログインできなくなるため、root のセッションを1つ開いたまま作業し、別の端末でログインを試して確認してください。
ロックの状態を確認・解除する
# 失敗の記録を表示
sudo faillock --user alice
# 失敗の記録を消してロックを解除
sudo faillock --user alice --reset
faillock によるロックは passwd -S には表示されません。パスワードが正しいのにログインできないときは、faillock --user の記録も確認してください。
注意点
/etc/shadowをエディターやechoで直接書き換えないでください。書式が崩れると全ユーザーがログインできなくなることがあります。変更はpasswd・usermod・chageで行います。- root アカウントをロックする前に、sudo できる別の管理ユーザーでログインできることを確認してください。
- 退職者などのアカウントを止めたあとは、そのユーザーが所有するファイルやcron、
authorized_keysを整理し、不要になった時点でuserdelで削除します。
関連する記事として、パスワードの変更や期限の設定は「Linuxのpasswdコマンドの使い方」で説明しています。