
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ランキング
-
jcode.plが読み込めない
-
htmlからテキストを返すperlを...
-
Quantifier follows nothing in...
-
DBを10件毎に表示ページング...
-
エクセルで毎月第2週日の水曜日...
-
週2回のペースって だいたい何...
-
ユーザー定義の(aaa)
-
月の第一週とは
-
エクセルで相対パスの書き方を...
-
クライアントのIPとマシン名を...
-
EXCEL:ヘッダー日付を年号で?...
-
[Excel] ある日の曜日が当月の"...
-
file_get_contents でリダイレ...
-
VBA。複数のChangeイベントをま...
-
cgiで拡張子.cgiと拡張子.pl...
-
毎週同じ曜日にラブホに行くと...
-
URLConnection Timeoutエラー
-
PerlでのHTTPヘッダのStatus変更
-
日付から曜日を求めたい
-
毎○曜日って、使いますか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlからテキストを返すperlを...
-
cgiとplとpm
-
cgi-lib.plのオフラインでの使用
-
エラー出力をなくしたい
-
jcode.plが読み込めない
-
IIS7とActivePerlを導入しまし...
-
“パーミッションを変えて、実行...
-
文字の置換に関しての質問です
-
requireについて教えてください。
-
サイト構築について
-
IMGタグにaaa.cgiを指定して、...
-
Perlソースを2つのファイルに分...
-
cgi プログラムについて
-
ファイルの転送。
-
webからroot権限のコマンドを実...
-
a.cgi → b.cgiへデータの受渡...
-
/httpdocsでのCGI動作を有効化
-
perl初心者です
-
Perl+DBI+Apacheの動作
-
perlのcgiで、変数の中身を表示...
おすすめ情報