
No.2ベストアンサー
- 回答日時:
具体的に対処する部分だけを抜き出すと
エラーメッセージ:
Insecure $ENV{PATH} while running setuid at perl_script.cgi line 43.
こんなエラーが出たときには、↓これを書きます。
$ENV{PATH} = '/bin:/usr/bin';
エラーメッセージ:
Insecure dependency in `` while running with -T switch at perl_script.cgi line 53.
それでもこんなエラーが出たときには、例えばsystemの中で実行しているコマンドを
system "/bin/rm"," -f ", $file;
こんな風に分けて書いたら実行できました。
参考URLには別の方法(正規表現で値をチェック)が書いてあります。私がやった方法はごまかしになるので、参考URLの方法の方がよさそうです。
私は実際こんな方法でやったのですが、「PerlのTaintモード」のことについてはよく理解しているわけではないので解説はできません。
それとapacheのsuExecの方は試したことがないので説明できませんが、こちらの方がたぶん検索していろいろ解説をみつけられると思います。もちろん、apacheを使っていないのでしたらだめですが。
それとこれは、suidperlを使って上記のようなエラーがでた場合の対処法で、すんなり実行できるのでしたらする必要はありません。
この回答への補足
返事が遅くなってすみません。
問題続発で、期限が今月中のこの問題が後回しになってしまいました。
最終的には解決が必要な事なので、時々作業してはいました。
結論から言うと、sudoersを変更する事で、当初の問題は解決しました。
結果的には、今回はsuidperlを使いませんでしたが、whitiaさんのアドバイスで出来た所までの事を報告します。
まず、参考URLなどを参考に、suidperlをインストールしました。
yum install perl-suidperl
----who.cgi(ここから)------
#!/usr/bin/perl
print "Content-type: text/html\n\n";
printf "I am %s.<br>\n",(getpwuid($>))[0];
----who.cgi(ここまで)------
[実行結果]
chmod 755 who.cgi
の場合
I am apache.
chmod 4755 who.cgi
の場合
I am [ユーザ名].
chmod 4755 who.cgi
chown root who.cgi
の場合
I am root.
この結果から、rootの権限が取得できたと考え、ほぼ成功を確信しました。
それで、下のようなプログラムを作りました。
----test.cgi(ここから)------
#!/usr/bin/perl
print "Content-type: text/html\n\n";
printf "I am %s.<br>\n",(getpwuid($>))[0];
print "restart proxy...";
$res=system("/etc/rc.d/init.d/squid","restart");
if($res==0){
print "ok<br>\n";
}else{
print "ng<br>\n";
}
----test.cgi(ここまで)------
[実行結果]
I am root.
restart proxy...
表示すべき文字(エラーの場合のng)を表示せずに、アドバイスにあったエラー表示もないし、なすすべない状態でした。
で、色々試している時に、ふとユーザーでログインして試してみました。
[実行結果]
I am root.<br>
Insecure $ENV{PATH} while running setuid at ./test.cgi line 6.
restart proxy...
この時、whitiaさんの回答にあったメッセージが出たので、これで解決かと思って、
$ENV{PATH} = '/bin:/usr/bin';
を追加。
[実行結果]
Content-type: text/html
I am root.<br>
restart proxy...sed: /etc/squid/squid.confを読み込めません: 許可がありません
squid を停止中: /etc/rc.d/init.d/squid: line 84: /var/log/squid/squid.out: 許可がありません
[失敗]
init_cache_dir /var/spool/squid... /etc/rc.d/init.d/squid: line 57: /var/log/squid/squid.out: 許可がありません
squid を起動中: /etc/rc.d/init.d/squid: line 61: /var/log/squid/squid.out: 許可がありません
[失敗]
ng<br>
そこで、
chmod 666 /etc/squid/squid.conf
chmod 777 /var/log/squid
[実行結果]
I am root.<br>
restart proxy...squid を停止中: 2006/06/19 09:02:28| ALERT: setgid: (1) Operation not permitted
squid: ERROR: Could not send signal 15 to process 4393: (1) Operation not permitted
rm: cannot remove `/var/lock/subsys/squid': 許可がありません
...........................................ng<br>
.(ドット)が出続けたので、途中で止めたら、ng<br>を表示。
ここまでくると、あまりシステムのパーミッションを書き換えるのもどうかと思ってしまいました。
以上が出来た事と、出来なかった事をまとめた物です。
実際は試行錯誤しながら途切れ途切れにわかった事です。
whitiaさんにはお世話になりました、ありがとうございました。
今回は解決のタイムリミットの時間があったため(他の問題に比べて)、後回しになって、結果報告が遅くなってすみませんでした。
今回は結果的にはsuidperlを使いませんでしたが、色々勉強になりました。
>system "/bin/rm"," -f ", $file;
>こんな風に分けて書いたら実行できました。
これは参考になりました。
whitiaさん、ありがとうございました。
これからも何かあったらよろしくお願いします。
No.1
- 回答日時:
suidperl、sperlを使うか、
apacheのsuExecを使うか等の方法があると思います。
方法についての参考)
http://www.tohoho-web.com/lng/r200006/00060081.htm
suidperlを使う場合は、CGIスクリプトファイルのパーミッションを4755にします。
chmod 4755 perl_script.cgi
suidperlはスクリプトをファイルオーナーのUIDで実行するので、root権限で動かしたい場合はそのファイルのオーナーをrootにします。
またsystem関数を使う場合などはセキュリティの問題でエラーがでると思うので、以下のURLを参考にしてみてください。
http://www.ipa.go.jp/security/awareness/vendor/p …
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsec.h …
ありがとうございます、whitiaさん。
suidperl、sperl、suExecなどで試してみます。
先ほどから参考URLを見ていますが、いまひとつ理解しきれていませんが、がんばってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
perlで2次元配列をサブルーチ...
-
Strawberry Perl for Windows ...
-
ターミナルで特定の文字と文字...
-
INDIRECT 横に再度抽出したい
-
Perl 数値にスラッシュを入れる...
-
Perlの全角スペース 文字化け?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
Perlで時間の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jcode.plが読み込めない
-
cgiとplとpm
-
CGIの中にinclude
-
perlのrequireの動き方について...
-
error_logファイルの中身で教え...
-
require文が実行できない
-
perlのcgiで、変数の中身を表示...
-
ファイル書込時にPermission de...
-
Perlから他のcgiへPOSTでデータ...
-
同一ファイルでほかのページを作成
-
Quantifier follows nothing in...
-
use CGI
-
画像のURLの変数を別のCG...
-
「動的ページが表示されない」...
-
Perlスクリプトが、ローカ...
-
use と require の違いが分か...
-
perlのcgiが動かない・・・
-
useとrequireでエラー
-
CGI/Perl が分かりません。
-
環境変数に任意の文字列をセッ...
おすすめ情報