特定のフォルダの誤ったrm -rfを防ぐ方法は?


8

私はここのほとんどの人が誤っrm -rfて間違ったディレクトリを' '付けたと思います、そしてそれが大きな被害を引き起こさなかったことを願っています。ユーザーが同様のUNIXホラーストーリーをするのを防ぐ方法はありますか?誰かが(前のリンクのコメントセクションで)それを述べました

...これで、UNIXを使用するすべてのUNIXコースまたは会社が、実行しようとしているユーザーのアカウントを無効にするか、実行を停止するようにrm -frを設定しています...

現在のUnixまたはLinuxディストリビューションでの実装はありますか?そして、(rootアクセスで)sysadminからでもそのエラーを防ぐための一般的な方法は何ですか?

Solaris(2005以降)とGNU(2006以降)では、ルートディレクトリ/)がある程度保護されていたようです。とにかく、いくつかの他のフォルダに同じ保護方法を実装することはありますか?

より明確にするために、私はrm使用法に関する一般的なアドバイスについて尋ねていませんでした(そして、それを示すためにタイトルを更新しました)、ルートフォルダー保護のようなものを望みrm -rf /ます:特定のパラメーターを渡す必要があるために:rm -rf --no-preserve-root /..カスタマイズされた一連のディレクトリに同様の実装はありますか?または/reserve-rootオプションで保護するファイルに加えてファイルを指定できますか?


11
1)変更管理2)バックアップ。
mattdm 2013年

6
おそらく唯一の方法は、rmコマンドをその機能を持たないコマンドに置き換えることです。
キース

2
safe-rmたぶん
sr_ 2013年

2
ほとんどのディストリビューションは、 `エイリアスrm = 'rm -i'を実行します。それ以外に:あなたが何をしているかを知っています。必要な場合にのみrootになります。root権限を持つすべてのユーザーに対して、あらゆる種類のセキュリティをユーザーに実装する必要があります。自分でそれを行うことができない場合は、誰かを雇ってください。時間の経過とともに、問題に頭を抱えることができない場合の対策は、上のエイリアスの行と同等になります。
Bananguin 2013年

1
@amyassin using rm -rfは、履歴書生成イベントになる可能性があります。実行前のチェックとトリプルチェック
midnightsteel

回答:


15

誤解を避けるため、入力しないrm -rfくださいrm -rf

ディレクトリツリーを削除する必要がある場合は、次のワークフローをお勧めします。

  • 必要に応じて、削除するディレクトリの親に移動します。
  • mv directory-to-delete DELETE
  • 探検DELETEし、それはあなたが削除したいものを実際にあることを確認してください
  • rm -rf DELETE

rm -rf以外の引数を指定して呼び出さないでくださいDELETE。いくつかの段階で削除を行うと、あなたがあるため(のようにタイプミスのいずれか、間違ったことを削除していないことを確認する機会与えrm -rf /foo /bar代わりのrm -rf /foo/bar)ため、またはbrainoのを(おっと、いや、私は削除することを意図foo.oldしておきますfoo.new) 。

他の人が入力しないと信頼できないという問題がある場合はrm -rf、その管理者権限を削除することを検討してください。失敗する可能性のある原因は他にもたくさんありrmます。


常にバックアップを作成してください

バックアップが正常に機能し、最新であることを定期的に確認します。

どこからでも簡単にダウンロードできないものはすべてバージョン管理下に置いてください。


基本的なUNIXシステムで、いくつかのディレクトリをで削除できないようにしたい場合は、特定の引数を拒否するカスタムスクリプトでrm置き換え(またはより適切なシャドウ)rmします。またはhg rm

一部のUNIXバリアントは、より多くの可能性を提供します。

  • OSXでは、ディレクトリにアクセス制御リストを設定して、新しいエントリの作成や既存のエントリの変更をchmod +a 'group:everyone deny delete_child' somedir妨げることなく、その中のファイルとサブディレクトリの削除を防ぐことができます(これにより、サブディレクトリのファイルの削除が妨げられることはありません。必要な場合は、サブディレクトリにもACLを設定します)。
  • Linuxでは、SELinux、AppArmor、またはrm特定のディレクトリの変更を禁止するその他のセキュリティフレームワークでルールを設定できます。

うんバックアップする最も素晴らしい解決策ですが、私のようなものを考えていた--no-preserve-root...他の重要なフォルダに対して、オプション...そして、それは明らかにしても練習として存在しません
amyassin

質問を編集して、もっと知りたいことを示しました...
amyassin 2013年

1
@amyassinこれ以上何もないのではないかと心配しています(少なくともLinuxでは)。rm -rfすでに「これを削除してください。そうです、私がやっていることを知っていると確信しています」という意味です。さらに必要な場合は、rm特定のディレクトリの削除を拒否するスクリプトに置き換えます。
Gilles 'SO-邪悪なことをやめなさい'

質問に対する最後のコメントを編集してください。質問への回答が適切だと思います...
amyassin 2013年

2
@amyassin実際、私はこれを取り戻します。従来のLinuxには何もありませんが、rm特定のディレクトリへのアクセスを防止するApparmor / SELinux /…ルールを設定できます。また、あなたの質問はLinuxだけではないので、あなたが望むものと少し似ているOSXについて言及すべきでした。
Gilles 'SO-悪をやめる'

4

rm *とzsh を使用している場合は、オプションを設定できますrmstarwait

setopt rmstarwait

これで、シェルを使用しているときに警告します*

> zsh -f
> setopt rmstarwait
> touch a b c
> rm *
zsh: sure you want to delete all the files in /home/unixuser [yn]? _

拒否(n)しても何も起こりません。そうしないと、すべてのファイルが削除されます。


何にzsh -f使用されますか?
ジェームズ

3

rm -rf *ディレクトリでの不測の事態を防ぐには、そのディレクトリに "-i"(emacsまたは他のプログラムでこれを実行できます)というファイルを作成します。シェルは-iを解釈しようとし、それをインタラクティブモードにします。

例:内部にrmtest名前が付けられたファイルで呼び出されるディレクトリがあります-irmディレクトリ内のすべてにアクセスしようとするrmと、最初にディレクトリに-i渡され、対話モードになります。保護したいディレクトリ内にそのようなファイルを置くと、役立つ場合があります。

これはに対して効果がないことに注意してくださいrm -rf rmtest


質問を編集して、もっと知りたいことを示しました...
amyassin 2013年

素晴らしいトリック!ファイルは簡単に作成できます> -i
capitano666

2

コメントで提案された編集:

の属性を変更してファイルまたはディレクトリを不変にすると、属性が削除されるまで、ルートによっても削除できません。

chattr +i /some/important/file

これは、ファイルがrootあっても、書き込み変更もできないことも意味します。私が使用していないように見える、もう1つの属性は追加属性です(chattr +a /some/important/file。この場合、ファイルは追加モードでのみ開くことができるため、削除もできませんが、追加することはできます(たとえば、ログファイル)。これは、vimたとえば、で編集することはできませんが、はできますecho 'this adds a line' >> /some/important/file。の>代わりに>>を使用すると失敗します。

これらの属性は、マイナス記号を使用して設定解除できます。 chattr -i file

それ以外の場合、これが適切でない場合は、常にls /some/dir最初にコマンドを再入力する代わりに、上矢印CTL-Aを押してから削除し、必要に応じてをls入力することを練習rm -rfします。完璧ではありませんが、lsの結果を見ると、それが目的のものかどうかを事前に知ることができます。


質問を編集して、もっと知りたいことを示しました...
amyassin 2013年

2

Cプログラミング言語を理解していれば、rmソースコードを書き直してカーネル用の小さなパッチを作成することは可能だと思います。私はこれを1台のサーバーで見ましたが、いくつかの重要なディレクトリを削除することは不可能でした。「rm -rf / direcotyr」と入力すると、sysadminに電子メールが送信されます。


1

可能な選択肢の1つは、の使用を停止して使用rm -rfを開始することrm -riです。iそこにある追加のパラメーターは、ファイルを削除するかどうかを確認するためのものです。

おそらくあなたの最善の策は、のrm -riような思い出に残るものにエイリアスすることでしょうkill_it_with_fire。このように、何かを削除したいときはいつでも、先に進んで、火でそれを殺します。


1
私は名前が好きfですが、iオプションの正反対ではありませんか?私はそれを試してみたが…
amyassin 2013年

@amyassinはい、そうです。ある種の奇妙なファッションについては、私rはそこにしかいないと思っていました。修正しました。
NlightNFotis 2013年

私はもっ​​と知りたいことを示すために質問を編集しました...
amyassin 2013年

-1

私はこのようにディレクトリ名を最初に置くのが好きです:

$ rm /directoryname -rf

5
これはPOSIXガイドラインに違反しています。
gelraen 2013年

私はもっ​​と知りたいことを示すために質問を編集しました...
amyassin 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.