/etc/network/interfaces
我正在尝试以没有 root 权限的用户身份进行写入。
想要写入此内容的原因是为了允许用户设置静态 IP,因为我正在运行仅命令行的服务器。我需要授予用户什么权限etc/sudoers
?
我不希望用户拥有完全的 root 权限。只想拥有编辑此文件的能力。
答案1
不要使用sudo
,只需在文件上设置 ACL:
$ ls -l /var/tmp/foo
-rw-rw---- 1 root root 4 Jul 31 15:26 /var/tmp/foo
$ sudo setfacl -m u:white:rw /var/tmp/foo
$ whoami
white
$ cat /var/tmp/foo
bar
现在该文件归“root”所有,但用户“white”可以对其进行读写。用户“white”现在可以使用他/她最喜欢的编辑器来编辑该文件。
答案2
准备一个脚本来执行您想要的编辑,例如一个使用静态 IP 写入正确文件的脚本(此脚本中的内容超出了本问答的范围)。我们称此脚本为/root/set_static_ip
。(1)
编辑/etc/sudoers
(2)(用visudo
更好,它检查健全性,它是非常困难恢复具有无效 sudoers 文件的系统,即使不可能的从远程 (3)),并添加
user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip
现在用户无需输入任何密码即可使用sudo /root/set_static_ip
,并且脚本将以所有权限运行;不允许执行任何其他命令。
如果您希望用户用他们想要的任何内容替换文件,则脚本可以简单地称为(称为/root/unsafe-overwrite-interface
)
#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces
exit 0
...然后告诉用户编辑/tmp/temp-iface.txt
然后运行sudo /root/unsafe-overwrite-interface
--- 按照上面指定的方式在 sudoers 中启用它。或者你可以将用户添加到 ACL 列表并授予他们对特定文件的写权限。
但请注意,如果你不检查文件内容的安全性,就会造成严重破坏将要不管是有意还是无意,都会发生。
脚注:
(1)此脚本必须尽可能安全。检查输入等。它将以完全权限执行。
(2)在现代 sudo 安装中,您可以将文件添加到/etc/sudoers.d/
更好的目录中---将在更新后保留下来。
(3)当我修改 sudoers 机制时,我通常会保持一个具有 root 会话的终端打开(sudo -i
),并随时准备进行备份。