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


8

我试图/etc/network/interfaces用没有root特权的用户写信。

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

我不希望用户具有完全的root权限。只是具有编辑此文件的能力。

Answers:


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

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


有点困惑。是/var/tmp/foo= /etc/network/interfaces吗?从来没有真正看到您要说的内容,我对Linux还是很陌生。
基思

这只是一个文件。您可以使用所需的任何文件。
杰夫·怀特

1
真好 我以为ACL只能用于限制权限,而不能授予它们-很高兴知道这不是事实!
Rmano 2014年

WSL似乎不受支持:setfacl: /etc/logrotate.conf: Operation not supported
mpen

8

准备执行所需编辑的脚本,例如,使用静态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)sudo -i修改sudoers机制和一个方便的备份设备后,我通常会保持根会话处于打开状态()的终端。


唯一的问题是静态IP设置需要按需更改。我对您建议的脚本的理解将基本上将/etc/network/interfaces文件重写为任何/root/set_static_ip内容。除非您可以制作一个要求用户输入IP地址,网关等的脚本,否则我做不到。
基思

您可以编写一个接受参数的脚本...但是,是的,这是最安全的方法。如果让用户盲目地编辑文件,如果他们出错了怎么办?您可能无法使用服务器...因此脚本不仅需要以某种方式询问参数,还需要检查它们是否安全。
Rmano 2014年

3
至于/etc/sudoers,它visudo不是sudoedit
saiarcot895 2014年

如果有人问这种问题,编写安全的bash脚本可能超出他们的技能范围。有一个原因,您不能使setuid root成为bash脚本。
rox0r 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.