【 sudo 】コマンド――スーパーユーザー(rootユーザー)の権限でコマンドを実行する:Linux基本コマンドTips(68)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、「sudo」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、スーパーユーザー(rootユーザー)の権限でコマンドを実行する「sudo」コマンドです。
sudoコマンドとは?
「sudo コマンド」と指定することで、「スーパーユーザー(rootユーザー)」の権限が必要なコマンドをsudoコマンド経由で実行させることができます。ただし、sudoコマンドの実行には「sudoers」の設定が必要になります。
同じような用途のコマンドに「su」(本連載第68回参照)があります。rootのパスワードが必要となるsuコマンドとは違い、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)
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)
なお、「sudo -s」では環境変数「SHELL」に設定されているシェルが起動するので、通常はsudoコマンドを実行しているユーザーが普段使用しているシェルが起動することになります。
「/etc/passwd」でrootユーザー用に設定されているシェルを起動したい場合は、「-i」オプションを使い「sudo -i」のように指定します。
スーパーユーザーの権限でファイルを編集する
「sudo -e ファイル名」または「sudoedit ファイル名」で、rootユーザーの権限でファイルを編集できます。“sudoを実行しているユーザーの環境設定でエディタを操作できる”というメリットがあります。
なお、ファイルは複数指定することができます。指定したファイルが存在しない場合は新規作成され、作成されたファイルの所有者はrootとなります。
コマンド実行例
sudoedit ファイル名
(root権限でファイルを編集する)
「sudoedit(sudo -e)」では、以下のような操作が行われています。
- sudoコマンドを実行したユーザーの権限で、一時ファイルを作成する
- (1)のファイルを環境変数「SUDO_EDITOR」「VISUAL」「EDITOR」または「/etc/sudoers」で設定されたエディタで開く
- 編集が完了すると、編集したファイルをオリジナルに置き換える
何らかの理由で(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 © ITmedia, Inc. All Rights Reserved.