VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

sudoで特定のコマンドのみをroot権限で実行する

rootアカウントで作業を行うと操作ミスした場合、システム全体に影響を与えてしまう恐れがあります。極力一般ユーザーアカウントで作業を行い、管理者権限が必要な操作はsudoを介して行うとリスクを軽減できます。

“sudo”についての全般的な内容は下記を参考にしました。
サービスをセキュアにするための利用制限(3)~管理者権限の制限のためのsuとsudoの基本~
 
※目次をクリックすると目次の下部にコンテンツが表示されます。

sudoの使用目的、メリット
・コマンド実行ミス時の影響範囲が大きいため、システム全体に関わる作業以外にはrootアカウントは使用したくない。
・root権限が必要な時にrootにスイッチし、終わったらまた元のユーザーに戻る作業が面倒。
・”sudo”では、特定のコマンドのみroot権限で実行させる事が出来るので、コマンド入力ミスによる影響範囲を狭める事が出来る。
・”sudo”で実行したコマンドの履歴がログに残る。
sudoの設定方法
1)設定するファイル
 
sudoの設定は、”/etc/sudoers”ファイルで行いますが、編集はviなどのエディタで直接編集するのではなく、sudo用の編集コマンド”visudo”コマンドを使います。
 
2)設定ファイルの構文
 
下記のような構文で設定します。
who where = (as_whom) what
[誰が どのホストで = (誰に変身して) 何を]
 
例えば、”wpuser”というユーザーがすべてのホスト(ALL)でrootを含めたすべてのユーザー権限(ALL)でcpコマンドを実行できるようにしたい場合は、下記のように設定します。
 
wpuser ALL = (ALL) /bin/cp
 
上記4つの項目は、下記のようにエイリアスを使って定義する事も出来ます。詳細は参考サイトを参照ください。
 
User_Alias  ユーザー名の別名を定義する
Runas_Alias  実行ユーザー名の別名を定義する
Host_Alias  接続元ホストの別名を定義する
Cmnd_Alias  実行するコマンドの別名を定義する
 
3)設定例
 
WordPressディレクトリをバックアップする際には、WordPressディレクトリを丸ごと、所有者、権限モードをそのままの状態にしてコピーしたい場合があります。
 
コピー対象のファイルの所有者は自アカウントなのですが、所有グループが”apache”と他グループになっていて、”cp -Rp”でコピーすると、所有グループが自グループになってしまいます。
 
そこで、cpコマンドを”sudo”に登録し、”root”権限でcpコマンドを実行させるための設定を行います。
 
・設定するユーザー
 wpuserとします。
 
・実行するホスト
 ALLでも問題ないと思いますが、Host_Aliasで自サーバーのIPアドレスを指定して制限しています。”localhost”や”127.0.0.1″では動作しないようです。
Host_Alias LOCALHOST = 192.168.1.1/32
 
・実行ユーザー名
 ALLでも良いのですが、root以外は使用しないと思うのでrootにしました。

・実行するコマンド
 とりあえず必要なのはcpコマンドですが、今後追加するかもしれないので、Cmnd_Aliasでエイリアスを定義しました。
Cmnd_Alias WEBUNYO = /bin/cp
 
以下、実際の設定例です。
# visudo
 
下記3行を追加します。
 
Host_Alias LOCALHOST = 192.168.1.1/32
Cmnd_Alias WEBUNYO = /bin/cp
 
wpuser LOCALHOST = (root) WEBUNYO

sudoの実行
1)sudoの実行
 
上記設定例で実行した結果です。
 
$ sudo cp -Rp wptest wptest.bak
[sudo] password for wpuser:

 
パスワードの入力を求められるのでwpuserのパスワード(rootではなく)を入力します。
 
2)sudo実行時のログ
 
下記のように実行時のログが記録されています。

# tail /var/log/secure
 
Oct  8 16:18:06 localhost sudo:   wpuser : TTY=pts/0 ; PWD=/home/wpuser ; USER=root ; COMMAND=/bin/cp -Rp wptest wptest.bak
モバイルバージョンを終了