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

Kei*_*ith 8 permissions user-management

我正在尝试/etc/network/interfaces使用没有 root 权限的用户写入。

想要写入此内容的原因是允许用户设置静态 IP,因为我正在运行仅命令行服务器。我需要给用户什么权限etc/sudoers

我不希望用户拥有完全的 root 权限。只是能够编辑这个文件。

Jef*_*ite 25

而不是使用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
Run Code Online (Sandbox Code Playgroud)

现在该文件归“root”所有,但用户“white”可以对其进行读写。用户“white”现在可以使用他/她最喜欢的编辑器来编辑文件。


Rma*_*ano 8

准备一个执行您想要的编辑的脚本,例如一个使用静态 IP 编写正确文件的脚本(在此脚本中放入的内容超出了本问答的范围)。让我们调用这个脚本/root/set_static_ip。(1)

编辑/etc/sudoers(2)(使用visudo更好,它检查健全性,使用无效的sudoers文件恢复系统非常困难,甚至不可能从远程(3)),并添加

user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip 
Run Code Online (Sandbox Code Playgroud)

现在该用户sudo /root/set_static_ip 无需任何密码即可使用,脚本将以所有权限运行;不允许使用其他命令。

如果您希望用户只用他们想要的任何内容替换文件,脚本可以简单地是(调用它/root/unsafe-overwrite-interface

#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces 
exit 0
Run Code Online (Sandbox Code Playgroud)

...然后您告诉用户编辑/tmp/temp-iface.txt然后运行sudo /root/unsafe-overwrite-interface--- 在上面指定的 sudoers 中启用它。或者您可以将用户添加到 ACL 列表并授予他们对特定文件的写权限

但请注意,如果您不检查文件内容以确保安全,就会发生有意或无意的破坏。


脚注

(1) 这个脚本必须尽可能安全。检查输入等。它将以完全权限执行。

(2) 在现代 sudo 安装中,您可以将一个文件添加到/etc/sudoers.d/更好的目录中 --- 将在更新中幸存下来。

(3)sudo -i当我修改 sudoers 机制时,我通常会打开一个带有 root 会话的终端 ( ),并且备份很方便。

  • 关于`/etc/sudoers`,它是`visudo`,而不是`sudoedit`。 (3认同)