2026年9月19日
2026年9月19日
Linuxのsuコマンドを使えるユーザーを制限する方法|pam_wheelの設定手順
su コマンドは、パスワードを知っていれば誰でも別のユーザー(とくに root)に切り替えられます。root のパスワードが漏れたときの被害を小さくするため、su を使えるユーザーを特定のグループに限る設定が pam_wheel です。この記事では、Ubuntu 24.04 のコンテナで動作を確かめた手順を中心に、RHEL 系での違いも説明します(2026年10月時点)。
仕組み: pam_wheel
su の認証は PAM(Pluggable Authentication Modules)を通して行われ、その設定ファイルが /etc/pam.d/su です。ここに pam_wheel.so を加えると、wheel グループのメンバー以外は su で切り替えられなくなります。
pam_wheel の主なオプションは次のとおりです(pam_wheel のマニュアルより)。
| オプション | 意味 |
|---|---|
group=名前 |
wheel の代わりに指定したグループで判定する |
use_uid |
端末のログインユーザーではなく、実行しているプロセスの実 UID で判定する |
root_only |
切り替え先が root(UID 0)のときだけ判定する |
deny |
判定を逆にする(指定グループのメンバーを拒否) |
trust |
グループのメンバーならパスワードなしで通す(安全性が下がるため通常は使わない) |
wheel グループが存在しない場合、pam_wheel は GID 0 のグループ(通常は root グループ) で判定します。Ubuntu・Debian には標準で wheel グループがないため、グループを作るか group= で指定します。
作業前の準備
設定を誤ると root になれなくなることがあります。作業中は root のシェル(または sudo -i)を別の端末で開いたままにしておき、確認が終わるまで閉じないでください。
# 現在の設定を控えておく
sudo cp -p /etc/pam.d/su /etc/pam.d/su.bak
Ubuntu / Debian での手順
1. 許可用のグループを作り、ユーザーを加える
sudo groupadd wheel
sudo usermod -aG wheel alice
id alice # groups= に wheel が含まれていることを確認
グループの変更は、そのユーザーが次にログインしたときから有効になります。
2. /etc/pam.d/su を編集する
sudo nano /etc/pam.d/su
Ubuntu 24.04 の /etc/pam.d/su には、次のようにコメントアウトされた行があります。
auth sufficient pam_rootok.so
...
# auth required pam_wheel.so
この行の先頭の # を外し、use_uid を付けます。
auth required pam_wheel.so use_uid
pam_rootok.so の行(root が su するときはパスワード不要にする設定)より後ろ、@include common-auth より前に置きます。既存のコメント行を書き換えれば、この位置になります。
別の名前のグループを使う場合は group= で指定します。
auth required pam_wheel.so use_uid group=suusers
RHEL / AlmaLinux / Rocky Linux での手順
RHEL 系には標準で wheel グループがあり、/etc/pam.d/su にも次の行がコメントアウトされた状態で入っています。
#auth required pam_wheel.so use_uid
先頭の # を外し、許可するユーザーを wheel に加えます。
sudo usermod -aG wheel alice
RHEL 系の wheel グループは、標準の sudoers で「全コマンドを sudo で実行できる」グループでもあります。su だけを許可したい場合は、別のグループを作って group= で指定してください。
動作を確認する
Ubuntu 24.04 のコンテナで、alice(wheel のメンバー)と bob(メンバーではない)が、正しい root パスワードで su を実行した結果です。
| ユーザー | 結果 |
|---|---|
| alice | root に切り替わった |
| bob | su: Permission denied(パスワードが正しくても拒否) |
確認するときは、許可したユーザーで su - が通ることと、許可していないユーザーで拒否されることの両方を試します。
su - # 許可したユーザーで実行し、root になれることを確認
exit
root 以外への切り替えも制限される
root_only を付けない場合、pam_wheel は切り替え先が root 以外のときにも判定します。上の環境で bob が su alice を実行したところ、Permission denied になりました。root への切り替えだけを制限したい場合は root_only を付けます。
auth required pam_wheel.so use_uid root_only
この設定に変えると、bob から alice への切り替えは通常のパスワード認証に戻りました。
一緒に見直すこと
sudo の権限
pam_wheel が制限するのは su の認証だけです。sudo で root 権限を持つユーザーは、sudo -i や sudo su - で root になれます。Ubuntu では sudo グループ、RHEL 系では wheel グループのメンバーが該当するため、getent group sudo などでメンバーを確認し、必要な人だけに絞ってください。コマンド単位で sudo を許可する方法は sudoersで特定のコマンドだけ許可する方法 で説明しています。
Ubuntu の root パスワード
Ubuntu の標準インストールでは root にパスワードが設定されておらず、su - で root にはなれません(sudo を使う運用)。root パスワードを設定していない環境では、su の制限よりも sudo 権限の管理のほうが重要です。
失敗回数による制限(pam_tally2 は使えない)
ログイン失敗回数でアカウントをロックする pam_tally2 は、Linux-PAM 1.5.0 で削除されました。現在の Ubuntu・Debian・RHEL 系では、代わりに pam_faillock が提供されています(Ubuntu 24.04 にも pam_faillock.so が含まれていることを確認しました)。RHEL 8 以降では次のコマンドで有効にでき、回数や解除時間は /etc/security/faillock.conf で設定します。
sudo authselect enable-feature with-faillock
ロックの設定は誤ると管理者自身も締め出されるため、検証用の環境で試してから本番に入れてください。
SSH 側の制限
su の制限と合わせて、SSH でログインできるユーザーも絞っておくと、root パスワードやユーザーのパスワードが漏れたときの影響を小さくできます。手順は SSHのAllowUsersでログインできるユーザーを制限する方法 を参考にしてください。
元に戻す方法
su が使えなくなった場合は、開いたままにしておいた root のシェルで、控えておいたファイルを戻します。
sudo cp -p /etc/pam.d/su.bak /etc/pam.d/su
まとめ
/etc/pam.d/suにauth required pam_wheel.so use_uidを有効にすると、wheel グループ以外はsuできなくなる- Ubuntu・Debian には wheel グループがないので作成するか
group=で指定する root_onlyを付けない場合は root 以外への切り替えも制限される- sudo で root になれるユーザーは pam_wheel では止められないため、sudo 権限も合わせて見直す
pam_tally2は削除済み。失敗回数の制限はpam_faillockを使う