Linuxコマンド

sudoコマンドの使い方

投稿日:

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ファイルの設定は簡単な例しか示していませんが、もっと柔軟にいろいろな設定ができます。本格的な設定をする場合はマニュアル等を参考にしてください。

-Linuxコマンド

Copyright© アナグマのモノローグ , 2024 All Rights Reserved Powered by STINGER.