telnet.cgiを使って、カレントディレクトリで、
rm -rf *
を行っても、なぜか(permissin 755にも関わらず)permission denyといわれうまく削除できませんでした。
そこで、perlを使って削除を試みたいのですがどのようにすれば、削除できますか?
参考になりそうなソースを見つけたのですが、ディレクトリの中にディレクトリがある構造のためうまく削除できませんでした。
どなたか、改良していただけないでしょうか?
お手数ですが、宜しくお願い致します。
#!/usr/local/bin/perl
$dir = "./d/";
opendir DIR, $dir;
@files = grep { !m/^(\.|\.\.)$/g } readdir DIR;
close DIR;
$flag = @files;
if ( $flag ) {
foreach $file ( @files ) {
unlink "$dir$file";
}
}
rmdir $dir;
No.4
- 回答日時:
#2に付け足し、、、
>ディレクトリの中にディレクトリがある構造
その場合はそれぞれのディレクトリについて#2のと同じことが言えます
中身が空っぽでないディレクトリの全てにおいて
CGIの実行権限で書き込み許可が必要です。
(中身が空っぽのディレクトリは普通のFILEと同じですから、親ディレクトリに書き込み権限があればOK)
SUEXECで無くFILEやディレクトリの所有者がユーザーである場合は 目的のディレクトリに含まれる
全ての空っぽでないディレクトリが707でないと出来ません
なので結局のところ
1.SUEXEC環境のところで行う、或いはお使いのサーバーに質問者さんがroot権限をお持ちならSUEXECを導入する
2. または CGIで生成したディレクトリツリーで使う
の2つしかないのではないかと思います。
#3でBLUEPIXYさんが書かれたモジュールは
http://fleur.hio.jp/perldoc/mix/lib/File/Path.html
を見ると「ディレクトリツリーの作成及び削除」と有りますので
こうゆうのでディレクトリツリーの生成も消去も行えば問題なく出来ると思います。
No.3
- 回答日時:
パーミッションの問題ならやはりダメかも知れませんが
標準モジュールにディレクトリを削除する関数があります。
use File::Path;
rmtree(パス);
No.2
- 回答日時:
>従ってパーミッション777のファイルでなければ消せません。
それは違いますね。ファイルのではなくfileのあるディレクトリの
所有者&パーミッションです
普通の(つまりSuexecでない場合)Unix系OSでwebサーバーを立てている場合に
例えば、ユーザーがtarou
ドキュメントを削除しようとしているディレクトリが /home/tarou/public_html/test1/ だったとします。
CGIの実行権限はNobodyやApacheなど
ユーザーでもユーザーのグループでもないものですからother です
なので /home/tarou/public_html/test1/ の所有者がtarou であれば、
そのディレクトリのパーミッションを707などにしなければ削除できません
(これが777となっている解説サイトもありますが、これはグループ権限で動く場合を考慮したものですが滅多にありません)
または ディレクトリ自身をCGIで生成して置く方法も有りますが
その場合もパーミッションを注意しないと、今度はFTPで削除できなくなったりします。
削除ではなく fileの上書き更新の場合は fileのパーミッションが 606などの必要が有ります
尚、Suexecの場合は CGIがユーザー権限で動きますので
ディレクトリのパーミッションを 701などにしておけばOKです
No.1
- 回答日時:
telnet.cgiというのは初めて知りましたが、ブラウザ経由でUNIXコマンドを
実行するもののようですね?
この場合、コマンドを実行しているのはWebサーバです。
Webサーバは通常NobodyやWebユーザーにて動いているので、
コマンドを実行しているユーザーもNobodyやWebユーザーになります。
従ってパーミッション777のファイルでなければ消せません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux 実行の仕方及び実行結果が分かりません。 2 2022/11/17 19:31
- UNIX・Linux 空のディレクトリで dir を行ったとき 4 2023/05/05 17:54
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/07/13 12:31
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- その他(プログラミング・Web制作) DOSコマンドに詳しい方、お知恵をお貸しください 5 2022/11/04 20:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlでディレクトリごと削除したい
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
CGIでソースがそのままでてしま...
-
-T(汚染モード)でメールが送れ...
-
CGIの起動が遅い
-
HTTP 501未実装 エラーについて
-
gethostbyaddrからリモートホス...
-
ラジオボタンのグループ化
-
perl 矢印演算子 -> の使い方
-
空のファイル
-
VBAでサーバーにアクセスするに...
-
C言語のapacheの設定
-
VBAを使用して、外部サーバのフ...
-
SSI(<!--#exec cmd="./XXXpl")...
-
掲示板のスレッドが消えた!?
-
FTPにて553エラー
-
cgiでのアクセスカウンターの表...
-
ユーザの所属するグループを取...
-
perlからphpを実行して結果を得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FFFTPでアップロードできない?
-
なぜフォルダ名がcgi-binなの?
-
インクルードファイルのエラー
-
私書箱掲示板プラス添付ファイル
-
CGIでjcode.plを読み込めなくな...
-
mimeの取得方法
-
cron設定時のディレクトリの絶...
-
AutoRinkの設定。
-
これらの2つの違いを教えて下...
-
SSIからCGIを起動するときのパ...
-
KENTさんのところのサイト内検...
-
Apache+Tomcat+Cocoonの組み合...
-
CGI実行環境下の.jsや.cssが動...
-
異なるディレクトリからライブ...
-
ロックエラー?
-
.htaccessを2つ以上設置した場合
-
perl 特殊配列@INC について
-
UNIXサーバでファイルを不可視...
-
RubyベースのWiki(Hiki)について
-
サーバ上のロックディレクトリ...
おすすめ情報