有没有办法强制
我想保护自己免受因为注意力不集中而导致的低级错误,尤其是在运行一些历史命令时。
sudo
命令在我使用sudo rm /path/file
时每次都要求输入密码?我想保护自己免受因为注意力不集中而导致的低级错误,尤其是在运行一些历史命令时。
sudo
命令在我使用sudo rm /path/file
时每次都要求输入密码?sudo
可以设置缓存凭据时间戳的超时时间。可以使用 sudoers
中的 Defaults
为特定命令执行此操作:Defaults!/bin/rm timestamp_timeout=0
永远记得使用visudo
编辑sudoers
。我建议在/etc/sudoers.d
中使用一个插入文件,而不是直接编辑/etc/sudoers
。例如:
sudo visudo -f /etc/sudoers.d/always-ask-pass-for-rm
sudoers
的manpage中:请注意,它确实提到了您可以影响“以特定用户身份运行的命令”,但没有提及由特定用户运行的命令,因此可能无法仅限制为您的用户。manpage中的示例中没有包含相关内容。Defaults
Certain configuration options may be changed from their default values at run-time via one or more
Default_Entry
lines. These may affect all users on any host, all users on a specific host, a specific user, a specific command, or commands being run as a specific user. Note that per-command entries may not include command line arguments. If you need to specify arguments, define aCmnd_Alias
and reference that instead.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
ln -s /bin/rm rmdo; sudo ./rmdo <file>
- user986805sudo
运行一个shell内置命令? - Eliah Kagansudo alias
?这可能听起来有点奇怪,但我只是好奇。 - Kulfysudo
只能运行外部命令。在不寻常的情况下,除非你也有一个名为alias
的外部命令,否则sudo alias
会报错“sudo: alias: command not found”。一些shell(如Bash)具有一些内置命令,它们会覆盖外部命令。如果尝试使用sudo
运行它们,实际上是运行同名的外部命令。例如,sudo kill
、sudo printf
和sudo echo
都是运行外部命令。请参阅为什么`sudo cd /var/named`无法工作?、为什么有/bin/echo,我为什么要使用它?。 - Eliah Kagan你可以使用sudo
命令的-k
选项来重置时间戳。
如果将sudo -k
作为一个命令使用,它会立即过期/失效缓存的凭据。
但是,如果将sudo -k
与某个命令一起使用,例如sudo -k rm /some/file
,则即使已经缓存了某些凭据,shell也会要求输入密码。在这种情况下,新的凭据不会被缓存。这意味着如果之后执行另一个带有sudo
的命令,它将不会要求输入密码(如果之前已经缓存了凭据)。
来自sudo的手册页:
-k [命令] 当单独使用时,sudo的-k(kill)选项会使用户的缓存凭据失效。下次运行sudo时将需要输入密码。此选项不需要密码,并且添加了该选项以允许用户从.logout文件中撤销sudo权限。并非所有安全策略都支持凭证缓存。sudo() { if [[ $@ =~ ^rm ]]; then /usr/bin/sudo -k "$@"; else /usr/bin/sudo "$@"; fi; }
$ 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"
0
将要求每次使用sudo
时输入密码。rm
包装脚本不久前,我为rm
命令编写了一个包装脚本:
一些值得注意的特点:
rm
时,必须使用加密密码,除非它在类似sudo apt-get
或sudo update-grub
的批处理作业中使用。rm
时,都会将其记录到journalctl
和/var/log/syslog
中。
sudo
都会要求输入密码。 - Pilot6rm
命令时强制要求输入sudo
密码。 - pa4080k
选项是什么意思? - pa4080.bashrc
中添加了以下函数:function sudo() { if [[ $@ =~ ^rm ]]; then /usr/bin/sudo -k $@; else /usr/bin/sudo $@; fi; }
。它运行得很好。一旦问题重新开放,我会请你写一个答案 :) - pa4080