我有一个程序可以从网络接口读取和写入数据包,通常我会将自己添加到 sudoers 文件中并像这样运行该程序:
sudo ./bridge
但现在我需要多个用户来运行这个程序,但不给他们 sudo 权限,这样他们就可以像这样运行该程序:
./bridge
有谁知道我怎样才能做到这一点?我在 64 位平台上运行 Scientific Linux 6.1。
答案1
您可以限制在苏多尔斯允许使用 sudo 运行的命令。
编写一个小脚本./bridge
,调用sudo ./real-bridge
并授予用户通过 sudo 以 root 身份运行 ./real-bridge 的权利。
答案2
我不确定它是否适用于 eth 设备,但这个人可以使用 tun 设备。
$ tail -n1 /etc/udev/rules.d/20-kvm.rules
KERNEL=="tun", NAME="net/%k", GROUP="mygoodusers", MODE="0660"
请参阅该行上的 - GROUP="mygoodusers", MODE="0660"。当然,您必须将每个用户放入该组中。
udevadm control --reload-rules
但在重新启动之前,您必须手动 chmod/chown。
答案3
添加 sudo 规则以允许该用户运行您的脚本。运行visudo
并将如下内容添加到sudoers
文件中:
Defaults!/path/to/bridge env_reset
alice, bill ALL = (root) /path/to/bridge
请注意,他允许用户将任何参数传递给程序/path/to/bridge
。添加""
在行尾以禁止传递任何参数。
为了更轻松地进行用户管理,您可能更愿意定义一组有权控制网桥的用户。替换alice, bill
为组名称%bridgers
。bridgers
在程序内部bridge
,$SUDO_UID
是调用 的用户的用户 ID sudo
。如果程序要求该用户位于变量中USER
,请编写一个小的包装 shell 脚本来设置USER=$SUDO_UID
.