这abc
是用户名,ak.sh
是我希望获得所有权限的文件。sudoers.tmp
我在顶部添加了以下行,如下所示sudo visudo
:
abc ALL=NOPASSWD: /home/abc/ak.sh
ak.sh 包含:
#!/bin/bash
sudo cat /dev/tty13
当我运行脚本文件时,它会要求我输入密码。
答案1
您需要实际使用sudo
sudoers 规则才能发挥作用。以下任一方式:
- 使用当前的 sudoers 规则并运行
sudo /home/abc/ak.sh
- 使用您提到的其他规则,但使用绝对路径,如下
cat
所示:并在脚本中
abc ALL=NOPASSWD: /bin/cat /dev/tty13
运行。sudo cat /dev/tty13
答案2
假设您的密码豁免方法与更改 sudoers 的工作方式相同,您需要使用 sudo 调用脚本,而不是脚本中的命令。或者更改 sudoers。换句话说:
sudo /home/abc/ak.sh
是您免于输入密码的,而不是cat
。您仍然必须使用sudo
,但如果您做对了,则不需要输入密码。
@muru
## ## # # # # # # # # # # # # # # # # # # #
为什么我认为对包含 cat 命令的脚本免除密码比对 cat 本身免除密码更好:
$ ls / | grep secrets
secrets_root_does_not_want_to_share_.txt
$ # hmmm, that looks interesting . . .
$ cat /secrets_root_does_not_want_to_share_.txt
cat: /secrets_root_does_not_want_to_share_.txt: Permission denied
$ # Curses! My evil plans are foiled because:
$ stat /secrets_root_does_not_want_to_share_.txt | grep 'Access: ('
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
$ # But wait! I'm pass exempted! So:
$ sudo cat /secrets_root_does_not_want_to_share_.txt
Oh, my. Sensitive stuff is exposed to ordinary users.
密码豁免sudo cat
并不像密码豁免那么危险,sudo echo
但在我看来,这是一种相当糟糕的做法。
## ## # # # # # # # # # # # # # # # # # # #
sudo cat
后来又添加了以下内容以解决 Muru 的怀疑,即当上次使用 sudo 时密码尚未过期与sudo cat
当 cat 已被密码豁免时是否等同:
我在 /etc/sudoers 中的通过豁免部分的开头添加了一条规则,如下所示:
me THIS_LOCAL_SYS=(ALL)NOPASSWD:/bin/cat, . . . [many other rules, separated by commas]
然后在一个新的终端中:
$ # Demonstrating that password is not un-expired from previous use of sudo:
$ sudo ls /root
[sudo] password for j:
$ stat /secrets_root_does_not_want_to_share_.txt|grep 'Access: ('
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
$ cat /secrets_root_does_not_want_to_share_.txt
cat: /secrets_root_does_not_want_to_share_.txt: Permission denied
$ # And rightly so, but with pass exempted sudo:
$ sudo cat /secrets_root_does_not_want_to_share_.txt
Oh, my. Sensitive stuff is exposed to ordinary users.
$
所以,是的,它们是等价的,正如它们应该的那样;是的,我确实了解 sudo 的工作原理 - 我只编辑过该文件几百次;是的,从安全角度来看,免除普通 /bin/cat 的密码,而不是包含 cat 的脚本,是一种不合理的做法。再说一次,这不是密码免除那样的灾难性愚蠢sudo echo
,sudo vi
但仍然是一个坏主意。