perl から unix コマンドを入力するには、どのようにしたらよいのでしょうか。

具体的には、フォームから受け取った文字列を、useradd に渡して、ユーザーの追加をしたいのです。

perlスクリプトの所有者はrootで、属性はsetuid(4755)にしています。

A 回答 (4件)

コマンドが command、フォームから受け取った文字列が $argumentであれば、



system("command $argument");

で ok です。
    • good
    • 0

perl自体にルート権限を与えてしまうのは確かに怖いですね.せめて,sudoなどをかますと良いです.sudo2は細かい設定が出来て

,Webでユーザ情報変更とかに安心して使えます.
    • good
    • 0
この回答へのお礼

早速、sudoを調べてみました。
確かに、これの方がいいみたいです。

お礼日時:2000/12/26 19:39

回答は marino_cx さんのとおりでいいと思いますが、setuid した


スクリプトで外部コマンドを呼び出したりする際には、セキュリティ
ホールに十分に気をつけてください。
ちょっとしたミスで root でないユーザが root 権限を容易に取得
できてしまいます。

もっともこういった危険を減らすために、通常の perl は、setuid
されている場合に、外部から指定された文字列をそういった危険性
のある操作には与えられないようにしています。これを無理に解除
する方法もありますが、あまりしない方がいいとは思います。
    • good
    • 0

コマンドを実行するだけなら



$return = `command`; < バッククオート演算子

か、

system("command");

のことでしょうか?
ただ、cgiでsetuid使うのって良いのかしらん?と思わなくも無いですが・・・
ユーザー作り置きしておいてエイリアス振っていくとかというのとか色々やり方はありますが。
あんまり変らないか・・・
あ、フォームといってもcgiとはおっしゃっていないですね。^^;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコマンドプロンプトのdelと削除ソフトについて

ファイルを強制的に削除するソフトがありますが、それはコマンドプロンプトで「del」コマンドを打ったものと同じ操作をするのでしょうか?
それと、ファイルを右クリックして「削除」するのと、コマンドプロンプト上から「del」コマンドにより削除するのは同じ動作でしょうか?
コマンドプロンプトからなら削除できないファイルが削除できると聞くので違うと思うのでですが?
ご存知あれば教えていただければ幸いです。

Aベストアンサー

全く自信なくて、私が勝手に思い込んでることだけど。
なので、回答と呼べるものとは言えないと思うけど、一応ね。(^.^)

>コマンドプロンプトからなら削除できないファイルが削除できると聞くので違うと思うのでですが?
これはほとんどが動画ファイルの付属情報の破損からだったと思う。
以前調べたものだと、エクスプローラーで対象のフォルダを開いたとき、動画ファイルの属性(だったかな?)の情報を取りにいって、そのままの状態を保持してしまい、ファイルを掴んじゃって削除できないってものだったと思う。
これは、そのフォルダを開くたびに掴みにいくから、エクスプローラーでは削除できない(だったとおもう)
つまり、エクスプローラーを介さずに、コマンドプロンプトから削除すれば、エクスプローラーがその破損情報を掴みにいかないので、ファイルがフリー状態になり削除が可能になる。(のかなぁ?)
ただ、上書きは可能なこと多いんだよなぁ~・・・。

とすると、最終的にOSへの削除命令伝達における命令が通る系統が違うんじゃないかなぁ~と個人的には思う。
つまり、エクスプローラーというシェルを使うのか使わないのかの違いじゃないかな?
もっとも、コマンドプロンプトで削除命令をエクスプローラー経由でOSに伝えてるかもしれないけど・・・ね。(^_^;)

全く自信なくて、私が勝手に思い込んでることだけど。
なので、回答と呼べるものとは言えないと思うけど、一応ね。(^.^)

>コマンドプロンプトからなら削除できないファイルが削除できると聞くので違うと思うのでですが?
これはほとんどが動画ファイルの付属情報の破損からだったと思う。
以前調べたものだと、エクスプローラーで対象のフォルダを開いたとき、動画ファイルの属性(だったかな?)の情報を取りにいって、そのままの状態を保持してしまい、ファイルを掴んじゃって削除できないってものだった...続きを読む

QPerlを用いたUNIXコマンド

初歩的なことだとは思うんですけど、Perlを用いてUNIXコマンドを実行するのと、普通にUNIXコマンドを実行するのはどういった違いがあるのでしょうか。
調べてみたけれども中々それらしい答えが無かったので質問することにしました。よろしくお願いします。

Aベストアンサー

なぜそういう質問をしたいのかを書いていると
もっとよい回答があるかもしれませんね。

Perlは文字処理が得意な言語ですので、
UNIXコマンドの結果を解析したり、
別のフォーマットへ変換したり
などということを行いたい時は
Perlを使う意味があります。

そういう処理が
なければシェルプログラミングで十分です。

Qコマンドプロンプトで、特定の文字を削除したい。

お世話になります。

コマンドプロンプトで、ファイル内の特定の文字を削除したいのですが、どのようにすればよいでしょうか。

deleteコマンドなど、ファイル自体を削除するものは見つけられたのですが、ファイル内の文字を消すコマンドが見つけることができませんでした。。。

Aベストアンサー

ファイルの中にコマンドプロンプトの特殊記号が含まれていないとすると、

del outfile.txt 2>NUL
for /f "usebackq delims=" %%A in (somefile.txt) do call :sub "%%A"
元のファイルを置き換えるなら move outfile.txt somefile.txt
goto :EOF
:sub
set A=%~1
>>outfile.txt echo %A:keshitaimojiretsu=%

元のファイルの中に含まれている内容が把握できる場合でないと危険です。
そうでないとすると、VBScript等できちんとやらないといけない。

Qperlスクリプトをコマンドラインから実行する際、ファイル名だけで動かしたい

はじめまして。どうぞ宜しくお願いします。

コマンドラインでperlを実行する際、

$ perl test.pl

と先頭に「perl」をつけると正しく動作しますが、

$ test.pl

と「perl」を外すと以下のようなエラーが出ます。
$ -bash: test.pl: command not found

もう一台あるLinux機では、プログラム名だけでも動作しているので
何らかの方法があるのだと思います。
たとえば、Windowsで言う拡張子の関連付けなどのような事ができるのでしょうか。

ご存じの方がおられましたら、よろしくお願いします。

OS:RedHat9

Aベストアンサー

test.pl のあるディレクトリが $PATH に入っていないのかも.

Qscpコマンドでリモートサーバのファイルを削除したい

winscpでリモートサーバのファイル削除が出来るので、てっきりscpコマンドでオプションがあるのかと思ったのですが、見当たりません。scpコマンドでリモートファイルの削除は可能でしょうか?誰か教えて!

Aベストアンサー

1番の方と同じ意見ですが、
ssh ホスト名 コマンド
でリモートサーバ上でコマンドが実行できますので

ssh SSH_SERVER "rm testfile"

のように実行するの一般的かと。

QPerlとUnixの関係

現在、Perlを勉強しているものです。バッチプログラムやVBScriptを使って、コマンドラインで便利に開発するようにしています。近々PCを購入し、UNIXでの開発をしようとおもっています。その際には、シェルプログラムなるものを覚えて便利に開発したいなあとおもっています。

話はそれますが、私はコンピュータ専門書籍の本屋さん(名古屋で一番の品数があるとおもわれます)に勤めているのですが、返品の棚にやや古めの「Unix&Perl」みたいな題名の本がありました。

本題に戻りますが、UnixではPerlをコマンドラインの機能の一部としてつかえたりするのですか?Windowsだとバッチプログラムで足りないところはJScriptやVBScriptで補ったりしなくてはならないのですが、Unixのシェルではその役目はPerlが果たしてくれたりすることがあるんでしょうか?要するに、シェルプログラムの機能強化としてPerlを使えたりするのでしょうか?

あと、これは本題とは関係ないのですが、Unixを入れるならばFreeBSDやSoralisなどがあるみたいですが、どのディストリビューション?を選択すれば一番いいとおもいますか?

分かる方、回答をお願いします。よろしくお願いします。

現在、Perlを勉強しているものです。バッチプログラムやVBScriptを使って、コマンドラインで便利に開発するようにしています。近々PCを購入し、UNIXでの開発をしようとおもっています。その際には、シェルプログラムなるものを覚えて便利に開発したいなあとおもっています。

話はそれますが、私はコンピュータ専門書籍の本屋さん(名古屋で一番の品数があるとおもわれます)に勤めているのですが、返品の棚にやや古めの「Unix&Perl」みたいな題名の本がありました。

本題に戻りますが、UnixではPerlをコマン...続きを読む

Aベストアンサー

コマンドラインの一部というか、普通にコマンドが作れます。Windowsのように拡張子は不要です(というかUNIXには拡張子の概念がありません)。1行目にインタープリタの指定を書いてパーミッションを実行可能な状態にしてPATHの通った所に置くだけでプログラムとして動作します。

> Unixを入れるならばFreeBSDやSoralisなどがあるみたいですが、どのディストリビューション?
> を選択すれば一番いいとおもいますか?

私は今となってはあまり UNIX はおすすめしません。Linux をおすすめします (LinuxはUNIX互換ですが正式にUNIXだと認められたOSではありません。詳細は参考URLのページをご覧下さい)。理由はユーザの多さ、ソフトの多さ、及び情報の多さです。Linux は沢山ディストリビューションがありますが、Fedora Core がいいんじゃないでしょうか (但し私は全てのディストリビューションを知っているわけではないし、私が使い易くてもあなたには使い辛いかも知れません)。

無料のディストリビューションが沢山あるので(FedoraCoreもその一つです)色々試してみるのもいいかも知れません。CDから起動してインストールする必要のないKNOPPIXというディストリビューションもあります(これと一緒にcoLinuxやqemuというエミュレータが配布されていますが、それを使えばWindowsの中でLinuxを動かすことも可能です)。

参考URL:http://ja.wikipedia.org/wiki/UNIX,http://fedora.redhat.com/,http://unit.aist.go.jp/itri/knoppix/

コマンドラインの一部というか、普通にコマンドが作れます。Windowsのように拡張子は不要です(というかUNIXには拡張子の概念がありません)。1行目にインタープリタの指定を書いてパーミッションを実行可能な状態にしてPATHの通った所に置くだけでプログラムとして動作します。

> Unixを入れるならばFreeBSDやSoralisなどがあるみたいですが、どのディストリビューション?
> を選択すれば一番いいとおもいますか?

私は今となってはあまり UNIX はおすすめしません。Linux をおすすめします (LinuxはUNIX互...続きを読む

Qコマンドプロンプトで完全削除

パソコンの中身を完全削除したいと思い、以前コマンドプロンプトでのやり方を教えてもらったのですが、「cipherは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルファイルとして認識されていません。」とメッセージが出ます。

どの様に削除すればいいのでしょうか?
詳しい方宜しくお願いします。

Aベストアンサー

エラー表示になります?。まず最初に再起動後、C・Dドライブのエラーチェックしてデフラグを実行して下さい。
それからコマンド入力します。それでもエラーが表示されれば、/の後ろのwを入れないで、/cで実行して下さい。
もし、それでも同じ症状なら、何らかのファイルが壊れていると思われますので、このやり方では削除は無理と考えて下さい。
フリーソフトでの削除をお願いします。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/file/del/

Qwebからroot権限のコマンドを実行したい

はじめまして。
プロキシサーバの閲覧許可サイトを変更するCGIを作っています。
許可サイトのリストを更新して、
my $res=system("/etc/rc.d/init.d/squid restart");
または、sudoersの設定も可能なので、
my $res=system("sudo /etc/rc.d/init.d/squid restart");
を実行したいのですが、方法が分かりません。
どなたか、実行方法を教えてください。
よろしくお願いします。

Aベストアンサー

具体的に対処する部分だけを抜き出すと
エラーメッセージ:
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を使って上記のようなエラーがでた場合の対処法で、すんなり実行できるのでしたらする必要はありません。

具体的に対処する部分だけを抜き出すと
エラーメッセージ:
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;

こんな風に分けて書いたら実行できました。
参...続きを読む

Q~以外を削除する場合(rmコマンド)

linuxのコマンドで
~以外のファイル、ディレクトリを全て削除したい時は
どのような記述をすれば良いのでしょうか?
シェルスクリプトではなくrmコマンド1つで削除したのいですが…

例: tar以外のファイル・ディレクトリを
   すべて削除したい場合など

どなたかご存知の方がいらっしゃったら
教えてください。よろしくお願い致します。

Aベストアンサー

rm コマンドのみという訳にはいきませんが基本的なコマンドを組み合わせると実現可能と思います。

「名前が tar で終わるもの以外のファイル・ディレクトリを削除する」場合だと

ls | grep -v -E 'tar$' | xargs rm -r

となります。

ファイルの一覧を取得し ( ls )
'tar'で終わるもの以外を抽出し ( grep )
その結果を rm -r の引数に指定して実行 ( xargs )

という流れです。

ファイルを削除するような操作については失敗するとダメージが大きいので、事前にテストして動作を確認すると良いとおもいます。また rm -r -i としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。

Qunixのperlで

UNIXのPerlでは引数は@ARGVに入ると思うのですが、

a.pl *.c

"*.c" という引数を入れるとファイルが展開されそのフォルダの中の "12-1.c" とか "12-2.c" とかいう引数が、配列に1つずつ入ってきました。
引数の文字列を何の修正もなしに(できればスペースも)受け取る方法はないですか?

Aベストアンサー

a.pl "*.c"

といった具合に引数文字列を二重引用符で括ってみて下さい。


人気Q&Aランキング

おすすめ情報