web-dev-qa-db-ja.com

特定のコマンドが使用されるたびに「Sudo」にパスワードを要求するように強制するにはどうすればよいですか?

Sudo rm /path/fileを使用するたびにSudoコマンドに毎回パスワードを要求する方法はありますか?

私は歴史からいくつかのコマンドを実行しているときに注意力が低いために犯された愚かな間違いから自分を守りたいのです。

19
pa4080

他の回答で述べたように、Sudoは、キャッシュされた資格情報のタイムスタンプにタイムアウトを設定できます。これは、Defaultssudoersを使用して、特定のコマンドに対して特に実行できます。

Defaults!/bin/rm timestamp_timeout=0

常にsudoersvisudoで編集することを忘れないでください。 /etc/sudoers.dを直接編集するのではなく、/etc/sudoersのドロップインファイルをお勧めします。例えば:

Sudo visudo -f /etc/sudoers.d/always-ask-pass-for-rm

From sudoersのマンページ

デフォルト

特定の構成オプションは、1つ以上のDefault_Entry行を介して実行時にデフォルト値から変更される場合があります。これらは、任意のホスト上のすべてのユーザー、特定のホスト上のすべてのユーザー、特定のユーザー、特定のコマンド、または特定のユーザーとして実行されているコマンドに影響を与える可能性があります。コマンドごとのエントリにコマンドライン引数が含まれていない場合があることに注意してください。引数を指定する必要がある場合は、Cmnd_Aliasを定義し、代わりにそれを参照してください。

Default_Type ::= 'Defaults' |
                 'Defaults' '@' Host_List |
                 'Defaults' ':' User_List |
                 'Defaults' '!' Cmnd_List |
                 'Defaults' '>' Runas_List

Default_Entry ::= Default_Type Parameter_List

Parameter_List ::= Parameter |
                   Parameter ',' Parameter_List

Parameter ::= Parameter '=' Value |
              Parameter '+=' Value |
              Parameter '-=' Value |
              '!'* Parameter

「特定のユーザーとして実行されているコマンド」に影響を与えることができると記載されていますが、特定のユーザーによって実行されているコマンドについては言及されていないことに注意してください。ユーザーのみに制限することはできない場合があります。 マンページの例 には何も含まれていません。

24
sudo mcsudoface

kオプションをSudoとともに使用して、タイムスタンプをリセットできます。

Sudo -kをコマンドとして使用すると、キャッシュされた資格情報がすぐに期限切れ/無効になります。

ただし、Sudo -kSudo -k rm /some/fileなどのコマンドで使用すると、一部の資格情報が既にキャッシュされている場合でも、シェルはパスワードを要求します。この場合、新しい資格情報はキャッシュされません。つまり、その後にSudoを含む別のコマンドが実行されても、パスワードは要求されません(資格情報が以前にキャッシュされている場合)。

Sudoのマンページ から:

-k [コマンド]

単独で使用した場合、Sudoの-k(kill)オプションは、ユーザーのキャッシュされた資格情報を無効にします。次回Sudoを実行するときには、パスワードが必要になります。このオプションはパスワードを必要とせず、ユーザーが.logoutファイルからSudo権限を取り消すことができるように追加されました。すべてのセキュリティポリシーが資格情報のキャッシュをサポートしているわけではありません。

パスワードを必要とする可能性のあるコマンドまたはオプションと組み合わせて使用​​した場合、-kオプションを指定すると、Sudoはユーザーのキャッシュされた資格情報を無視します。その結果、Sudoはパスワードを要求し(セキュリティポリシーでパスワードが必要な場合)、ユーザーのキャッシュされた資格情報を更新しません。

Sudokを毎回使用せずに特定のコマンドのパスワードを要求するようにする場合は、.bashrcでカスタム関数を定義できます。たとえば、 pa4080のコメント から:

Sudo() { if [[ $@ =~ ^rm ]]; then /usr/bin/Sudo -k "$@"; else /usr/bin/Sudo "$@"; fi; }
13
Kulfy

常にパスワードを要求するようにSudoを設定できます。


$ Sudo cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset, timestamp_timeout=120, pwfeedback
#Defaults   mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

私の構成では、パスワードを再度要求する前に、Sudoタイムアウトを2時間(120分)に設定しています。 0に設定すると、Sudoを使用するたびにパスワードが必要になります

3

rmラッパースクリプト

先ほど、rmコマンドのラッパースクリプトを書きました。

注目すべき機能のいくつか:

  • 暗号化されたパスワードは、Sudo apt-getSudo update-grubなどのバッチジョブ内で使用されていない限り、rmが呼び出されるたびに使用する必要があります。
  • 相対パスが渡された場合でも、最上位ディレクトリが削除されないようにしてください。
  • rmが使用されるたびに、journalctlおよび/var/log/syslogに記録されます。
2