「rm」コマンドのパスワードを設定するにはどうすればよいですか?


29

友だちは端末を使用してファイルを削除し続けます。そのため、rmコマンド用のパスワードの作成方法を説明してください。


50
ユーザーアカウントをパスワードで保護して、「友達」が最初にアクセスしないようにします。
アンドレアラザロット

14
システムがどのように機能し、その機能を使用するかを実際に学習する必要があります。
AlexP 16

13
友人があなたのコンピュータを無防備のままにしておくと、コンピュータをねじ込んで「レッスンを教えよう」としている可能性があります。アカウントを保護してゲストアクセスを拒否するか、アクセスを制限してゲストアクセスを提供することで、このレッスンを学びます。
ケンウィリアムズ

4
unlinkコマンドについても覚えておいてください。また、mvコマンドについても効果的にファイルを上書きできるためです。また...
コス

17
敵を必要とするこれらのような友人と?
カスペルド16

回答:


46

そのようなパスワードをrmコマンド自体に設定する簡単な方法はありません。おそらくapt-get、パッケージのインストールやファイルの削除などの多くのコードハッキングがなければ、パスワードを何千回も入力する必要があるか、潜在的に混乱を招く可能性があります人へのコマンドへのアクセスでしょう(自分のファイルを削除するには、あなたのような)それを必要とします。複数のユーザーアカウントと複数のアクセス許可セットを持ち、アクセスできないようにデータの異なるセクション(ホームディレクトリなど)へのアクセスを制限することで、これを並べ替えることができます。

(他のオプションは、Videonauthによって投稿された他の回答に詳述されているように、各ユーザーの個別のユーザーアカウント、そしてアクセスコントロールリストです

ここに核となる問題があります-あなたはあなたの友人にあなたのシステムを使わせています。これには多くのセキュリティへの影響があります-「ボックスに物理的にアクセスできる人は誰でもシステムを制御してタスクを実行できる」という概念はITセキュリティマントラです。そのため、物理システムアクセスを「共有」しません。信頼できる承認された担当者を除きます。


唯一本当にこれを行うにはまともな方法は、お友達へのアクセス与えないことです、あなたのあなたは本当に多くのように上のファイルを気にしないことを、コンピュータを、そして彼らが使用できることを彼らに「専用の『ゲスト』システム」を与えます。これは、ファイルを安全に保つための最も「安全な」方法です。


もちろん、それがオプションではない場合、唯一の本当に安全なオプションは、ユーザーごとに異なるホームフォルダを持つ複数のユーザーアカウントを構成し、自分のホームディレクトリまたは他のユーザーのホームへのアクセスを許可しないことですディレクトリ。そして、あなたが彼らに触れたくないすべてのものをあなたのホームディレクトリに置き、彼らにsudoアクセス、rootパスワードを与えたり、彼らとパスワードを共有したりしないでください。

これはあなたがこれを行う方法です:

私の名前が「Foo」で、友人のユーザー「Bar」が私のシステムを使用するが、ファイルにはアクセスしないようにしたいとします。最初のステップは、ホームディレクトリへの自分以外のアクセスを拒否することです。これは、他のユーザーがあなたのファイルを削除しないようにするだけでなく、他のユーザーがホームディレクトリを覗き見して、ホームディレクトリにあるものを見ることができないようにするためです。

chmod 750 /home/Foo

2番目のステップは、「バー」のユーザーアカウントを作成することです(下の括弧内の内容は入力しないでください。情報提供のみを目的としています)。このようにして、彼が独自のアクセス権セットを持っていることを確認できます。

sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)

第三段階は、誰もがいずれかの自分のファイルに詮索することはできませんので、その後、あまりにも自分のホームディレクトリを制限することです。これは物事を平等にするだけです。

sudo chmod 750 /home/Bar

手を洗ってよく洗い流し、システムにいる多くのユーザーに対してこれらの手順を繰り返します。彼らはあなたのファイルにアクセスできず、あなたは彼らに管理者権限を与えないので、彼らはそうしようとsudoしないであなたのファイルを削除することはできません-あなたはこれを許可しないので、彼らはできませんあなたのものに触れます。そして、彼らはあなたのファイルを見ることができません、スーパーユーザーにならないで、ここでは起こりません。


常にこれを思い出してください:マシンへの物理的なアクセス、または一般的なアクセスを誰かに与えることにより、ファイルとデータを危険にさらすことになります。これは、ITセキュリティの世界で広く受け入れられている事実であり、引き続き真実です。友人にコンピューターへのアクセスを許可すると、常にデータが危険にさらされるため、自分のシステムを混乱させたり、コンピューターへのアクセスを許可しないでください


ディスク暗号化に関する注意

ディスクの暗号化はサードパーティからデータを保護するのに適していますが、制限があります。

  1. システムの電源が入っている場合、ディスクはすでに復号化されているため、リスクがあります。
  2. いくつかのシステムが持っている壊れたディスク暗号化のアプローチを。たとえば、一部のAcerシステムでは、パスワードを使用して暗号化/復号化のみを許可し、ハードコードされたパスワードを使用するか、簡単に解読される弱い暗号化を使用します。
  3. 「キー」に侵入する方法、またはシステムの電源を切った直後、RAMデータが「消失」または劣化する前にメモリからキーを抽出する方法が常にあります。(これらについて詳しく説明しませんが、これらのリスク存在ます)。
  4. システムが暗号化されているかどうかにかかわらず、マシンへの物理的なアクセスは、常にデータを危険にさらします。システムへのフルアクセスを潜在的に与えたくない人に物理的なアクセス(またはリモートネットワークアクセス)を与えないでください。

ディスク暗号化はこれらの問題を解決しませんが、脅威アクターに頭痛の種を追加します。悪意のある人は、暗号化されている場合はgive めるかもしれませんし、あなたを拷問するかもしれません(XKCDセキュリティコミックストリップをキューに入れる)。

したがって、システムが暗号化されているが、他のユーザーに使用を許可している場合、ユーザーは復号化するためのパスワードを持っているか、ラップトップを復号化したままにして、SSHで接続したり物理アクセスしたりできます。どちらの場合も、悪いことです。

ただし、システムが暗号化されていない場合、このセクションは関係ありません。


私のラップトップには暗号化されたハードドライブがあります。他人のアクセスを許可することは依然としてリスクですか?
ティム

2
@Timはい、システムの電源を入れて復号化する場合。そして、たとえそれがオフになっていても、適切なテクノロジー、時間、献身により、潜在的にまだRAMに保存されている復号化キーを見つけることが可能です。ディスク暗号化は100%の保護ではありません -それを回避する方法はありますが、それは「悪意のある人は実際にそれほど多くの時間と労力を費やそうとしていますか」という問題です。また、OPの質問から判断すると、システムはオンであり、暗号化されていない(完全にまたは部分的に)ため、削除のリスクがあります。
トーマスウォード

3
@Tim Thomasの答えに加えて、一部のラップトップではディスク暗号化の実装が壊れています(ハードウェアFDEに依存している場合)。AFAIR Acerラップトップは、暗号化にパスワードを実際に使用しません。ハードコードされたパスワードを使用した暗号化/復号化の承認にのみ使用します。
グロノスタジ16

データは暗号化され、信頼されていない人はシステムへのアクセス権を持っている場合はリスクが常にあるかどうか
Sergiy Kolodyazhnyy

1
@LightnessRacesinOrbit apt-getが実行されdpkgます。これ、よく使用するスクリプト実行しますrm。私のXenialボックスでは、cd /var/lib/dpkg/info; grep -P '\brm\b' *inst344行を出力しますが、そのうち333 rmコマンドの実際の使用のように見えますインストールスクリプトだけです。grep -P '\brm\b' *rm削除スクリプトでさらに表示されます(パッケージファイルではなく、構成ファイルを削除します)。
エリアケイガン

19

ファイルを使用せずにファイルを削除する簡単な方法があるrmため、これは実際にはコマンドに関するものではありません。友人が意図せずにコマンドを誤用しているという問題がある場合は、そのコマンドの使用を明確に制限したり、別の方法で動作させたりする解決策が役立つ場合があります。対照的に、友人が意図しない方法でデータを意図的に処理しているという問題がある場合は、実際のセキュリティ対策を実装する必要があり、コマンド自体(または個別のコマンドセット)に焦点を当てたソリューションはありませんあなたを安全に保ちます。rmrm

アクセスを制御する必要がありますか、それとも正直な間違いを防ぐ必要がありますか?

ファイルを削除したくないことを友人が知っていると仮定すると、2つの可能性があります。

  1. 彼らは意図的にそれをしている可能性があります。このシナリオでは、友人が故意にファイルを削除しているため、コンピューターを使用する際のデータの扱い方についての希望を遵守しようと信頼することさえできません。この問題の唯一の解決は、トーマスウォードが詳細に説明したように実際の効果的なセキュリティ対策を使用することです。多くの場合、このような最善の対策は、コンピューターを使用しないようにすることです。ただし、独自のユーザーアカウントを使用することで、ある程度の保護を提供できます。

  2. 彼らは間違ってそれをしている可能性があります。このシナリオでは、友人は非常に事故を起こしやすく、rm彼らは望んでいないコマンドを実行し続けます。彼らはあなたとあなたのデータを尊重して扱いたいと思っていますが、間違ったコマンドを実行したり、間違ったファイルを削除したりするなど、実際にそうするのは本当に悪いです。これが起こっていると信じることは素晴らしいことですが、停止するように指示した後にデータを削除し続ける人々が悪意なく動作していると仮定することに対して警告します。

    さらに、意図が良い場合でも、ユーザーアカウントを個別に指定することは、コンピューターの使用を許可しないことを除いて、ファイルの削除を防ぐ最も確実な方法です。

状況が本当に#2である場合-あなたの友人はあなたのファイルを削除しようとはしていませんが、誤ってそれらを削除しないでください、そして彼らが誤ってそれらを削除する唯一の方法は、少数のコマンドの不注意な誤用によるものです(などrm)正しく使用するのに特別な問題があること-Videonauthの答えのテクニックはいくらか役に立つかもしれません。ただしrmコマンドはファイルを削除する多くの簡単な方法の1つにすぎないため、これらはセキュリティ対策ではないことを理解する必要があります。詳細は以下をご覧ください。

「自分の状況は基本的に、自分のコンピューターを使用する他の人ではなく、自分がrm間違って使用していたのと同じですか?」と自問することをお勧めします。

答えがnoの場合、これは情報セキュリティの問題であり、友人がユーザーアカウントを使用できないようにする必要があります。答えがyesの場合、誤用している場合と同じアプローチを使用できますrm

  • 教育。あなたの友人は、彼らが何をしていて、それを避ける方法を知る必要があります。
  • インターフェースの変更。ファイルを削除する実際の機能(個別のユーザーアカウントが必要)を奪うことなく、それ自体を実行するだけで、それ以上実行するだけですぐに削除されないようにすることで、誤ってファイルを削除するのを難しくすることができます。Videonauthの答えは、これに対する 1つのアプローチを提供します。この答えでは、別のものを提示します。rm filefile

ただし、友だちが何も悪いことをしようとしていない場合でも、自分の個別のユーザーアカウントを使用することを考慮する必要があります。これで問題は解決します。データを意図的な破壊から保護するのと同じセキュリティ対策で、意図しない破壊からも保護します。悪意を持っていなくても、誰かがしたくないことをし続けていると、そのことを控えることを信頼することはできません。

作成rm、削除する前にプロンプトすることは、いくつかのミスを防ぐことができます。

誤ってファイルを削除するのを防ぐために、実際に実行されるシェルエイリアスrm作成できます。フラグを渡すと、各ファイルを削除する前にユーザーにプロンプ​​トが表示されます(を参照)。rmrm -i-irmman rm

あなたは追加することにより、(ユーザーアカウント用)この操作を行うことができalias rm='rm -i'、あなたに.bash_aliasesまたは.bashrcファイル。詳細については、この質問その質問を参照してください。これは、新しく開いたbashシェルで有効になります。

これは実際のセキュリティを提供せず、間違いを防ぐのに絶対確実ではありません。

  • プロンプトが表示されたら、削除を続行することを選択できます。
  • エイリアスを実行し/bin/rmたり、エイリアス解除したりするなど、さまざまな方法でエイリアスをバイパスできます(unalias rm)。
  • エイリアスの展開が行われない多くの状況があり、これらの状況でrmはで実行されません-i
  • 不要な方法を使用してファイルを削除することもできますrmVideonauthのアプローチの場合のように、以下を参照)。
  • ファイルを上書きしたり、コンテンツを変更したりするなどして、ファイルを削除せずにデータを破損する可能性があります(Videonauthのアプローチの場合も同様です)。

しかし、実際のセキュリティが必要ない場合(上記を参照)、これが道のりかもしれません。友人がシステム提供のrmコマンドを使用できないようにするアプローチと比較して:

  • エイリアシングrmには、rm -iミスを防止することで、あまり効果的である-彼らはファイルを削除するために、いくつかの他の技術を使用してに移動するまで。その時点で、rm彼らが何も悪いことをしようとしていないとしても、それらを使用しないようにすることは完全に無効になりますunlink

  • 一方、エイリアスの展開は特定の状況(大まかに言えば、シェルの通常のインタラクティブな使用)でのみ発生するため、実際にプロンプ​​トが表示されていないときに、プロンプトが表示されると友人が考える場合があります(コマンドがたとえば、スクリプト、または別のシェルから発行された)。Videonauthの方法にはこの問題はありません。これは、この方法の客観的な利点ですalias rm='rm -i'

  • スクリプトを実行すると、エイリアスを使用するよう意図的に記述されていない限り、エイリアスはスクリプト内で展開されません。これは、へのエイリアスrmrm -i何かを壊す可能性が非常に低いことを意味します。これはの客観的な利点ですalias rm='rm -i'

rm 他のまったく普通のプログラムではできなかったことは何もできません。

特別なことは何もありませんrm。これはファイルを削除する便利で自己文書化された方法であるため、ファイルへのアクセスを制限すると、それに依存する多数のスクリプトが破損する危険があります。しかし、それはファイルを削除する唯一の方法からはほど遠い-それは単なる普通のプログラムです。

いくつかのコマンドは、制限された(非root)ユーザーが実行しないと実行できないタスクを実行します。たとえば、sudo許可されていることを確認した後、別のユーザーとしてプログラムを実行できます。passwdユーザーのパスワードが保存されているデータベースを編集しますが、自分のパスワードを変更することしかできません(rootでない限り、誰のパスワードも変更できます)。

/usr/bin/sudoそして/usr/bin/passwd、彼らが持っているので、それを行うことができますsetuidビットがで示されるように、セットをs使用すると、実行時に左端の列に表示されていますls -l

ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root  60272 Feb 18  2016 /bin/rm
-rwsr-xr-x 1 root root  54256 Mar 29  2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo

/bin/rmないことに注意してくださいs:そのパーミッションは-rwxr-xr-x、while /usr/bin/passwd、および/usr/bin/sohave -rwsr-xr-xです。これにより、実行者passwdまたは実行者に関係なくsudo、実際にはrootユーザーとして実行されます。これは、rootが実行可能ファイルの所有者であるためです。(setgidビットもあります。このビットを設定すると、実行可能ファイルは呼び出し元ではなくグループ所有者のグループIDで実行されます。)

まだ発見されていない(または発見されていることが、まだパッチが適用されていない)任意のセキュリティ上の脆弱性を除き、sudo及びpasswdこれらのユーティリティは非常に慎重に書かれているので、呼び出し側が許可されるべきであることを、彼らは唯一のものを行うことができますので、安全ですする。

/bin/rmこの方法では動作しません。それは必要ではないので、setuidではありません。ディレクトリのアクセス許可(および場合によってはファイルのアクセス許可)は、ユーザーが削除できるファイルを制御します。削除するためにrootになる必要はありません。完全に明確にするために、setuidビットをオンに設定しないrmください。セキュリティへの影響は悲惨なものになります。それ以来、だれが実行しrmても、rootが実行したかのようです。(ユーティリティはsudopasswd誰が実際に実行しているかを確認し、実行する前に何かが許可されていることを確認します; rmそのようなことはしません。)

実行可能ファイルにsetuid(またはsetgid)ビットが設定されているかどうかを確認すると、実行できるユーザーを制限することでセキュリティが向上する可能性があるかどうかがわかります。setuid(またはsetgid)でない実行可能ファイルには特別なステータスはなく、誰でも簡単にコピーしてコピーを実行したり、別のマシンから自分のコピーを持ってきたり、同じことを行うスクリプトやプログラムを書いたり、それを行う別のプログラム。

なしでファイルを削除する rm

せずにファイルを削除する明白な方法rmのUbuntuには、(あなたがUnityまたはGNOMEシェルを使用している場合、ノーチラス)グラフィカルなファイルブラウザにその場所に移動し、ファイルを削除することです。を使用せずに端末からファイルを削除するために使用できるコマンドも多数ありますrm

たとえばfoo.txt、現在のディレクトリで呼び出されたファイルを削除するには、Ubuntuですぐに使用できrm、にアクセスする必要のない次のコマンドを実行します。(確かに、削除した後、標準システムユーティリティのみでインストールされた16.04最小システムでテストしまし/bin/rm。)

  • unlink foo.txt
  • busybox rm foo.txt
  • perl -e 'unlink("foo.txt")'
  • python3 -c 'import os; os.remove("foo.txt")'(古いリリースpythonpython3はなく)

もちろん、そのリストは完全なものではありません。そのようなコマンドの完全なリストは不可能です。ファイル削除の防止は、個別のユーザーアカウントとファイルおよびディレクトリのアクセス許可が存在することの1つです。彼らはそれを防ぐために非常にうまく機能しています。対照的に、rmコマンドを変更する(パスワードを必要とする、またはその他の方法で)か、アクセスを制限してコマンドをrmまったく妨げないようにします。


2
実際の使用では、GNU rm-Iオプションが好きです。4つ以上のファイルの削除、または再帰的な削除のプロンプトのみが表示されます。常に使用しての習慣に得ることはありませんあなたはとても-f\rmエイリアスの展開、または入力を避けるためにy読書なし。しかし、意図しない前にリターンキーを押したり、グロブが多くのファイルに一致したりするような誤字を防ぐことができます。
ピーターコーデス

2
ファイルのリンクを解除する別の興味深い方法:mv foo.txt /tmp/.gone、その後再起動し、バックアップしていたtmpfsを破棄し/tmpます。または、mv複数のファイルの名前をすべて同じ名前に変更して、最後のファイルのみが残るようにするだけです。または、わかりにくい名前に変更してファイルを非表示にします。この回答の最初の部分が指摘しているように、もしあなたが無能ではなく悪意から防御しようとしているなら、あなたはただあなたのアカウントから人々を締め出す必要があります。
ピーターコーデス

16

/bin/rm次の行を使用してコマンドの権限を変更できます。これにより、sudoアクセスなしでコマンドが実行されなくなります。

sudo chmod 750 /bin/rm

これrmにより、システムが提供するコマンドを使用できなくなります。他の方法でファイルを削除することを妨げないことに注意してください。

また、rmdirディレクトリを削除する一般的な方法であるコマンドの使用を防ぐには、その実行可能パスに同じ方法でアクセス許可を設定できます。

sudo chmod 750 /bin/rmdir

このコマンドもsudo権限でしか使用できないことを思い出してください。

気に入らない場合や他の問題が発生した場合に元に戻すには755chmod


@muruが指摘したように、上記は非常に粗雑なソリューションであり、ルートアカウントで実行されていないシステムサービスを破壊する可能性さえあります。したがって、ここでACL(アクセス制御リスト)を使用して別のオプションを追加して、同じでおそらくはるかに安全です(読みやすく、ACLは現在Ubuntuシステムに通常インストールされているため、有効化部分をスキップできます):

したがって、ブロックしたいユーザーだけに対して上記と同じことをすることは

sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir

<user-name>ファイルを使用したくない実際のユーザー名に置き換えるだけです。

同様にchmod、使用してsetfacl -m実行され、特定のユーザーを防止するために、rmおよびrmdirのみシステムが提供するコマンドに適用されます。Nautilusでファイルやフォルダーが削除されたり、他のターミナルコマンドが使用されたりすることはありません。

説明:

  • -mフラグは、ファイルのACLを変更することを意味します。
  • 変更の最初の部分は、uユーザーの略です。uユーザー、gグループ、oその他すべてに対して次の値を持つことができます
  • 中間部分で<user-name>は、変更する内容に応じて実際のユーザー名またはグループ名をホルトできます。全体的な変更を設定するには、空のままにします。
  • 3番目の部分には、設定する許可の種類が含まれています。この例では、許可をまったく設定しないため、を配置し-r読み取り許可、w書き込み許可、およびx実行のために次の文字を含めることもできます。

4
他のユーザーの実行権限を削除するよりもACLを使用する方がよいでしょう。ルートとして実行されないシステムサービスはすべて障害になります。
ムル16

2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir、IIRC。あなたはしてACLをテストすることができますgetfacl /bin/rm /bin/rmdir
muru

2
このようなACLの唯一の欠点は、これらの長期を維持することは悪/厄介なことです。そして、一人一人のために、システム上の個々のユーザがないかどう維持することは不可能使用して、システムが。そうでなければ、それは良いアイデアです。
トーマスウォード

4
@DavidFoersterはい。なしでファイルを削除するには、事実上無制限の数の方法がありますrm。ここでVideonauthが提供するソリューションは、偶発的なユーザーがアイテムの削除を停止できるようにする可能性のある方法ですが、実際のセキュリティは提供しません(OPの友人がOPの意図を故意に破壊しようとしていない場合は大丈夫かもしれません) 。Videonauth:この投稿を編集することをお勧めしますrm。そうすれば、コマンドを実行する必要がないため、実際にファイルを削除することを妨げないことがはっきりとわかります。(あなたがそれを言いたくない場合のために、私はそれを自分で編集することを控えています。)
エリアカガン

1
Perl、Python、およびシステム上のすべてのコンパイラにより、他のユーザーもファイルを削除できることを忘れないでください。ユーザーがファイルを削除できないようにするには、rmコマンドのアクセス許可を変更するだけでは不十分です。
ジョナサンレフラー

8

これは非常に単純な答えであり、パスワードを入力せずにrmコマンドを使用して誰かを何気なく停止させます。これは安全なソリューションではないため、他の回答の代替案のいくつかを暗示する必要があります。

ただし、エイリアスを使用して、rmコマンドの動作を変更できます。試してください:

alias rm="sudo -l >/dev/null && rm"

これは、誰かがrmコマンドを入力すると、sudo -lコマンドを実行します。このコマンドは、ユーザーにパスワードの入力を強制します。正しく取得できた場合、権限を一覧表示し(この出力は破棄します)、ステータス0で終了します。間違った場合はエラーで存在します。

次に、sudoコマンドの後に「&&」を付けて、次のコマンドを終了します。この場合は、前のコマンドがステータス0で終了した場合のみ「rm」です。つまり、パスワードは正しくなりました。

これを永続的にするには、にaliasコマンドを含めます~/.bashrc

これは非常に簡単に無効化されることに注意してください(たとえば、単にタイプすることができます/bin/rm


5

時々それは私たちの友人ではなく、私たちは私たち自身の最悪の敵です

rmOPが要求したようにパスワードで保護するスクリプトを作成しましたが、誤って削除しないように編集も加えました。

  • /
  • / home
  • / bin

編集: 2017年3月5日-ターミナルで実行中かどうかを確認する方法を変更します。


スクリプトを作成する

gksu gedit /usr/local/bin/rm次の行で使用してコピーします。

#!/bin/bash

tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi

if [ $Terminal == "Y" ] ; then
    # Running from terminal don't allow delete of / or /toplevel directory even if sudo
    for i in ${@:1}
    do
        # Skip options -i -r -v -d 
        if [[ ${i:0:1} != "-" ]] ; then
            # if parameter doesn't begin with '-' it's file or directory, so get real path.
            fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
            # We must have at least two `/` in the full path
            levels=$(echo "$fullname" | tr -cd '/' | wc -c)
            if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
                echo "Attempting to remove top level directory '$fullname'"
                echo "Use 'sudo /bin/rm $@' instead."
                exit 1 # error
            fi
        fi
    done
fi


if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
  if [ $Terminal == "Y" ] ; then
  # Only running from a terminal needs password (ie not cron)

    # log rm usage to /var/log/syslog
    PARENT_COMMAND="$(ps -o comm= $PPID)"   
    logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"

    # Get password
    Password=$(zenity --password --title="Password for rm")
    encryptPassword=$(echo -n "$Password" | md5sum)

echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.

    if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi
  fi # non-terminals can't enter password.
fi # root doesn't need to enter password.

# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"

exit 0

パスワード「WE2U」を好きなものに変更し、ファイルを保存します。

新しいrmスクリプトを実行可能としてマークする

rmを使用して、新しいスクリプトに実行可能フラグを設定します

sudo chmod +x /usr/local/bin/rm

使い方

rmパスワード

パスワードがWE2Uでない場合、スクリプトを初めて実行すると、「無効なパスワード」が表示され、入力したパスワードの暗号化キーが表示されます。この暗号化キーをコピーして、ターミナルからスクリプトに貼り付けます。次に、端末で暗号化キーを表示したエコーのある行をコメント化します。

パス/usr/local/binはリストで/binコマンドrmが呼び出されるよりも高いためです。有効なパスワードを取得した後/bin/rm、実際の削除を行うために呼び出します。

トーマス・ウォードが別の答えで指摘したように、もしあなたがそうするsudo apt-get install ...なら、パスワードを何千回も求められるかもしれません。スクリプトsudoは使用されているかどうかを確認し、パスワードを要求しません。さらに、rmGUIアプリケーション内から呼び出された場合、パスワードは不要です。

スクリプトは、ターミナルを使用して手動で呼び出されるloggerたびに記録を呼び出しますrm。コマンドの使用はに記録され/var/log/syslogます。


1
ハッシュ化されたバージョンをスクリプトに含めるだけでパスワードをマスクできます。ユーザーがパスワードを入力するたびに、単純にハッシュ化してハードコードされたハッシュと照合できます。
InitializeSahib

@InitializeSahibハッシュパスワードサポート(暗号化)がスクリプトに追加されました。
WinEunuuchs2Unix

3

もう1つの方法は、非ルートユーザーがアクセスできないディレクトリに重要なファイルのバックアップコピーを作成することです。バックアップ先へのパスで少なくとも1つのディレクトリがルートおよびモード700によって所有されていることを確認するだけで、それらを自動的に使用rsyncまたはunison同期できます。これにより、すべてのファイルのコピーが2つ作成されます。ゲストユーザーを作成して使用する方が安全です。ただし、コンピューターを提供したり、無人で放置する前に、常にロックまたはログアウトすることを忘れないでください。


3
削除の伝播を回避する方法を指摘したいですか?そして、理想的には、ユーザーが削除を永続的にする必要がある何かをしているとき、それが永続的であるように、それをオフとオンに切り替える方法です。
ostergaard 16

@ajostergaard私の考えでは、友人からコンピュータを取り戻すたびに、何も欠けていないことを手動で確認し、何でも復元します。しかし、私が好むツールは、GUIインタラクティブモードで使用されるユニゾンです。これにより、削除を簡単に確認(および元に戻す)できます。
Random832 16

2

あなたが探している質問に対する直接的な答えではありませんが:

友人がrmコマンドを使用してファイルを削除している場合、友人は無能であるか、ジャークであるか、セッションにログインしたまま放置しないように教えようとしているBOFH志望者です。すべての場合において、解決策は同じです。セッションをログインしたまま放置しないでください

これには、アップグレードまたは新しいシステムを取得するたびにシステムに特別な変更を加えることを覚えておく必要がないという利点があり、また、予想どおりに動作するコマンドに依存するスクリプトやその他の使用が予測できない方法で失敗することを防ぎます。

また、「友人」が次のステップに進まないようにするという利点もあります。またmv、単純な削除では目的の処理が行われないことがわかったときに、ファイルを/ dev / nullに移動することを決定した場合、コマンドを「パスワード保護」したいでしょうか?このようなゲームをプレイしているとき、勝つ唯一の方法はプレイしないことです。


1

私が計画したのと同じような可能性があります。ファイルサーバーで、写真のメインストレージが書き込み可能で、家族の誰かが(技術的でない、または偶然に)何かを削除する可能性がある場合、ディレクトリを移動するGUIを誤ってドラッグするか、元の名前を名前を変更せずに編集バージョンで上書きします。

私は、アクセス権を他のすべてのユーザーに書き込み不可にすることなく、それに対して保護できることに気付きました。ZFSは定期的なスナップショットを作成するため、誤って削除したり上書きしたりした場合は元に戻すことができます。(バックアップとは異なり、スナップショットは軽量でコピーオンライトであるため、ストレージの使用量を増やすことはありません。)

ZFSはFreeBSDにネイティブです。Linuxにはスナップショットもあるbtrfsがあります。


0

非常に愚かな問題に対する非常に愚かな回避策。

あなたがしたくない場合chmod rmrmdirまたはmv(のためmv filename /dev/null)、または使用のACLは、パスワードの誰とダミーのユーザーを作成することもできますが、あなたは知っていて、各コマンドの別名sudo [user]、その後、あなたの友人が知らないことを、各コマンドのエイリアスを作ります。この方法では、友人rmがシステムを入力すると、パスワードの入力を求められます(ただし、パスワードを間違って推測すると失敗した試行がログに記録されます)rmalias

または、ホームディレクトリにアクセスできないゲストアカウントを作成することもできます。


あなたは正しい軌道に乗っているようです。あなたの答えは、どのようにセットアップ別名に上の工夫により改善し、できることsudo [user]dummy user
WinEunuuchs2Unix

0

rmをパスワードで保護する場合、解決策は、root権限を必要とするrmのラッパーを作成し、それ以外の場合はパスワードを要求することです。(注:coreutilsパッケージが更新または再インストールされると、このラッパーはなくなる可能性があります。)また、これはrmを保護するだけであり、ファイルを削除する方法は他にもたくさんあります。


ターミナルを開き、rootになります。次に、実行sudo mv /bin/rm /bin/rmoldして古いrmを別の場所に移動します。

次にsudo nano /bin/rm、ラッパーを作成するために実行します。

Nanoで、次を入力します。

#!/bin/bash
/bin/rmold "$@"
exit "$?"

次にCTRL、を押しながらXを押して終了します。Yプロンプトが表示されたらを押してから、ヒットENTERしてファイルを保存します。

最後に、これに適切な許可を与える必要があります。

sudo chmod a+x /bin/rm

そしてそこに行きます。


1
特別な理由がない限り、スクリプト変数は常に引用符で囲む必要があります:$@=> "$@"。ここでは、何を提案していることは、オリジナルと安全なのは非常に危険なバージョンですrm:という名前のファイルがある場合はどのようなfoo -i -r *-i無実のユーザーを保護するために追加されましたか)?
xhienne 16

@xhienneが言うように- "引用に加えて$@、ファイルを削除する方法はたくさんあるので、これはセキュリティをまったく提供しないことを読者に明確に警告することをお勧めします。1つはを呼び出すことrmoldですが、他の回答やコメントで説明されているように、他にもさまざまな方法があります。(それでも、これは問題がありますrmでしょう感じることはせずに呼ばれています-それは、現在のユーザーとしてファイルを削除しますようにsudo、通常のrm呼び出し側として動作します! -彼らは最近している場合が、ルートとしてそうsudo編、彼らが」勝ちました変更について知っていても、システムファイルを削除している可能性があることに注意してください。)
エリアカガン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.