Answers:
无需使用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”可以读写。用户“白人”现在可以使用他/她喜欢的编辑器来编辑文件。
setfacl: /etc/logrotate.conf: Operation not supported
准备执行所需编辑的脚本,例如,使用静态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机制和一个方便的备份设备后,我通常会保持根会话处于打开状态()的终端。
/etc/network/interfaces
文件重写为任何/root/set_static_ip
内容。除非您可以制作一个要求用户输入IP地址,网关等的脚本,否则我做不到。
/etc/sudoers
,它visudo
不是sudoedit
。
/var/tmp/foo
=/etc/network/interfaces
吗?从来没有真正看到您要说的内容,我对Linux还是很陌生。