このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linux基礎:sudoコマンド

sudoコマンド
Linuxシステムでは、システム管理に関する多くの操作に rootユーザーの権限 が必要です。
これまでは su コマンドを使って root ユーザーに切り替える方法を学びました。しかし、su は root のパスワードを直接入力する必要があるため、複数人の管理者がいる環境ではセキュリティリスクが高まります。
この問題を解決するために利用されるのが sudo (superuser do) コマンドです。
sudo を使えば root のパスワードを知らなくても、一時的に root 権限でコマンドを実行できます。また、実行できるコマンドをユーザーごとに制限できるため、安全性と柔軟性を兼ね備えています。
ここでは sudo コマンドの基本的な使い方、オプション、注意点を具体的な例とともに解説します。

1.sudoコマンドの基本
1.1. 構文
sudo コマンド [引数]- 指定したコマンドを root 権限で実行する。
- root パスワードではなく 自分のユーザーパスワード を入力する。
- 実行できるコマンドは
/etc/sudoersで管理されている。
1.2. 一般ユーザーでの失敗例
root権限が必要な /etc/shadow ファイルを一般ユーザー user で閲覧しようとすると、次のようにエラーになります。
【例1】一般ユーザーで実行(失敗)
[user@rocky9 ~]$ tail /etc/shadow
tail: '/etc/shadow' を 読み込み用に開くことが出来ません: 許可がありませんこのように、セキュリティ上重要なファイルには一般ユーザーは直接アクセスできません。
1.3. sudoコマンドで実行
同じ処理を sudo を使って実行すると、今度は成功します。
【例2】sudoで実行(成功)
[user@rocky9 ~]$ sudo tail /etc/shadow
[sudo] user のパスワード: ← userのパスワードを入力
gdm:!!:20317::::::
setroubleshoot:!!:20317::::::
gnome-initial-setup:!!:20317::::::
sshd:!!:20317::::::
chrony:!!:20317::::::
dnsmasq:!!:20317::::::
tcpdump:!!:20317::::::
user:$6$smMhgD1oJ.9Z5kXo$H7obCHuqzTv9L072FYsXZb5Ah91LPawk9DW2vqrlQy/KUNT1NWD2Ql7E8AWHkFMV0j3BSKuVc44FNPnpuD4Im1:20317:0:99999:7:::
vboxadd:!!:20317::::::
tanaka:$6$rounds=100000$MiHyuRtRAuPEUiEy$.4F9tEepOvNcT6wQtAouf2ikhgV8QTAo6/UYmJWvE0hW8MzHEclt44C4jq9ckIbfLyFy.QLhwcga./BBUVTwj/:20326:0:99999:7:::→ rootパスワードは不要で、一般ユーザーのパスワードで認証される。
2.sudoコマンドの特徴
2.1. rootパスワードを知らなくてもよい
suは root のパスワードが必要sudoは 自分のパスワード を入力すればよい。- 複数の管理者がいても root パスワードを共有せずに済む。
2.2. 実行権限の制御
/etc/sudoers で設定することで、ユーザーごとに「どのコマンドを実行可能か」を制御できます。
これにより、システム全体のセキュリティが向上します。
【例3】特定ユーザーがroot権限でshutdownを実行する場合
userの所属グループを確認します。
[user@rocky9 ~]$ groups
user wheeluser が wheel グループに所属していることが確認できます。
wheel グループとは
wheel グループは、UNIX 系 OS(特に BSD 系や Linux)で「特権操作を許可するユーザーを制御するための特別なグループ」です。歴史的には BSD UNIX で導入され、その後 Linux などにも取り入れられました。
次のコマンドを実行します。
[user@rocky9 ~]$ sudo less /etc/sudoers
[sudo] user のパスワード:以下の定義を探します。
(省略)
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
(省略)→ wheel グループのユーザーは sudo で任意のコマンドを root 権限で実行可能。
ユーザーを tanaka に切り替えます。
[user@rocky9 ~]$ su - tanaka
パスワード:tanaka がどのグループに所属しているのかを確認します。
[tanaka@rocky9 ~]$ groups
tanakatanaka は wheel グループに所属していないことが分ります。
再起動のコマンドを実行します。
[tanaka@rocky9 ~]$ shutdown -r now
User user is logged in on tty2.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl reboot -i'.shutdown コマンドを実行することができません。
root 権限で shutdown コマンドを実行しますが、sudo コマンドを実行することができません。
[tanaka@rocky9 ~]$ sudo shutdown -r now
[sudo] tanaka のパスワード:
tanaka は sudoers ファイル内にありません。この事象は記録・報告されます。3.sudoコマンドのオプション
| オプション | 説明 |
|---|---|
-l | 自分が実行できるコマンドを一覧表示 |
-u ユーザー | root以外の特定ユーザーとして実行 |
-k | sudoの認証キャッシュを無効化 |
-b | コマンドをバックグラウンドで実行 |
-i | rootのログインシェルとして起動 |
3.1. root以外のユーザーで実行
sudo -u を使うと root 以外のユーザーに切り替えて実行可能です。
【例4】tanaka ユーザーとしてコマンドを実行
tanaka をログアウトして、user に切り替えます。
[tanaka@rocky9 ~]$ exit
ログアウト次のコマンドを実行します。
[user@rocky9 ~]$ sudo -u tanaka whoami
[sudo] user のパスワード:
tanakawhoami コマンドは、現在ログインしているユーザーのユーザー名を表示するコマンドです。
まとめ
sudoコマンドは root 権限が必要な操作を安全に実行するための仕組みである。- rootパスワードは不要で、実行ユーザーのパスワードを利用する。
/etc/sudoersによって実行できるコマンドが制御されるため、セキュリティが高い。- オプションを使えば root 以外のユーザーとしても実行可能。
suと比較すると、sudoの方が管理しやすく安全性も高いため、多くのLinuxディストリビューションで標準的に利用されている。
