下記のPerlスクリプトを、
パーミッションを4755に設定して、
コンソールから実行するとグループが追加されますが、
WEBからCGIで実行するとグループ作成コマンド部分が動きません。
なぜでしょうか?
I am root.とはWEBでも表示されるのですが…。
#!/usr/bin/suidperl
print "Content-type: text/html\n\n";
printf "I am %s.\n",(getpwuid($>))[0];
$resp=`/usr/sbin/groupadd -g 1001 test_user`;
redhat9です。
次のページには、suidperlを使う場合は、SuEXECは必要ないとあるのですが…。
http://x68000.startshop.co.jp/~68user/webcgi/per …
No.1
- 回答日時:
WEBって、rootで走ってないですよね?
設定によって変わるとは思うのですが、WEBの実行ユーザー(多くの場合、nobody)は groupadd を実行する権限を持っているのでしょうか?
コマンドラインで実行した時に成功するのは、そのコマンドラインを叩いたユーザーが、groupadd を実行する権限を持っていただけ。
って言う事じゃ無いでしょうか?
この回答への補足
アパッチのエラーログを見ると、問題は、perlのtaint機能にあり、変数が汚染されている恐れがあるため、実行できないようです。
↓ご参照URL
http://www.att.or.jp/perl/man/perlsec.1.html
現在、system関数に引数で「汚染されている恐れのあるグループ名」を渡すことを試みていますが、成功していません。
具体的には、次のコード(まだ成功していません。)を改編して、このtaint機能を回避できました方がいらっしゃいましたら、是非、ご教示をお願い致します。
#!/usr/bin/suidperl
require "./cgi-lib.pl";
&ReadParse();
$ENV{PATH}="";
print "Content-type: text/html\n\n";
$gid = 1001;
$groupname = $in{groupname};
$cmd_option = "-g $gid $groupname";
system("/usr/sbin/groupadd ", $cmd_option);
print "グループ追加\n";
system関数の使い方が悪いのでしょうか?
下記のPerlスクリプトを、
パーミッションを4755に設定して、
WEBから実行するとグループが追加されます。
#!/usr/bin/suidperl
$ENV{PATH}="";
print "Content-type: text/html\n\n";
printf "I am %s.\n",(getpwuid($>))[0];
`/usr/sbin/groupadd -g 1001 test_group`;
しかし、次のようにグループ名をブラウザから渡そうとすると
うまく行きません。
#!/usr/bin/suidperl
require "./cgi-lib.pl";
&ReadParse();
$ENV{PATH}="";
print "Content-type: text/html\n\n";
$gid = 1001;
$groupname = $in{groupname};
$cmd_option = "-g $gid $groupname";
system("/usr/sbin/groupadd ", $cmd_option);
print "グループ追加\n";
アパッチのエラーログを見ると、問題は、perlのtaint機能にあり、変数が汚染されている恐れがあるため、実行できないようです。
↓ご参照URL
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsec.h …
system関数に引数で「汚染されている恐れのある変数」を渡すと汚染検査は行われないとこのページには書いてあるのですが、どなたか、このtaint機能を回避できました方がいらっしゃいましたら、是非、ご教示をお願い致します。
system関数の使い方が悪いのでしょうか???
No.2ベストアンサー
- 回答日時:
>taint機能を回避できました方
実際suidperlなんて使ったこと無いのであれですが、
(管理めんどいから無くすとか聞いたけど、まだあったんだ)
参考URLによると正規表現で洗えばきれいになるらしいです。
(確からくだ本にもそんなこと書いてあった)
($groupname) = $groupname =~ s/(\w+)//;
って感じでどうですかね。
参考URL:http://www.ipa.go.jp/security/awareness/vendor/p …
ありがとう御座います。
これで出来ました!
実は、この方法もまた別のサイトで見て、一度試みていたのですが、何をぼけていたのか、その時は出来なかったので、さすがに、/usr/sbin/groupaddだから、どう除染しても駄目なのかなと思っていました。
それで、改めて、ご指摘を受け、パールのバージョンが違うのかななどと半信半疑でもう一度、試みてみたところ、今度はうまく行って、アレ???
多分、前回は、何をぼけていたのか、
if ($groupname =~ /^([-\@\w.]+)$/) {
$groupname = $1;
}
の$groupname = $1;を抜かして、ここにグループ追加コードを入れてました。これじゃ、$groupnameはそのままで変わらないのはあたり前ですよね!
返答を書くために、試してみたところ、動いたので、びっくり。試してよかった!
実は、もう、諦めて、直接、/etc/groupを編集するコードを書き上げてしまいました。(^^;)
これでどちらの方法でも行けるな!と前向きに考えることにします。どちらかぽしゃるかも知れないので、大きな収穫です!
ありがとう御座いました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- UNIX・Linux redmineにメールを飛ばす方法 1 2022/09/13 22:02
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- PHP php ログイン 1 2022/11/01 00:24
- CGI 古ーくからフリーのtree.cgi掲示板を利用させてもらって来ましたが、最新でなにか復活できないか? 2 2023/04/07 10:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
P.Cのシングルチューナーとダブ...
-
テキストファイルで提出とは?
-
Perlで、「が」を、「...
-
Perl LINE(チャット) 仕組み
-
Perlのエラーについてご教授く...
-
ファイルアイコンの左下に緑の□...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlソースコードをコンパイル...
-
プロシージャの戻り値を取得す...
-
Perlで環境変数を設定するには
-
systemの引数の中括弧
-
perlでコマンドプロンプト実行
-
system関数を使用してJava実行...
-
Cygwin上でperlスクリプトの実行
-
Perlのexitについて
-
PERLからcshellを実行したいの...
-
Perlスクリプトが実行できない...
-
pp (Perl Packager) で require...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
例外処理のフローチャートの記...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
「デバイスは PRN を初期化でき...
-
VBAで別モジュールへの変数の受...
-
エクセルVBAでシートモジュール...
-
Excel VBA 『Call』で呼び出す...
おすすめ情報