連載
» 2016年11月28日 05時00分 UPDATE

Linux基本コマンドTips(68):【 sudo 】コマンド――スーパーユーザー(rootユーザー)の権限でコマンドを実行する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、「sudo」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、スーパーユーザー(rootユーザー)の権限でコマンドを実行する「sudo」コマンドです。

sudoコマンドとは?

 「sudo コマンド」と指定することで、「スーパーユーザー(rootユーザー)」の権限が必要なコマンドをsudoコマンド経由で実行させることができます。ただし、sudoコマンドの実行には「sudoers」の設定が必要になります。

 同じような用途のコマンドに「su」(本連載第68回参照)があります。rootのパスワードが必要となるsuコマンドとは違い、sudoコマンドは、パスワードなしで実行できるように設定したり、sudoコマンドを実行するユーザー自身のパスワードでコマンドを実行させたりすることができます。


sudoコマンドの書式

sudo [オプション] [コマンド]




sudoコマンドの主なオプション

 sudoコマンドの主なオプションは次の通りです。

●パスワード入力、認証、権限関係
オプション 意味
-A パスワード入力用のコマンドを使用する(コマンドは「/etc/sudo.conf」または環境変数「SUDO_ASKPASS」で設定)
-n パスワードを要求するプロンプトを表示しない(パスワード入力が必要なコマンドの場合はエラーとなって実行できない)
-p 文字列 パスワード入力時のプロンプトを指定する(デフォルトは「:」記号)
-S パスワードを端末ではなく標準入力から読み込む(パスワードの末尾には改行が必要)
-k 保存されている認証情報を無効にする(次回のsudo実行時には必ずパスワード入力が必要)。コマンドと一緒に使用可能
-K 保存されている認証情報を完全に消去する
-V 保存された認証情報を更新する
-u ユーザー コマンドを実行するときのユーザーを「ユーザー名」または「ユーザーID(#記号と数字)」で指定する
-g グループ コマンドを実行するときのグループを「グループ名」または「グループID(#記号と数字)」で指定する
-P sudoを実行するユーザーが所属するグループのままコマンドを実行する

●その他
オプション 意味
-b 指定したコマンドをバックグラウンドで実行する
-e 指定したファイルを編集する(コマンドは「sudoedit」を使用する)
-E 現在の環境変数を保持してコマンドを実行する
-H 環境変数「HOME」をrootユーザーのホームディレクトリに変更してコマンドを実行する
-s 環境変数「SHELL」で指定されたシェル、またはrootユーザーのシェルを実行する。コマンドを指定しなかった場合は対話シェルとなる
-i rootユーザーのデフォルトのシェルをログインシェルとして実行する。コマンドを指定しなかった場合は対話シェルとなる
-l sudoを実行するユーザーに許可されているコマンドを一覧表示する。「sudo -l コマンド」のようにコマンドを指定した場合、コマンドが許可されていればコマンドの絶対パスを表示する
-ll 「-l」オプションと同様だが、長い形式で表示する
-U ユーザー 「-l」オプションと組み合わせて使用し、指定したユーザーの権限で実行できるコマンドを一覧表示する

ワンポイント

 オプション一覧の説明では「rootユーザー」としていますが、sudoで指定したコマンドを実行するユーザーの権限はrootに限りません。誰の代理となってコマンドを実行するかは、設定ファイルで変更できます。




スーパーユーザーの権限でコマンドを実行する

 パッケージのインストールなど、root権限が必要なコマンドを実行したい場合、例えば「yum install wget」ならば「sudo yum install wget」のように指定します。

 最初にパスワード入力を促すプロンプトが表示されるので、自分自身のパスワードを入力します。

ワンポイント

 一定時間内であれば、2回目以降のパスワード入力は省略できます。認証情報を破棄したい場合は「sudo -K」実行します。また、「sudo -k yum install wget」のように「-k」オプションを指定すると、必ずパスワードを入力してから実行するようにできます。


コマンド実行例

sudo yum install wget

(sudoで「yum install」コマンドを実行する)(画面1


画面1 画面1 sudoでyum installを実行。パスワード入力を促されたら、自分自身のパスワードを入力する

 sudoコマンドを一般ユーザーで実行できるかどうかは、システムの設定によって異なります。

 例えば、CentOS(バージョン7)では、rootユーザーの他に「wheelグループ」にsudoコマンドの実行が許可されています。sudoコマンドを実行したいユーザーがwheelグループに属していない場合は、「gpasswd -a ユーザー名 wheel」などでwheelグループを追加するか、この記事の末尾を参考に「/etc/sudoers」で許可を追加してください。

 なお、どちらの設定にもroot権限が必要ですが、CentOSの場合はデフォルトでsuコマンド(root権限でシェルを起動するコマンド)の実行が許可されています。

 Ubuntu(バージョン15)もwheelグループまたはsudoグループに属しているユーザーはsudoコマンドを実行できますが、OSインストール時のユーザーは、自動でwheelグループとsudoグループに所属するように設定されています。



スーパーユーザーの権限でシェルを実行する

 「sudo -s」で、root権限でシェルを実行できます。「su」コマンドと同じ動作になりますが、sudoコマンドの場合はrootユーザーのパスワードは不要です。「exit」で元のシェルに戻ります。

コマンド実行例

sudo -s

(root権限でシェルを実行する)(画面2


画面2 画面2 「sudo -s」でシェルを起動。パスワード入力を促されたら、自分自身のパスワードを入力する

 なお、「sudo -s」では環境変数「SHELL」に設定されているシェルが起動するので、通常はsudoコマンドを実行しているユーザーが普段使用しているシェルが起動することになります。

 「/etc/passwd」でrootユーザー用に設定されているシェルを起動したい場合は、「-i」オプションを使い「sudo -i」のように指定します。



スーパーユーザーの権限でファイルを編集する

 「sudo -e ファイル名」または「sudoedit ファイル名」で、rootユーザーの権限でファイルを編集できます。“sudoを実行しているユーザーの環境設定でエディタを操作できる”というメリットがあります。

 なお、ファイルは複数指定することができます。指定したファイルが存在しない場合は新規作成され、作成されたファイルの所有者はrootとなります。

コマンド実行例

sudoedit ファイル名

(root権限でファイルを編集する)


 「sudoedit(sudo -e)」では、以下のような操作が行われています。

  1. sudoコマンドを実行したユーザーの権限で、一時ファイルを作成する
  2. (1)のファイルを環境変数「SUDO_EDITOR」「VISUAL」「EDITOR」または「/etc/sudoers」で設定されたエディタで開く
  3. 編集が完了すると、編集したファイルをオリジナルに置き換える

 何らかの理由で(3)の保存ができない場合は、その旨のメッセージが表示され、一時ファイルが保存されます。

補足説明:「/etc/sudoers」の設定

 「/etc/sudoers」は「visudo」コマンドで編集します。通常は「vi」相当のエディタが起動し、ファイルを保存すると設定内容がチェックされ、文法的な誤りがなければ「/etc/sudoers」が更新されます。

 「sudoers」は「ユーザー ホスト=(権限) コマンド」という書式で設定します。

 例えば、ユーザー「study」が「localhost」で、root権限で「reboot」コマンドを実行できるようにするには、「study localhost=(root) /usr/sbin/reboot」のように指定します。コマンドはフルパスで指定します。また、コマンドの前に「NOPASSWD:」を付けるとパスワードの入力を省略することができます。

 グループに権限を与えたい場合は、「%wheel」のように「%」記号で指定します。

「/etc/sudoers」の設定サンプル

study localhost=(root) /usr/sbin/reboot

(ユーザーstudyは、localhostで、root権限で、「/usr/sbin/rebootを実行する)

study localhost=(root) NOPASSWD: /usr/sbin/reboot

(ユーザーstudyは、localhostで、root権限で、パスワードなしで、「/usr/sbin/reboot」を実行する)


 また、コマンドやユーザー名には「エイリアス(別名)」を付けることができます。

 例えば、「SOFTWARE」というコマンドエイリアスを定義して、ユーザーstudyにSOFTWAREの実行を許可する、のように定義します。「/etc/sudoers」にはさまざまな設定サンプルがあるので参考にしてください。

 なお、特別な定義に「ALL」があり、これは“全て”という意味になります。例えば、CentOSの「/etc/sudoers」では「rootユーザーは全てのホストで全てのコマンドを実行できる」という意味で、「root ALL=(ALL) ALL」と設定されています。



筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。