• ベストアンサー

suidperlでwebからグループ追加したい!

下記の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/permission.html

  • Perl
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.2

>taint機能を回避できました方 実際suidperlなんて使ったこと無いのであれですが、 (管理めんどいから無くすとか聞いたけど、まだあったんだ) 参考URLによると正規表現で洗えばきれいになるらしいです。 (確からくだ本にもそんなこと書いてあった) ($groupname) = $groupname =~ s/(\w+)//; って感じでどうですかね。

参考URL:
http://www.ipa.go.jp/security/awareness/vendor/programming/a04_03_main.html
goonejp
質問者

お礼

ありがとう御座います。 これで出来ました! 実は、この方法もまた別のサイトで見て、一度試みていたのですが、何をぼけていたのか、その時は出来なかったので、さすがに、/usr/sbin/groupaddだから、どう除染しても駄目なのかなと思っていました。 それで、改めて、ご指摘を受け、パールのバージョンが違うのかななどと半信半疑でもう一度、試みてみたところ、今度はうまく行って、アレ??? 多分、前回は、何をぼけていたのか、 if ($groupname =~ /^([-\@\w.]+)$/) { $groupname = $1; } の$groupname = $1;を抜かして、ここにグループ追加コードを入れてました。これじゃ、$groupnameはそのままで変わらないのはあたり前ですよね! 返答を書くために、試してみたところ、動いたので、びっくり。試してよかった! 実は、もう、諦めて、直接、/etc/groupを編集するコードを書き上げてしまいました。(^^;) これでどちらの方法でも行けるな!と前向きに考えることにします。どちらかぽしゃるかも知れないので、大きな収穫です! ありがとう御座いました!

その他の回答 (1)

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

WEBって、rootで走ってないですよね? 設定によって変わるとは思うのですが、WEBの実行ユーザー(多くの場合、nobody)は groupadd を実行する権限を持っているのでしょうか? コマンドラインで実行した時に成功するのは、そのコマンドラインを叩いたユーザーが、groupadd を実行する権限を持っていただけ。 って言う事じゃ無いでしょうか?

goonejp
質問者

お礼

下記の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.html system関数に引数で「汚染されている恐れのある変数」を渡すと汚染検査は行われないとこのページには書いてあるのですが、どなたか、このtaint機能を回避できました方がいらっしゃいましたら、是非、ご教示をお願い致します。 system関数の使い方が悪いのでしょうか???

goonejp
質問者

補足

アパッチのエラーログを見ると、問題は、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関数の使い方が悪いのでしょうか?

関連するQ&A

  • グループの追加ができなくなりました。

    グループの追加をしようと、 groupadd hoge とコマンドを打ったところ、 groupadd: unable to lock group file となり、グループの追加ができなくなりました。 コマンドはスーパーユーザで実行しています。 どなたかわかる方いらっしゃいましたら お教えください。

  • Perlからrshでvxquotaを実行する方法

    はじめまして。Perlの質問です。 サーバAの/usr/sbin/vxquotaをサーバBで動いているWeb(perl/cgi)から 起動したいのですがpermission deniedのエラーがでて動きません。 サーバBからコマンドで、rsh サーバA /usr/sbin/vxquota -v ユーザID とすれば動きます。 サーバBのCGIはprintf "I am %s.\n",(getpwuid($>))[0];で確認し、 rootで動いています。 このサーバBのPerlで、 system("/usr/local/apache/cgi-bin/DISK/vxquota.csh $user"); として rsh サーバA /usr/sbin/vxquota -v $1(上のvxquota.cshの中身) を実行しようとするとうまく動きません。 このようなことは、Perl(CGI)ではできないのでしょうか? 何かよい方法がありましたら、アドバイスをお願いいたします。

  • suEXECとパーミッションの関係がわかりません

    ホームページ作成初心者です。 (A) suEXECについて http://www.aconus.com/~oyaji/www/apache_linux_suexec.htm では、 ----------------------- なお、CGI 関係以外のファイル( HTML や GIF 等)の扱いは、従来どおり "644" 等としないと見えません。suEXEC はあくまで CGI や SSI の実行に関してのみ機能するものだからです。 ----------------------- 一方 http://tech.bayashi.net/pdmemo/permission.html では、 ----------------------- 拡張子が .html などの HTML ファイル ==> 600 ----------------------- となっています。 600では一般のサイト訪問者がread出来ない様に思えるのですが、問題ないのでしょうか? suEXEC設定がされているサーバーでは、各拡張子のパーミッションはどのように設定すれば良いのか教えてください。 (B) http://tech.bayashi.net/pdmemo/permission.html の ------------------------------- ■UNIX + Apache サーバで nobody権限の場合 UNIXのApacheは通常 nobody権限で実行され ■UNIX + Apache サーバで SuExec環境の場合 SuExec環境では、Apacheがユーザ(オーナ)権限で実行されます。 ------------------------------- 上記のApacheの nobody権限、ユーザ権限、オーナ権限 というのは FTPソフトでパーミッションを設定するときの オーナー権限、グループ権限、ユーザ権限 とは全く関係のない別物なのでしょうか? 特にnobody権限とは何でしょうか? -------------------- ファイルの読み書きもnobody権限しかありません。なので、パーミッションでも第三者に対する許可が必要です -------------------- ↑が何を言っているのか理解できません。 (A)(B)について教えてください。

    • ベストアンサー
    • HTML
  • Linux 5でApache関連のアップデートを行わない方法

    Linux 5でApache関連のアップデートを行わない方法 <環境> WADAX専用サーバ エントリープラン GUIソフト:PLESK8.3使用 Red Hat Enterprise Linux 5 PHP 5.1 MySQL 5.0 ローカルコンピュータ:WindowsXP Red Hat Enterprise Linux 5でApache関連のアップデートを行いたくない場合は、ファイル名がhttpd* 及びmod_ssl*のアップデートパッケージのみインストールしないようにすれば良いのでしょうか? 具体的なコマンドは以下: #yum --exclude=httpd* mod_ssl* update もしも、Apache関連のアップデートを行いたくない場合、httpd* 及びmod_ssl*以外にも除外しておいたほうがよいファイル名があれば教えてください。 P.S ちなみに、Apache関連のアップデートを行いたくない理由は、Apache関連のアップデートを行うと、PLESKの関連でsuexecの置換コマンドの実行が必要となるからです。 http://kb.parallels.com/en/762 上記のURLでは、PLESK 7.xのみ手動コマンドによるsuexecの置き換えが必要と説明してありますが、実際は、PLESK 8.xでも下記のコマンドの手動実行が必要となります。 ~# cp /usr/local/psa/suexec/psa-suexec /usr/sbin/suexec ~# chown root:apache /usr/sbin/suexec ~# chmod 4510 /usr/sbin/suexec そのため、重大なセキュリティアップデート以外は、Apache関連のアップデートを行いたくないのです。 よろしくお願いします。

  • sendmailからqmail:CGIから送れない

    こんばんわ。 sendmailコマンド置換えについてです。 OS:Fedora7 メールサーバー:qmailとdovecot vpopなど使ってます。 メールサーバーについては、 バーチャルでもローカルからは送受信出来てます。 cgiがユーザーさんがHPのcgiからメールを送って来ると、 内容を自動返信するような感じのcgiですが。 テストでやってみても。 ローカルの受信すら来ない状態です。 もちろん、自動返信で返っても来ません。 以下をしました。 chmod 0 /usr/lib/sendmail chmod 0 /usr/sbin/sendmail mv /usr/lib/sendmail /usr/lib/sendmail.bak mv /usr/sbin/sendmail /usr/sbin/sendmail.bak ln -s /var/qmail/bin/sendmail /usr/lib/sendmail ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail apacheのエラーは、 sh: /usr/sbin/sendmail: Permission denied, referer: http://www.hogehoge.com/cgi-bin/test.cgi Permission関係でしょうか? sendmailをls -lで調べると lrwxrwxrwx 1 root root 23 Jun 5 19:05 /usr/sbin/sendmail -> /var/qmail/bin/sendmail です。 その他調べる箇所ありますでしょうか? 後・・・ 私のサーバーでは、 newaliases とすると・・・ bash: /usr/bin/newaliases: Permission denied になります。 パーミッションは777のroot rootになってます。 宜しくお願いします。

  • 安全な共用WWWサーバーについて

    安全な共用WWWサーバーを作りたいので バーチャルホスト毎に異なるユーザ・グループ権限で ウェブサーバを実行したいのですが、 Apache1系では、何もインストールせず、httpd.confで 以下のように設定するだけで問題ないでしょうか? <VirtualHost xxx> User user Group group UserDir public_html ServerName xxx DocumentRoot /home/vhost/xxx <VirtualHost vhost> SuEXECという方法があるようですが、調べたところ SuEXECモジュールでは、phpの実行権限を変えることはできないかったりパフォーマンスが悪いという事で どういう方法で実現すべきか悩んでおります。

  • ADSLインタネット接続(再質問)

    どうしてもインターネット接続が出来ないので教えてください。 Redhat7jを使ってます。 rootで次のように設定を行いました。 #/usr/sbin/adsl-setupコマンドで USERNAME:xxx@atson.net(アサヒネット) INTERFACE:eth0 Activate-on-demand:no DNS:Do not adjust Firewalling:0(NONE) のように設定しました。 #/usr/sbin/adsl-startを実行して接続させました。 #/usr/sbin/adsl-statusのコマンドを投入するとIPアドレスもちゃんと 割り当てられてます。 x-Windowを起動してNatscapeブラウザーを立ち上げてWebページを見ようとすると サーバが見つかりませんというメッセージが出ます。 どういうことでしょう。

  • XonWindowsでのクローンデーモンの起動について

    XonWindows2(cygwin)でクローンデーモンを起動するために,/usr/sbin/cron.exe を実行しようとしたのですが,seteuid: Permission denied と表示され,実行できません.だれか,クローンをXonWで使用している人がいれば,解決法を教えてください.  ちなみに,このexeファイルの所有者はXonWをインストールした関係か,自分の名前になっており,グループはnoneです.

  • Apacheアップデートしたのにバージョンが。。

    困っています。 以下の手順でapacheをアップデートしたのですが、 「rpm -qi httpd」ではバージョンが変わりません。 「httpd -V」では最新バージョンになっています。 「httpd」の実行ファイルは置き換えているので、 最新化されていると思うのですが、何が不足しているのか どなたか教えて頂けないでしょうか。 よろしくお願いします。 <サーバ環境>  OS:Redhat Enterprise Linux 5.7 <旧apache情報>  バージョン:2.2.3  ディレクトリ:/etc/httpd  実行ファイル:/usr/sbin <新apache情報>  バージョン:2.2.21  ディレクトリ:/usr/local/apache2  実行ファイル:/usr/local/apache2/bin ※ネットワークの問題により、「yum httpd update」は使用できない。 <アップデート手順> 1.apacheミラーサイトから httpd-2.2.21.tar.gz をダウンロード。 2.configureでインストール準備。  パラメータは、モジュール全て展開、suexec生成を指定。 3.make、make install にてインストール。 4.makeで作成された最新の suexecを /usr/sbin の旧実行ファイルと置き換え。 5.httpd旧実行ファイルの置き換え。   # mv /usr/sbin/httpd /usr/sbin/httpd_old   # ln -s /etc/httpd/bin/httpd /usr/sbin/httpd 6.旧Apache ディレクトリと同名の、シンボリックリンクを作成する。   # ln -s /usr/local/apache2 /etc/httpd 7.httpd.conf 関連の設定変更。   旧apacheの設定を、下記ファイルに反映。   ・httpd.conf   ・extra/httpd-default.conf   ・extra/httpd-languages.conf 8.起動スクリプトの変更   httpd-2.2.21/build/rpm/httpd.init から /etc/rc.d/init.d/httpd を生成し、   旧スクリプトと置き換える。 9.service httpd start で、再起動し、アプリケーションの正常動作を確認。  OS再起動後も自動起動していることを確認。 以上です。

  • HylaFAXの設定

    RedHat Linux8.0にhylafax4.2.3をインストールしたのですが、 /usr/sbin/faxsetup、faxaddmodemを設定しろとのことなのでターミナルで実行してみました。 すべて英語でしたが、一応聞かれたことに答えました。 その次に何をどうしたら良いのかが分かりません。 手順等ご教授頂きたいのですがよろしくお願いします。

専門家に質問してみよう