友だちは端末を使用してファイルを削除し続けます。 rm
コマンドのパスワードの作成方法を説明してください。
rm
コマンド自体にこのようなパスワードを設定する簡単な方法はありません。おそらく、apt-get
のようなものを壊すコードハッキングが多くなければ、パッケージをインストールしてファイルを削除し、パスワードを千回入力するか、それを必要とする人にコマンドへのアクセスを妨害する可能性があります(あなたのように、自分のファイルを削除するため)。複数のユーザーアカウントと複数のアクセス許可セットを用意し、ホームディレクトリなどのデータの異なるセクションへのアクセスを制限して、アクセスできないようにすることで、これをソートできます。
(他のオプションは、各ユーザーの個別のユーザーアカウントです。次に、 Videonauth によって投稿された other answer で詳しく説明されているように、アクセスコントロールリストです。)
ここに中心的な問題があります-あなたはあなたの友人にあなたのシステムを使わせています。これにはnumerousセキュリティの意味があります-「ボックスに物理的にアクセスできる人は誰でもシステムを制御してタスクを実行できる」というのがITセキュリティマントラです。そのため、信頼できる承認された担当者以外は物理システムアクセスを「共有」しません。
これを行う唯一のtruly正気な方法は、友人にyourコンピュータへのアクセスを与えず、「専用」を与えることですゲスト」システム」を使用できますが、ファイルについてはあまり気にしません。これは、ファイルを安全に保つための最も「安全な」方法です。
もちろん、それがオプションでない場合、唯一の本当に安全なオプションは、ユーザーごとに異なるホームフォルダを持つ複数のユーザーアカウントを構成し、自分のホームディレクトリまたは他のユーザーのホームへのアクセスを許可しないことですディレクトリ。そして、あなたがホームディレクトリに触れたくないものすべてを保持し、Sudo
アクセス権、root
パスワードを与えたり、パスワードを共有したりしないでください。
これはあなたがこれを行う方法です:
私の名前が「Foo」で、友人のユーザー「Bar」にシステムを使用させ、ファイルにはアクセスさせたくないとします。最初のステップは、ホームディレクトリへの私以外のユーザーへのアクセスを拒否することです。これは、他のユーザーがあなたのファイルをnot削除することを許可することですディレクトリ:
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)
thirdステップは、ホームディレクトリも制限して、だれもファイルをこじ開けることができないようにすることです。これは物事を平等にするだけです。
Sudo chmod 750 /home/Bar
手を洗ってよく洗い流し、システムにいる多くのユーザーに対してこれらの手順を繰り返します。彼らはあなたのファイルにアクセスできず、あなたに管理者権限を与えないため、Sudo
にアクセスしようとしない限りファイルを削除できません-あなたはこれを許可しないので、彼らはあなたのものに触れることはできません。そして、彼らはあなたのファイルを見ることができず、スーパーユーザーにならなければ、ここでは起こりません。
常にこれを覚えておいてください:誰かにマシンへの物理的アクセス、または一般的なアクセスを与えることで、あなたはファイルとデータを危険にさらすことになります。これは、ITセキュリティの世界で広く受け入れられている事実であり、引き続き真実です。友人にコンピュータへのアクセスを許可すると、常にデータが危険にさらされるので、自分のシステムに干渉するか、yourマシンへのアクセスを許可しないでください。 。
ディスク暗号化に関する注意事項
ディスクの暗号化はサードパーティからデータを保護するのに適していますが、制限があります。
ディスク暗号化はこれらの問題を解決しませんが、脅威アクターに頭痛の種を追加します。悪意のある人は、暗号化されているとあきらめるか、あなたを拷問するかもしれません(キューの義務 XKCDセキュリティコミックストリップ )。
したがって、システムが暗号化されているが、他のユーザーに使用を許可している場合、ユーザーは復号化するためのパスワードを持っているか、ラップトップを復号化したままにして、SSHで接続したり物理アクセスしたりできます。どちらの場合も、それは悪いことです。
ただし、システムが暗号化されていない場合、このセクションは関係ありません。
ファイルを使用せずにファイルを削除する簡単な方法があるため、これは実際にはrm
コマンドに関するものではないかもしれません。友達が意図せずにrm
コマンドを誤用しているという問題がある場合、そのコマンドの使用を明確に制限したり、別の方法で動作させたりする解決策が役立つ場合があります。対照的に、問題が友人が意図しない方法でデータを意図的に処理している場合、 実際のセキュリティ対策を実装する必要があります 、およびrm
コマンド自体に焦点を当てたソリューションはありません(またはコマンドの個別のセット)は、安全を保ちます。
ファイルを削除したくないことを友人が知っていると仮定すると、2つの可能性があります。
彼らは意図的にそれをしている可能性があります。このシナリオでは、あなたの友人はあなたのファイルを故意に削除しており、あなたはそれらを信用することさえできませんtryユーザーがコンピューターを使用する際にユーザーがデータをどのように扱うかについての要望に応えるため。この問題の唯一の解決策は、 実際の効果的なセキュリティ対策を使用する、トーマス・ワードが詳細に説明したように です。多くの場合、このような最善の手段は、コンピューターを使用しないようにすることです。ただし、独自のユーザーアカウントを使用することで、ある程度の保護を提供できます。
彼らは誤ってそれを行っている可能性があります。このシナリオでは、あなたの友人は非常に事故を起こしやすく、彼らは望んでいなかったrm
コマンドを実行し続けます。彼らはあなたとあなたのデータを尊重して扱いたいと思っていますが、間違ったコマンドを実行したり、間違ったファイルを削除したりするなど、実際にはそうするのは本当に悪いです。これが起こっていると信じるのは良いことですが、停止するように指示した後もデータを削除し続ける人々が悪意なく動作しているとは思わないように注意します。
さらに、意図が良い場合でも、ユーザーアカウントを個別に指定することは、コンピューターの使用を許可しないことを除いて、ファイルを削除しないようにする最も確実な方法です。
状況が本当に#2である場合-あなたの友人はtryingではなく、あなたのファイルを削除するだけですaccidentallyファイルを削除し、彼らが誤ってそれらを削除する唯一の方法少数のコマンド(rm
など)の不注意による誤用が原因で、正しく使用するのに特に問題があります。- Videonauthのテクニック 回答が何らかの有用な場合があります。 rm
コマンドはmanyファイルを削除する簡単な方法の1つにすぎないため 。詳細は以下をご覧ください。
「私の状況は基本的に、自分のコンピューターを使用する他の人ではなく、rm
を誤って使用しているのと同じですか?」と自問することをお勧めします。
答えがnoの場合、これは情報セキュリティの問題であり、友人がユーザーアカウントを使用できないようにする必要があります。答えがyesの場合、yoがrm
を誤用している場合と同じアプローチを使用できます。
rm file
を実行するだけでファイルを削除することが難しくなります誤ってそれ自体では、それ以上のアクションなしでは、すぐにfile
を削除しません。 Videonauthの答え は、これに対する1つのアプローチを提供します。この答えでは、別のものを提示します。しかし、あなたの友人が何も悪いことをしようとしていない場合でも、あなたはまだ彼らが彼ら自身の別々のユーザーアカウントを使用することを考慮するべきです。これでも問題は解決します-データを意図的な破壊から保護するのと同じセキュリティ対策が、意図しない破壊からもデータを保護します。悪意を持っていなくても、誰かがやりたくないことをし続けていると、そのことを控えることを信頼することはできません。
rm
プロンプトを作成すると、いくつかの間違いを防ぐのに役立ちます。誤ってrm
でファイルを削除するのを避けるために、rm
を Shellエイリアス にすると、実際にrm -i
が実行されます。 -i
フラグをrm
に渡すと、各ファイルを削除する前にユーザーにプロンプトが表示されます( man rm
を参照)。
alias rm='rm -i'
または.bash_aliases
ファイルに.bashrc
を追加することで、これを(ユーザーアカウントに対して)行うことができます。 この質問 および その質問 を参照してください。これは、新しく開いたbashシェルで有効になります。
これは実際のセキュリティなしを提供し、間違いを防ぐのに万全ではありません。
/bin/rm
の実行やエイリアス解除(unalias rm
)など、さまざまな方法でエイリアスをバイパスできます。rm
は-i
では実行されません。rm
を必要としないテクニックを使用してファイルを削除することもできます( Videonauthのアプローチ -以下を参照)。しかし、実際のセキュリティが必要ない場合(上記を参照)、これが道のりかもしれません。友人がシステムで提供されるrm
コマンドを使用できないようにするアプローチと比較して:
rm
をrm -i
にエイリアス化することは、ミスを防止するのにあまり効果的ではありません-ファイルを削除するために他の手法を使用するまでは。その時点で、おそらく rm
(または削除する他の無数のコマンドのいずれかを使用するため、何も間違ったことをしようとしていない場合でも、unlink
を使用しないようにすることは完全に無効です。ファイル)平等に平等。
一方、エイリアスの展開は特定の状況(大まかに言えば、シェルの通常のインタラクティブな使用)でのみ発生するため、友達は実際にプロンプトが表示されないときにプロンプトが表示されると考えるかもしれません(コマンドがたとえば、スクリプト、または別のシェルから発行されます)。 Videonauthの方法 にはこの問題はありません。これは、alias rm='rm -i'
に対するこのメソッドの客観的な利点です。
スクリプトを実行すると、エイリアスを使用するように意図的に記述されていない限り、エイリアスはスクリプト内で展開されません。これは、rm
をrm -i
にエイリアス化しても、何かが壊れる可能性が非常に低いことを意味します。これは、alias rm='rm -i'
の客観的な利点です。
rm
は、他のまったく普通のプログラムではできなかったことは何もできません。rm
に関して特別なことは何もありません。これはファイルを削除する便利で自己文書化された方法であるため、ファイルへのアクセスを制限すると、ファイルに依存する多数のスクリプトが破損する危険があります。しかし、それはファイルを削除する唯一の方法からはほど遠い-それは単なる普通のプログラムです。
一部のコマンドは、制限された(- root )ユーザーが実行しないと実行できないタスクを実行します。たとえば、 Sudo
を使用すると、許可されていることを確認した後、別のユーザーとしてプログラムを実行できます。 passwd
ユーザーのパスワードが保存されているデータベースを編集しますが、自分のパスワードのみを変更できます(rootでない限り、誰のパスワードも変更できます)。
/usr/bin/Sudo
と/usr/bin/passwd
は、ls -l
の実行時に左端の列に表示されるs
で示されるように、 setuidビット が設定されているため、これを実行できます。
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
であり、/usr/bin/passwd
と/usr/bin/so
には-rwsr-xr-x
があります。これにより、誰がpasswd
またはSudo
を実行しても、rootは実行可能ファイルの所有者であるため、実際にはrootユーザーとして実行されます。 (setgidビットもあります。このビットを設定すると、実行可能ファイルは、呼び出し側ではなくグループ所有者のグループIDで実行されます。)
まだ発見されていない(または発見されているがまだパッチが適用されていない)セキュリティの脆弱性を除き、Sudo
およびpasswd
は、呼び出し元がすべきことだけを行うことができるように非常に慎重に記述されているため安全です行うことが許可されます。
/bin/rm
はこの方法では機能しません。必要がないため、setuidではありません。 ディレクトリのアクセス許可 (および ときどきファイルのアクセス許可 )ユーザーが削除できるファイルを制御します。これを行うためにrootになる必要はありません。完全に明確にするために、rm
にsetuidビットを設定しないでください。セキュリティへの影響は悲惨なものになります。それ以降、rm
を実行しているユーザーに関係なく、rootが実行したかのようです。 (Sudo
やpasswd
などのユーティリティは、実際に実行しているユーザーを確認し、実行する前に何かが許可されていることを確認します。rm
はそのようなことを行いません。)
実行可能ファイルにsetuid(またはsetgid)ビットが設定されているかどうかを確認すると、実行できるユーザーを制限することでセキュリティが向上する可能性があるかどうかがわかります。 setuid(またはsetgid)でない実行可能ファイルには特別なステータスはありません。誰でも簡単にコピーしてコピーを実行したり、別のマシンから自分のコピーを持ってきたり、同じことを行うスクリプトやプログラムを書いたり、それを行う別のプログラム。
rm
を使用せずにファイルを削除するUbuntuでrm
なしでファイルを削除する明白な方法は、グラフィカルファイルブラウザー(UnityまたはGNOME Shellを使用している場合はNautilus)でその場所に移動し、ファイルを削除することです。 rm
を使用せずに、ターミナルからファイルを削除するために使用できるコマンドも多数あります。
たとえば、現在のディレクトリでfoo.txt
というファイルを削除するには、Ubuntuですぐに使用でき、rm
へのアクセスを必要としない次のコマンドを使用します。 (確かに、/bin/rm
を削除した後、標準システムユーティリティのみでインストールされた 16.04最小システム でテストしました。)
unlink foo.txt
busybox rm foo.txt
Perl -e 'unlink("foo.txt")'
python3 -c 'import os; os.remove("foo.txt")'
(古いリリースではpython3
の代わりにpython
)もちろん、そのリストは完全なものではありません。そのようなコマンドの完全なリストは不可能です。ファイル削除の防止は、個別のユーザーアカウントとファイルおよびディレクトリのアクセス許可が存在することの1つです。彼らはそれを防ぐために非常にうまく機能します。対照的に、rm
コマンドを変更したり(パスワードを必要とする、またはその他の方法で)、rm
へのアクセスを制限しても、まったく防止できません。
/bin/rm
コマンドのアクセス許可は、Sudoアクセスなしで実行されないようにする次の行を使用して変更できます。
Sudo chmod 750 /bin/rm
これにより、システムが提供するrm
コマンドを使用できなくなります。他の方法でファイルを削除することを妨げないことに注意してください。
また、ディレクトリを削除する一般的な方法であるrmdir
コマンドを使用しないように、実行可能パスに同じ方法でアクセス許可を設定できます。
Sudo chmod 750 /bin/rmdir
同様に、このコマンドもSudo権限でしか使用できないことに注意してください。
気に入らない場合や他の問題が発生した場合に元に戻すには、chmod
に755
を使用します
@muruが指摘したように、上記は非常に粗雑なソリューションであり、rootアカウントで実行されていないシステムサービスを破壊する可能性さえあります。したがって、ここで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>
は、変更する内容に応じて実際のユーザー名またはグループ名をホルトできます。全体的な変更を設定するには、空のままにします。-
を配置します。読み取り許可の場合はr
、書き込み許可の場合はw
、x
実行用。これは非常に簡単な答えであり、パスワードを入力せずにrmコマンドを使用して誰かを何気なく停止します。 これは安全な解決策ではありませんそして、他の回答の代替案のいくつかを暗示する必要があります。
ただし、エイリアスを使用して、rmコマンドの動作を変更することもできます。試してください:
alias rm="Sudo -l >/dev/null && rm"
これは、誰かがrmコマンドを入力すると、Sudo -lコマンドを実行します。このコマンドは、ユーザーにパスワードの入力を強制します。正しい場合は特権をリストし(この出力は破棄します)、ステータス0で終了します。間違った場合はエラーで存在します。
次に、Sudoコマンドの後に「&&」を付けます。これにより、次のコマンドが終了します。この場合、前のコマンドがステータス0で終了した場合のみ「rm」です。
これを永続的にするには、~/.bashrc
にaliasコマンドを含めます。
これは非常に簡単に無効になることに注意してください(たとえば、単に/bin/rm
と入力できます)。
要求されたOPのようにrm
をパスワードで保護するスクリプトを作成しましたが、誤って削除しないように編集も加えました。
Edit: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
パスワードがWE2Uでない限り、スクリプトを初めて実行すると「無効なパスワード」が表示されます入力したパスワードの暗号化キーが表示されます。この暗号化キーをコピーして、ターミナルからスクリプトに貼り付けます。次に、端末で暗号化キーを表示したエコーのある行をコメント化します。
パス/usr/local/bin
は/bin
よりもリスト上で高いため、コマンドrm
が呼び出されます。有効なパスワードを取得すると、/bin/rm
を呼び出して実際の削除を行います。
Thomas Wardが別の答えで指摘したように、Sudo apt-get install ...
を実行すると、パスワードを何千回も要求される可能性があります。このスクリプトは、Sudo
が使用されているかどうかを確認し、パスワードを要求しません。さらに、rm
がGUIアプリケーション内から呼び出される場合、パスワードは不要です。
スクリプトは、logger
が端末を使用して手動で呼び出されるたびに、rm
を呼び出して記録します。コマンドの使用は/var/log/syslog
に記録されます。
別の方法は、root以外のユーザーがアクセスできないディレクトリに重要なファイルのバックアップコピーを作成することです。 rsync
またはunison
を使用してそれらを自動的に同期できます。バックアップ先へのパス内の少なくとも1つのディレクトリがルートおよびモード700によって所有されていることを確認してください。ただし、ファイル。ゲストユーザーを作成して使用する方が安全です。ただし、コンピューターを提供したり、無人で放置する前に、常にロックまたはログアウトすることを忘れないでください。
あなたが探している質問に対する直接的な答えではなく、
友人がrm
コマンドを使用してファイルを削除している場合、友人は無能であるか、ジャークであるか、彼らが BOFH 離れないように教えようとしているログインして無人のセッション。すべての場合において、解決策は同じです:セッションをログインしたまま放置しないでください。
これには、アップグレードまたは新しいシステムを取得するたびにシステムに特別な変更を加えることを覚えておく必要がないという利点があり、また、予想どおりに動作するコマンドに依存するスクリプトやその他の使用が予測できない方法で失敗することを防ぎます。
また、「友人」が次のステップに進むのを止めるという利点もあります。また、単純な削除では目的の処理が行われないことがわかったときにファイルを/ dev/nullに移動することにした場合、mv
コマンドを「パスワードで保護」する必要がありますか?このようなゲームをプレイしているとき、勝つ唯一の方法はプレイしないことです。
私が計画したのと同じような可能性があります。ファイルサーバーで、写真のメインストレージが書き込み可能で、家族の誰かが(技術的ではない、または偶然に)何かを削除する可能性がある場合、誤ってディレクトリを移動するGUIにドラッグするか、元の名前を変更せずに編集バージョンで上書きする。
他のすべてのユーザーにアクセス許可を書き込み不可にすることなく、それに対して保護できることに気付きました。 ZFSは定期的なスナップショットを作成するため、偶発的な削除や上書きを元に戻すことができます。 (バックアップとは異なり、スナップショットは軽量でコピーオンライトであるため、ストレージの使用量を増やすことはありません。)
ZFSはFreeBSDにネイティブです。 Linuxにはスナップショットもあるbtrfsがあります。
Rmをパスワードで保護する場合、解決策は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
そしてそこに行きます。