備忘録のため,内容の正当性については責任を持ちません。

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 <ユーザ名> <コマンド>

とすることで,任意のユーザの権限でコマンド実行することができる。


コメント

コメントする




CAPTCHA