しらいです。 In Message-Id <20010123.213459.79205412.tshiozak _at_ astec.co.jp> "T.SHIOZAKI" <tshiozak _at_ astec.co.jp>さんwrites: > 塩崎です。 > ごめんなさい、もう一つ大穴がありました。 > > あるディレクトリの中を retrieve してる途中にそのディレクトリごと > rename & symlink されると、任意のファイルが消せてしまいます。 「| sh」を使わず直接 rm/rmdir を呼ぶ方式の方だと、その「途 中」が極端に小さくなるのでより安全だとは思いますが、それでも 完全に secure とは言えませんね。 まぁ、事実上不可能というレベルでしょうか。 > # ちゃんとやるのなら、一段一段 chdir した後に getcwd で確認しつつ > # ディレクトリを下っていかないとダメでしょう。 ふむ。それなら全部 shell script で書くというのではどう? ---- Cut Here ---- #!/bin/sh DIR=/tmp older() { if [ x`find $1 -prune -mtime +90` != x ]; then return 0 else return 1 fi } cleandir() { for f in .??* *; do fullpath=$1/$f if [ -f $f ]; then if older $f; then rm $f fi elif [ -d $f ]; then ( cd $f if [ x$fullpath = x`pwd` ]; then cleandir $fullpath fi ) if older $f; then rmdir $f fi fi done } cd $DIR DIR=`pwd` cleandir $DIR ---- Cut Here ---- # 単一の time stamp 比較に find を使うのは冗長なんだけど、 #移植性を考えると他に適当なのがないねー。 > あと、「| sh」は(潜在的に)非常に危険なので止めたほうがいいようです。 > 特に、| とか > とか ' とかのあらゆる組み合わせのファイル名を > 食わせた時に正しく動くようにするのはきっと無理でしょう。 最初から shell script 内で処理するようになっていれば問題な い筈です。一旦 shell 変数に代入された文字列については、メタ キャラも無効ですし。 # 何らかの理由により「/」が filename に含まれてしまった場 #合はどうしようもありませんねー。それって system call レベ #ルでお手上げだと思う :-) > 結局、広く使われているオープンなツールが存在するのなら、 > こういうのは下手に自分で書くよりも、 > できれば一回ソースをざっと眺めた後に、 > 継続的にセキュリティ情報に注意しつつ、 > それを使う方がおおむね安全でしょう。 何かあるんだったらそれ使った方がいいでしょうね。何がありま す?ニーズはあると思うんで、誰か作ってそうですけどね。 しらい たかし
Follow-Ups:
- [linux-users:79074] Re: find -exec rm{}でディレクトリも消したいKAMO Tomoyuki
- Prev by Subject: [linux-users:79070] Re: ラーメンワームについて
- Next by Subject: [linux-users:79072] Re: ioctl
- Previous by thread: [linux-users:79030] Re: find -exec rm{}でディレクトリも消したい
- Next by thread: [linux-users:79074] Re: find -exec rm{}でディレクトリも消したい
- Indexes:[Main][Thread]