## ## # # # # # # # # # # # # # # # # # # #

## ## # # # # # # # # # # # # # # # # # # #

abc是用户名,ak.sh是我希望获得所有权限的文件。sudoers.tmp我在顶部添加了以下行,如下所示sudo visudo

abc ALL=NOPASSWD: /home/abc/ak.sh

ak.sh 包含:

#!/bin/bash
sudo cat /dev/tty13

当我运行脚本文件时,它会要求我输入密码。

答案1

您需要实际使用sudosudoers 规则才能发挥作用。以下任一方式:

  1. 使用当前的 sudoers 规则并运行sudo /home/abc/ak.sh
  2. 使用您提到的其他规则,但使用绝对路径,如下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 echosudo vi但仍然是一个坏主意。

相关内容