有没有办法强制sudo
命令在每次使用时要求输入密码sudo rm /path/file
?
我想保护自己避免犯一些愚蠢的错误,这些错误是由于我在运行历史记录中的一些命令时注意力不集中而犯下的。
答案1
如其他答案所述,sudo
可以对缓存的凭据时间戳设置超时。这可以针对给定命令专门使用Defaults
来完成sudoers
:
Defaults!/bin/rm timestamp_timeout=0
一定要记住使用 进行编辑sudoers
。visudo
我建议使用 中的插入文件,/etc/sudoers.d
而不是/etc/sudoers
直接编辑。例如:
sudo visudo -f /etc/sudoers.d/always-ask-pass-for-rm
默认值
某些配置选项可以在运行时通过一行或多
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
请注意,它确实说你可以影响“以特定用户身份运行的命令”,但没有提到正在运行的命令由特定用户,因此可能无法仅针对您的用户进行限制。手册页中的示例不包括任何内容。
答案2
您可以使用k
选项来sudo
重置时间戳。
如果sudo -k
用作命令,它将立即使缓存的凭据过期/无效。
但是如果sudo -k
将 和某些命令一起使用,例如 ,sudo -k rm /some/file
即使某些凭据已被缓存,shell 也会要求输入密码。在这种情况下,新的凭据将不会被缓存。这意味着如果sudo
在此之后执行另一个带有 的命令,它将不会要求输入密码(如果凭据之前已被缓存)。
-k [命令]
单独使用时,sudo 的 -k(kill)选项会使用户的缓存凭据无效。下次运行 sudo 时将需要密码。此选项不需要密码,并被添加以允许用户从 .logout 文件中撤销 sudo 权限。并非所有安全策略都支持凭据缓存。
当与可能需要密码的命令或选项结合使用时,-k 选项将导致 sudo 忽略用户的缓存凭据。因此,sudo 将提示输入密码(如果安全策略需要密码),并且不会更新用户的缓存凭据。
如果您希望在执行特定命令时无需每次都sudo
输入密码,您可以在 中定义自定义函数。例如,从k
.bashrc
pa4080 的评论:
sudo() { if [[ $@ =~ ^rm ]]; then /usr/bin/sudo -k "$@"; else /usr/bin/sudo "$@"; fi; }
答案3
您可以将 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
答案4
rm
包装脚本
前段时间我为该rm
命令编写了一个包装脚本:
一些值得注意的特点:
- 每次调用时都必须使用加密密码,除非在或
rm
等批处理作业中使用。sudo apt-get
sudo update-grub
- 确保即使传递了相对路径,也不会删除顶级目录。
- 每次
rm
使用时都会记录到journalctl
和/var/log/syslog
。