10.12. 一般ユーザーから root のコマンドを実行 【sudo】

スーパーユーザーしか実行することのできないコマンドの使用権限を一般ユーザーに与えることができるプログラムに sudo(Superuser do)というものがあります。sudo コマンドを使用すると、root にならなくても shutdown や reboot コマンドを実行できるようになります。一般ユーザの権限では実行できないコマンドを特定のユーザだけに許可したいが、root 権限を与えたくない場合などに使用されます。そのためには、/etc/sudoers ファイルを編集し、どのユーザーにコマンドの実行を許可するのかを事前に定義しておく必要があります。/etc/sudoer の編集は visudo というプログラムを使用します。操作方法は vi と同じですが、編集後のチェックが行われます。

以下に、/etc/sudoers の基本的な書式を示します。詳細については man sudoers を参照してください。

ユーザー名 ホスト名=コマンド

/etc/sudoers では、「どのホストで」、「どのユーザが」、「誰の権限で」、「どのコマンド」を実行可能にするのかを定義します。

ユーザー名にはコマンドの実行を許可するユーザー名を指定します。ホスト名には、ホスト名、または IP アドレスの指定を指定します。すべてのホストを定義するには、ALL が指定できます。コマンドには、実行を可能にするコマンドをフルパスで指定します。すべてのコマンドを実行可能とするには、ALL が指定できます。

デフォルトでは、次のように root の設定だけが定義されています。

# User privilege specification
root    ALL=(ALL) ALL

例えば、全ホストでユーザー turbo が reboot コマンド を root 権限で実行可能とするには、visudo を起動し、次の行を入力します。

turbo ALL=/sbin/reboot

実際に、ユーザ turbo が sudo を使用して reboot コマンドを実行するには、次のようにコマンドを実行します。

$ sudo reboot

すると、パスワードを問われます。

Password:

ここに、ユーザー turbo のパスワードを入力すると、reboot コマンドが実行されます。なお、一度 sudo を使用してから 5 分以内に再度 sudo を実行した場合は、パスワードの入力は要求されません。

パスワードを入力することなくコマンドの実行を許可するには、NOPASSWD: オプションが使用できます。

turbo ALL=NOPASSWD: /sbin/reboot

これにより、ユーザー turbo は、パスワードを入力しなくとも reboot コマンドの実行が可能となります。

また、ユーザーやコマンドにはエイリアスの定義が可能です。エイリアスには、ユーザーのエイリアスを定義する User_Alias やコマンドのエイリアスを定義する Cmnd_Alias などが存在します。もし、特定のコマンドを、特定のユーザーだけに、root 権限で実行させたい場合、sudoers ファイルには以下のようなエントリを定義します。

User_Alias ADMIN_USER=user1,user2,user3
Cmnd_Alias ADMIN=/sbin/shutdown,/sbin/halt,/sbin/reboot

ADMIN_USER ALL=ADMIN

この例では、ユーザー user1、user2、user3を含む ADMIN_USER というエイリアスと /sbin/shutdown/sbin/halt/sbin/reboot を含む ADMIN というエイリアスを定義しています。なお、エイリアス名は必ず大文字で定義します。これにより、user1、user2、user3 だけが shutdown、halt、reboot コマンドを root 権限で実行することが可能となります。

ユーザーに許可されているコマンドは、-l オプションで確認することができます。

$ sudo -l