ファイル名を引用することは、 `xargs sudo rm -rf`を実行するのに十分なセキュリティですか?

ペドロA

フォルダ内の最後の2つのファイルを除くすべてを削除するスクリプトを作成しました。

#!/bin/bash
ls -1 --quoting-style=shell-always /path/to/some/folder \
    | head -n -2 \
    | xargs printf -- "'/path/to/some/folder/%s'\n" \
    | xargs sudo rm -rf

このスクリプトは、毎日cronジョブとして実行されます。

理由は次のとおりです。

  1. を使用してすべてのファイルのリストを取得しますls -1(1行に1つのファイルを取得するため)。

  2. head -n -2;を使用してリストから最後の2つを削除します。

  3. ls相対パスを出力するのでxargs printfThingを使用してフォルダーパスを付加し、絶対パスにします。

  4. sudo rm -rf使用してそれらを送信しますxargs

誰でもこのフォルダにアクセスできるため、誰でもこのフォルダ内のファイルを作成および削除できます。

問題は: sudo rm -rf怖いです。xargs sudo rm -rf信じられないほど怖いです。

削除する巧妙なファイルを(偶然または故意に)作成することによって、他のフォルダー/システムに損害を与えないようにしたいのです。わからない、次のような賢いもの:

file with / spaces.txt

これは非常に恐ろしい結果になる可能性がありsudo rm -rf /ます。

編集:私の間違い、ファイル名に含めることはできない/ので、この特定の問題は発生しませんが、他のリスクがあるかどうかについての質問はまだ残っています。

これが私が使用している理由--quoting-style=shell-alwaysです。これにより、スペースを含むファイルでのトリックを防ぐことができます。しかし今、誰かがファイル名にスペース引用符を入れてさらに賢くできるのではないかと思っています。

私のスクリプトは安全ですか?


注:sudoフォルダーにリモートでアクセスしているため(を使用してマップされたネットワークドライブからmount)、sudoなしではフォルダーを機能させることができませんでした。

ヘマイル

Linuxでは、次の場合を除いて、すべての文字が有効なファイル名構成文字です。

  • \0 (ASCII NUL):Cでの文字列の終了に使用されます
  • / (スラッシュ):パスの分離に使用されます

したがって、想像できるように、多くの場合、あなたのアプローチは間違いなく機能しません。たとえば\n、ファイル名の改行()を処理しますか?ヒント: いいえ)。

いくつかのメモ:

  • 解析しないでくださいls; 専用ツールを使用する(ほとんどのユースケースには少なくとも1つあります)
  • ファイル名を扱うときは、そのようなデータを扱うほとんどすべてのGNUツールによって提供されるNULで区切られた出力を活用するようにしてください
  • 配管するときは注意してください。両方のプログラムがNUL分離を理解できることを確認してください
  • 呼び出しているときはいつでもxargsfind ... -exec;で逃げることができるかどうかを確認してくださいほとんどの場合、あなたはfind一人で大丈夫です

これらは今のところあなたを動かすと思います。steeldriverは、コメント(printf -- '%s\0' /path/to/some/folder/* | head -zn -2 | xargs -0 rm)ですでにNULで区切られたアイデアを提供しているので、これを出発点として使用してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

xargs -0が余分な空白行を追加するのはなぜですか?

分類Dev

sudo rm *を使用してubuntuシステム全体を削除しました。ホームフォルダーは、ecryptfsで暗号化されています。

分類Dev

xargsの入力ファイルがすでに実行されているときに、その入力ファイルに行を追加できますか?

分類Dev

lsは、rmが削除するファイルを常にリストしますか?

分類Dev

RM成功していないが、それは、RMをプリントアウト:「」削除することはできません:そのようなファイルまたはディレクトリを

分類Dev

findとxargsを使用してrmでファイルを削除する

分類Dev

rmとrm -rfの違い

分類Dev

Linux rm -rf *注文を削除しますか?

分類Dev

「xargs」の逆を実行するにはどうすればよいですか?

分類Dev

Linuxでcp、mv、rm、chownなどのファイル操作を実行するときにフォルダーを除外するにはどうすればよいですか

分類Dev

Linuxのc ++でディレクトリの内容をクリアする方法(基本的に、「rm -rf <directorypath> / *」を実行したい

分類Dev

xargsを使用して、名前にスペースと引用符が含まれているファイルをコピーするにはどうすればよいですか?

分類Dev

Pythonでrm -rfを実行する最も簡単な方法

分類Dev

コマンドラインからJavaユーティリティを実行するときに、このコマンドを処理するのに十分なストレージが利用できない

分類Dev

docker buildコマンドを実行するときの--force-rmと--rmの違いは何ですか

分類Dev

'rm'の代わりに 'git rm'を使用してファイルを削除するのはなぜですか?

分類Dev

sudo rm -R / System / Library / Frameworks / Python.framework / Versions / 2.7から回復します

分類Dev

-fr *を確実にrmする方法は?

分類Dev

ファブリックにsudoの代わりに `dzdo su -`を使用させることはできますか?

分類Dev

`xargs head`がファイル名を出力するのはなぜですか?

分類Dev

makefileのrmからファイルを除外する

分類Dev

TCLで `rm -rf *`を実行する方法

分類Dev

ファイル名がリストされるようにlsをxargsでcatにパイプする方法は?

分類Dev

xargs + curl "Failedwriting body"(複数の結果をファイルに保存することはできません)

分類Dev

awkアクションとしてファイルを `rm`する方法は?

分類Dev

findおよびxargsを使用するときに、ffmpegから出力ファイル名の名前を変更する

分類Dev

Firestoreセキュリティルールのエラー:FirebaseError:権限がないか不十分です

分類Dev

存在しないファイルを無視するPowerShellと同等のrm-f

分類Dev

git-rmとgitcommitによって削除されたローカルファイルを回復する方法は?

Related 関連記事

  1. 1

    xargs -0が余分な空白行を追加するのはなぜですか?

  2. 2

    sudo rm *を使用してubuntuシステム全体を削除しました。ホームフォルダーは、ecryptfsで暗号化されています。

  3. 3

    xargsの入力ファイルがすでに実行されているときに、その入力ファイルに行を追加できますか?

  4. 4

    lsは、rmが削除するファイルを常にリストしますか?

  5. 5

    RM成功していないが、それは、RMをプリントアウト:「」削除することはできません:そのようなファイルまたはディレクトリを

  6. 6

    findとxargsを使用してrmでファイルを削除する

  7. 7

    rmとrm -rfの違い

  8. 8

    Linux rm -rf *注文を削除しますか?

  9. 9

    「xargs」の逆を実行するにはどうすればよいですか?

  10. 10

    Linuxでcp、mv、rm、chownなどのファイル操作を実行するときにフォルダーを除外するにはどうすればよいですか

  11. 11

    Linuxのc ++でディレクトリの内容をクリアする方法(基本的に、「rm -rf <directorypath> / *」を実行したい

  12. 12

    xargsを使用して、名前にスペースと引用符が含まれているファイルをコピーするにはどうすればよいですか?

  13. 13

    Pythonでrm -rfを実行する最も簡単な方法

  14. 14

    コマンドラインからJavaユーティリティを実行するときに、このコマンドを処理するのに十分なストレージが利用できない

  15. 15

    docker buildコマンドを実行するときの--force-rmと--rmの違いは何ですか

  16. 16

    'rm'の代わりに 'git rm'を使用してファイルを削除するのはなぜですか?

  17. 17

    sudo rm -R / System / Library / Frameworks / Python.framework / Versions / 2.7から回復します

  18. 18

    -fr *を確実にrmする方法は?

  19. 19

    ファブリックにsudoの代わりに `dzdo su -`を使用させることはできますか?

  20. 20

    `xargs head`がファイル名を出力するのはなぜですか?

  21. 21

    makefileのrmからファイルを除外する

  22. 22

    TCLで `rm -rf *`を実行する方法

  23. 23

    ファイル名がリストされるようにlsをxargsでcatにパイプする方法は?

  24. 24

    xargs + curl "Failedwriting body"(複数の結果をファイルに保存することはできません)

  25. 25

    awkアクションとしてファイルを `rm`する方法は?

  26. 26

    findおよびxargsを使用するときに、ffmpegから出力ファイル名の名前を変更する

  27. 27

    Firestoreセキュリティルールのエラー:FirebaseError:権限がないか不十分です

  28. 28

    存在しないファイルを無視するPowerShellと同等のrm-f

  29. 29

    git-rmとgitcommitによって削除されたローカルファイルを回復する方法は?

ホットタグ

アーカイブ