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”现在可以使用他/她最喜欢的编辑器来编辑文件。
准备一个执行您想要的编辑的脚本,例如一个使用静态 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 会话的终端 ( ),并且备份很方便。