sudoコマンドは、指定したユーザー権限で特定のコマンドを実行するためのコマンドです。
主にスーパーユーザー権限を必要とするコマンドを一般ユーザーが実行できるようにするために使われます。
sudoコマンドを利用する目的
複数人で管理しているマシンでスーパーユーザー権限を必要とするコマンドを実行するには、suコマンドでスーパーユーザーにスイッチしてからコマンドを実行する運用もできますが、この場合、全ての管理者でスーパーユーザーのパスワードを共有する必要があります。これはセキュリティ的にもよろしくありません。
sudoコマンドを利用すると、一般ユーザーがスーパーユーザー権限を必要とするコマンドを実行できるようになります。これによってスーパーユーザーのパスワードを共有する必要がなくなるのでセキュリティも向上します。
また、sudoコマンドの実行はログファイルに記録されますので、どのユーザーが特権コマンドを実行したかを追跡できるようにもなります。
sudoコマンドの設定
sudoコマンドを利用するには/etc/sudoersファイルに設定が必要です。
visudoコマンド
/etc/sudoersファイルを編集するには、rootユーザーでvisudoコマンドを実行します。
# visudo
visudoコマンドを実行すると通常はviエディタで/etc/sudoersファイルが開かれます。
/etc/sudoersファイル
特定のユーザー(やグループ)にsudoコマンドの実行を許可する主な設定は次のとおりです。
ユーザー名 ホスト名=(実行ユーザー名) コマンド %グループ名 ホスト名=(実行ユーザー名) コマンド
- ユーザー名、%グループ名
- コマンドの実行を許可する「ユーザー名」か「%グループ名」、あるいは「ALL」を指定します。
- ホスト名
- 実行を許可する「ホスト名」、「IPアドレス」、あるいは「ALL」を指定します。
- 実行ユーザー名
- コマンド実行時のユーザー名(省略時はrootと仮定される)、あるいは「ALL」を指定します。
- コマンド
- 実行を許可する「コマンドのパス」、あるいは「ALL」を指定します。
設定例
ディストリビューションによっては、あらかじめ次のような設定が記述されている場合があります。
%wheel ALL=(ALL) ALL
この設定でwheelグループに所属するユーザーは全てのコマンドの実行が許可されます。
ユーザーをwheelグループに所属させるには次のように実行します。
# id taro uid=1001(taro) gid=1001(taro) groups=1001(taro) # usermod -aG wheel taro # id taro uid=1001(taro) gid=1001(taro) groups=1001(taro),10(wheel)
次にtaroユーザーにshutdownコマンドを実行できるようにしてみましょう。それには次の行を追加します。
taro ALL=(ALL) /usr/sbin/shutdown
taroユーザーに全てのコマンドを実行できるようにするには次の行を追加します。
taro ALL=(ALL) ALL
sudoコマンドの利用
sudoコマンドの書式は次のとおりです。
sudo [オプション] 実行するコマンド
コマンドを実行すると必要に応じてパスワードの入力が求められますので、「sudoコマンドを実行するユーザーのパスワード(スーパーユーザーのパスワードではない)」を入力します。
コマンド例
オプションを指定しないで実行すると、スーパーユーザー権限でコマンドを実行します。
$ sudo shutdown -h now
最初にsudoコマンドを実行する場合は、次のような注意書きか表示されます。
$ sudo shutdown -h now We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for taro:
一度パスワードを入力すると、しばらくの間はパスワード入力なしにsudoコマンドを実行できます。
特定のユーザー権限でコマンドを実行することもできます。それには-uオプションに「ユーザー名」を指定します。
$ sudo -u ユーザー名 コマンド
-iオプションを指定すると指定されたユーザーでシェルを実行します。
$ sudo -i
上記の例では実行ユーザー名(-uオプション)を省略しているので、スーパーユーザーでシェルを実行します。これは「su -」でスーパーユーザーにスイッチするのと似ています。
-lオプションを指定すると、許可されたコマンドを確認することができます。
$ sudo -l ... User taro may run the following commands on guest: (ALL) /usr/sbin/shutdown
sudoのログ
sudoコマンドの実行は/var/log/secureファイルに記録されます。
$ sudo useradd hanako [sudo] password for taro: $ sudo tail /var/log/secure ... Feb 5 08:44:12 guest sudo[2197]: taro : TTY=pts/0 ; PWD=/home/taro ; USER=root ; COMMAND=/sbin/useradd hanako Feb 5 08:44:12 guest sudo[2197]: pam_systemd(sudo:session): Cannot create session: Already running in a session or user slice Feb 5 08:44:12 guest sudo[2197]: pam_unix(sudo:session): session opened for user root by vagrant(uid=0) Feb 5 08:44:13 guest useradd[2201]: new group: name=hanako, GID=1002 Feb 5 08:44:13 guest useradd[2201]: new user: name=hanako, UID=1002, GID=1002, home=/home/hanako, shell=/bin/bash Feb 5 08:44:13 guest sudo[2197]: pam_unix(sudo:session): session closed for user root
おわりに
この記事ではsudoの基礎を解説しました。/etc/sudoersファイルの設定は簡単な例しか示していませんが、もっと柔軟にいろいろな設定ができます。本格的な設定をする場合はマニュアル等を参考にしてください。