OS のアカウントを発行するシステムを作るときなど,CGI を root 権限で実行したいときがある。かと言って,Apache の実行ユーザを root にするのは危ないし,そもそも普通にインストールした状態ではできない。
そこで,今回は sudo を使って同等の機能を実現する。
まず,visudo コマンドで sudo の設定ファイル (/etc/sudoers) を編集する。このファイルは
ユーザ ホスト=(権限) コマンド
のような書式で指定する。
以下のようにして、ユーザ apache が root 権限で、パスワード無しでコマンドを実行できるようにする。
# visudo
(中略)
Defaults:apache visiblepw
Defaults:apache !requiretty
apache ALL=(root) NOPASSWD: <コマンド>
※ apache の部分は,Apache (CGI) の実行ユーザ名を指定する。
そして,たとえば次のような CGI プログラムを作成する。
#!/usr/bin/perl
my $result = `sudo /sbin/iptables -L`;
print "Content-Type: text/plain\n\n";
print $result;
これを実行すると,バッククオート (`) で囲まれた部分がコマンドとして実行され,その結果が変数に格納される。
ちなみに sudo コマンドは
$ sudo -u <ユーザ名> <コマンド>
とすることで,任意のユーザの権限でコマンド実行することができる。
コメント