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コマンドの使い方」で説明しています。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲