このページで解説している内容は、以下の 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 wheel

user が 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
tanaka

tanaka は 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以外の特定ユーザーとして実行
-ksudoの認証キャッシュを無効化
-bコマンドをバックグラウンドで実行
-irootのログインシェルとして起動

3.1. root以外のユーザーで実行

sudo -u を使うと root 以外のユーザーに切り替えて実行可能です。

【例4】tanaka ユーザーとしてコマンドを実行

tanaka をログアウトして、user に切り替えます。

[tanaka@rocky9 ~]$ exit
ログアウト

次のコマンドを実行します。

[user@rocky9 ~]$ sudo -u tanaka whoami
[sudo] user のパスワード:
tanaka

whoami コマンドは、現在ログインしているユーザーのユーザー名を表示するコマンドです。

まとめ

  • sudo コマンドは root 権限が必要な操作を安全に実行するための仕組みである。
  • rootパスワードは不要で、実行ユーザーのパスワードを利用する。
  • /etc/sudoers によって実行できるコマンドが制御されるため、セキュリティが高い。
  • オプションを使えば root 以外のユーザーとしても実行可能。
  • su と比較すると、sudo の方が管理しやすく安全性も高いため、多くのLinuxディストリビューションで標準的に利用されている。