我想允许通过 sudoers 编辑特定目录下的任何文件(递归)。
以下均不起作用(Debian 9 sudo)
ops ALL=(root) NOPASSWD: sudoedit /opt/myapps/
ops ALL=(root) NOPASSWD: sudoedit /opt/myapps/*
ops ALL=(root) NOPASSWD: sudoedit /opt/myapps/**
ops ALL=(root) NOPASSWD: sudoedit /opt/myapps/**/*
正确的语法是什么?
答案1
您可以授予用户访问 sudo 组的权限:
以下是我在 Ubuntu 18.04 上设置非 root 用户的方法:
groupadd -g 999 foobaz && useradd -u 999 -g foobaz -G sudo -m -s /bin/bash foobaz &&
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 "foobaz ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers &&
echo "Enabled passwordless access to the sudo group for the foobaz user!" &&
echo "foobaz user:"; su - foobaz -c id
上述代码会发生什么情况:
- 用户和组
foobaz
已创建。 - 该用户
foobaz
被添加到foobaz
和sudo
组中。 - 和
uid
被gid
设置为 的值999
。 - 主目录设置为
/home/foobaz
。 - 外壳设置为
/bin/bash
。 - 该
sed
命令对文件进行内联更新,/etc/sudoers
以允许foobaz
用户root
无密码访问该sudo
组。 - 该
sed
命令禁用#includedir
允许子目录中的任何文件覆盖这些内联更新的指令。
然后您就可以运行su foobaz
、、等sudo -s
。exit
如果你想要简短版本,只需运行:
echo "foobaz ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
请注意,这将附加到现有/etc/sudoers
文件而不是正确更新内容。