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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux shellscript内のコマンドを、sudo(toor)として実行 2 2022/09/23 15:05
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- UNIX・Linux Fedoraのupgradeで、libruby.so.3.0()がinstallできないという 1 2023/03/30 16:42
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- その他(暮らし・生活・行事) 免許証の住所変更と免許更新について 1 2023/01/16 09:33
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- オープンソース googlスライドの編集権限について 1 2023/06/15 23:15
- その他(Microsoft Office) エクセルのマクロについて教えてください。 5 2023/01/21 09:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
useとrequireでエラー
-
www.URL 付のcgi を動かす
-
perlのrequireの動き方について...
-
use strictとグロブ?
-
gifcat.pl:助言お願い致します
-
cgiからcgiをコールする。
-
Quantifier follows nothing in...
-
月の第一週とは
-
よくある 『 第○(1・2・3・4・...
-
アンケートなどの1日1回の投...
-
perlでHTTP Request Headersの...
-
VBA。複数のChangeイベントをま...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
シングルサインオンのような仕...
-
毎週同じ曜日にラブホに行くと...
-
燃えるゴミの日は何曜日ですか?
-
エクセルで毎月第2週日の水曜日...
-
Perl の外部モジュールの利用方法
-
HTTPヘッダの取得方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgiとplとpm
-
perlのrequireの動き方について...
-
jcode.plが読み込めない
-
Quantifier follows nothing in...
-
require文が実行できない
-
ファイル書込時にPermission de...
-
useとrequireでエラー
-
htmlからテキストを返すperlを...
-
Perlのデバッグ方法って。。。...
-
PDFJが動作しない
-
画像のURLの変数を別のCG...
-
perlのcgiで、変数の中身を表示...
-
perlをインストールしたのに使...
-
CGIの中にinclude
-
gifcat.pl:助言お願い致します
-
phone.plというモジュールを使...
-
Perlの作動不具合、missing bra...
-
プログラムを書き足すことについて
-
Not Found 404エラー時のCGI出力
-
バイナリファイルのアップロード
おすすめ情報