我可以在没有 sudo 的情况下编辑主机吗?

TMH*_*TMH 7 permissions

目前,当我想编辑我的主机文件时,我需要使用sudo nano /etc/hosts,有什么我可以说“允许tom用户在不需要 sudo 的情况下编辑主机文件”的吗?

Zan*_*nna 23

你可以,但这是个坏主意。权限系统的重点是防止非特权用户和攻击者执行诸如写入系统文件、运行恶意代码等操作。到目前为止,最好的办法就是sudo在需要编辑系统文件时继续使用。这是最佳实践,这就是我们拥有的原因sudo

我不推荐以下任何一种方法,但它们比可怕的chmod 777. 例如,您可以更改组所有权/etc/hosts并授予组写入权限:

sudo addgroup editors            #make a new group
sudo adduser $USER editors       #add yourself to it
sudo chown :editors /etc/hosts   #change the group ownership
sudo chmod 664 /etc/hosts        #give the group write permission
Run Code Online (Sandbox Code Playgroud)

您现在可以在没有sudo. 或者,您可以使用 ACL,如果您有acl软件包(在 15.04 及更高版本中确定安装)

sudo setfacl -m $USER:rw /etc/hosts
Run Code Online (Sandbox Code Playgroud)

但是,同样,我不推荐这些操作中的任何一个。只需使用sudo.

  • FWIW Windows 也支持文件 ACL,默认情况下您不能以非特权用户身份编辑主机文件等系统文件,因此安全注释有点多余。 (7认同)

Wil*_*ill 10

我不会调整任何系统相关文件的权限

你可以做的是制作一个基本的脚本

#!/bin/bash
sudo nano /etc/hosts
Run Code Online (Sandbox Code Playgroud)

随意命名它,例如,edithosts.sh 并将其放在您的主文件夹内的脚本文件夹中。

chmod 700 /path/to/script/file/edithosts.sh 这将防止未经授权的读取或写入文件,因为 ss TripeHound 说,这个文件的内容现在以 root 权限运行,没有密码。

然后将以下行添加到 /etc/sudoers

tom ALL = (root) NOPASSWD: /path/to/script/file/edithosts.sh 
Run Code Online (Sandbox Code Playgroud)

这将使您sudo sh /path/to/script/file/edithosts.sh无需输入密码

推荐方案

正如@paul 在评论中指出的那样,sudoedit可能是更好的解决方案。

tom ALL = (root) NOPASSWD: sudoedit /etc/hosts
Run Code Online (Sandbox Code Playgroud)

因为这仅允许编辑/etc/hosts并且不会让您运行提升的文本编辑器