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 を使う

お気軽にご相談ください

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