rootアカウントで作業を行うと操作ミスした場合、システム全体に影響を与えてしまう恐れがあります。極力一般ユーザーアカウントで作業を行い、管理者権限が必要な操作はsudoを介して行うとリスクを軽減できます。
“sudo”についての全般的な内容は下記を参考にしました。
サービスをセキュアにするための利用制限(3)~管理者権限の制限のためのsuとsudoの基本~
※目次をクリックすると目次の下部にコンテンツが表示されます。
sudoの使用目的、メリット
・コマンド実行ミス時の影響範囲が大きいため、システム全体に関わる作業以外にはrootアカウントは使用したくない。
・root権限が必要な時にrootにスイッチし、終わったらまた元のユーザーに戻る作業が面倒。
・”sudo”では、特定のコマンドのみroot権限で実行させる事が出来るので、コマンド入力ミスによる影響範囲を狭める事が出来る。
・”sudo”で実行したコマンドの履歴がログに残る。
・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にしました。
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