我如何允许用户编辑通常仅限于 root 的特定系统文件?

我如何允许用户编辑通常仅限于 root 的特定系统文件?

/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),并随时准备进行备份。

相关内容