无需密码即可对任何用户执行 sudo

无需密码即可对任何用户执行 sudo

如果sudo可以配置为不需要密码比如:

bob ALL=NOPASSWD: ALL

那么如何配置 sudo 以便能够对任何用户执行 sudo 而不需要密码?

以便

sudo -u domainnameuser.com mkdir www

适用于 sudo 用户,无需提示输入 [sudo] 密码?

是否可以允许此功能而不在 /etc/sudoers.d 中为每个用户明确启用它,而只允许切换到所有用户并使用所有命令?

答案1

创建这样的规则:

ALL ALL=(ALL:ALL) NOPASSWD: /bin/mkdir www ""

其内容类似于:“允许任何域上的任何用户以任何用户:组的身份运行精确命令“mkdir www”,而无需输入密码(仅使用/bin/mkdir,而不是其他命令mkdir)。结尾的引号表示sudo不允许任何进一步的参数。

(规则按顺序确定,最后匹配的规则生效。如果在此规则之后还有另一条规则涵盖相同的命令(例如 ALL),则该规则将生效。我在自己的配置中遇到了问题,当时我在之后指定%sudo ALL=(ALL:ALL) ALL。由于此规则与情况相符,但需要密码,因此会要求输入密码。)

确实,这不是做这种事情的方法。您的部分描述暗示您以一种奇怪的方式设置了一些东西。我不会深入讨论这个问题,因为它超出了范围,但为了实现您想要的目标并获得更大的灵活性,可能有更好的方法。您似乎想让用户创建具有特定名称的子目录,该子目录由父目录的所有者拥有。相反,创建一个脚本来执行您想要的操作(查找当前目录,确定其所有者和组,www在此处创建一个目录,chmod将新目录分配给确定的用户和组),并在配置中允许该脚本由 root 运行而无需密码sudo。这样做意味着用户只需导航到目录sudo create-www或其他什么。您还可以在脚本中配置其他规则,例如仅允许www在某些目录中创建的规则。

答案2

下面是我使用基础镜像设置非 root 用户的方法ubuntu:18.04

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id

上述代码会发生什么情况:

  • 用户和组foo已创建。
  • 该用户foo被添加到foosudo组中。
  • uidgid设置为 的值999
  • 主目录设置为/home/foo
  • 外壳设置为/bin/bash
  • sed命令对文件进行内联更新,/etc/sudoers以允许foo用户root无密码访问该sudo组。
  • sed命令禁用#includedir允许子目录中的任何文件覆盖这些内联更新的指令。

如果 Docker 不需要它,可以通过删除&&命令后的尾部斜杠来非交互地完成此操作:

groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo &&
sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' &&
sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' &&
sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' &&
echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers &&
echo "Customized the sudoers file for passwordless access to the foo user!" &&
echo "foo user:";  su - foo -c id

相关内容