如何获得编辑系统配置文件的权限?
我似乎无法在根系统中编辑和保存配置文件(例如: /etc/dhcp/dhcpd.config
); 它只是说“权限被拒绝”或文本编辑器中的保存选项被阻止。
我很确定我是root用户,但我该如何确定? 如果我是root用户,我该如何解决这个问题?
你使用哪个文本编辑器? 如果您是root用户并且知道密码,请尝试(在终端中):
-
sudoedit /etc/dhcp/dhcpd.config
如果您正在使用基于终端的编辑器(如nano
或ssh’ing到服务器。 -
gksudo
如果您使用的是基于GUI的编辑器,例如/etc/dhcp/dhcpd.config gedit
在任何一种情况下,您都需要在请求时首先提供root密码。
在Ubuntu 14.04开始,默认情况下不安装gksudo
。 您必须安装gksu
软件包(从软件中心或通过sudo apt-get install gksu
)才能获得它。
在Ubuntu 17.10中,Wayland是默认的而不是传统的X服务器,并且以root身份运行图形编辑器很困难。 请参阅为什么不使用gksu / gksudo或启动带有sudo的图形应用程序与Wayland一起工作? 详情。
在Ubuntu 18.04中,官方存储库中没有gksudo
。 请改用sudo -H
或admin://
协议 :
gedit admin:///etc/dhcp/dhcpd.config
如果您不想使用终端,则可以以root用户身份调用GUI程序(此示例适用于Gedit):
- 按Alt + F2以显示“运行”对话框。
-
键入
gksudo
后跟程序的可执行文件名(可能与GUI显示的名称不同)。 例如:gksudo gedit
- 按Enter键 。
我想不出root会被permission denied
。
在12.04你可以这样做: alt + f2并在如下所示的框中输入gksudo
:
你得到一个这样的盒子并输入gedit
然后点击ok :
点击打开 :
只需浏览到该文件:
完成
警告:有一个超级用户/ root有一个原因。 这样你就不会在错误的重要事情中不小心把坏事或结构放在外面。 您应该非常小心,无论您以root身份编辑的是您要编辑的正确文件,并且您的语法都是完美的。 如果有其他工具可供编辑,建议使用它们。 例如,使用visudo
终端命令而不是手动编辑/etc/sudoers
。
一些可能搞砸的文件很容易恢复。 其他的相对复杂,或者您必须使用恢复控制台和许多命令行。
是的,恢复控制台命令行似乎比这更可怕。 小心点
您可以通过几种不同的方式测试当前shell是否以root身份运行
~/ > whoami paul ~/ > sudo whoami root ~/ > id uid=1000(paul) gid=1000(paul) groups=1000(devs),4(adm),20(dialout),24(cdrom),… ~/ > sudo id uid=0(root) gid=0(root) group=0(root)
其他答案提供了升级到root权限的好方法,所以我不会重复这些。 假设你是 root用户,你仍然无法编辑文件/etc/dhcp/dhcpd.config
– 那么很可能有人或某个程序使用chattr
程序使文件不可变。
从chattr手册页 :
无法修改具有“i”属性的文件:无法删除或重命名文件,无法为此文件创建链接,也无法将数据写入文件。 只有超级用户或拥有
CAP_LINUX_IMMUTABLE
function的进程才能设置或清除此属性。
你可以通过使用lsattr
找到lsattr
lsattr /etc/dhcp/dhcpd.config
如果它确实是不可变的你可以这样关掉它:
chattr -i /etc/dhcp/dhcpd.config
如果您使用的是Ubuntu 17.04或更高版本,建议使用gvfs admin后端 。 只需将admin://
添加到要在文本编辑器或文件应用程序等应用程序中打开的完整文件路径的前面。
例如,要更改引导设置,请打开
admin:///etc/default/grub
如果您使用Ubuntu 17.10和默认的Wayland,那么旧答案中提到的sudo
和gksu
将不起作用。
使用您喜欢的文本编辑器
您可以通过VISUAL
环境变量1将sudo -e
或其别名sudoedit
与您喜欢的(图形!)文本编辑器一起使用:
VISUAL=gedit sudo -e /path/to/some-config-file.cfg
这相当于
VISUAL=gedit sudoedit /path/to/some-config-file.cfg
当然,您可以使用任何其他您喜欢的编辑器,例如leafpad
, kate
或subl
。
某些编辑器提供命令行选项以始终启动新实例,即使当前正在运行。 由于sudoedit
等待编辑器进程终止以对已编辑的文件应用更改,因此如果您运行同一编辑器的其他实例,则可能需要执行以下操作:
- 对于GEdit,请使用
VISUAL='gedit -s'
。 - 对于凯特,使用
VISUAL='kate -n'
。
好处
- 不需要额外和/或已弃用的应用程序。
- 不需要像
pkexec
那样的安全策略更改(您需要编辑文件…作为超级用户,这个答案正在尝试解决的问题)。 - 不需要使用提升的权限执行可能不安全的应用程序。
- 使用当前用户的应用程序配置,但搞乱配置文件访问权限,如
sudo -H
等。 - 不会回退到
root
用户的用户应用程序配置数据,这些数据可能看起来也可能看起来和行为不可接受。
缺点
- 你需要学习一个简短的新命令。
1 EDITOR
或SUDO_EDITOR
也可以工作,但优先级较低或者更专业。 有关详细信息,请参见手册页 。
为了安全起见,请使用cp /etc/dhcp/dhcpd.config /$HOME/dhcpd.config.backup
并运行gksu gedit /etc/dhcp/dhcpd.config
用您选择的编辑器替换gedit
你会得到这样的提示
在此输入您的密码。
将打开一个新窗口,您可以在那里编辑配置。
如果出现问题,您可以从主文件夹中的备份中恢复它。
由于Linux处理权限,您将获得“权限被拒绝”。
$HOME
文件夹中的任何内容都属于用户,而其他几乎所有属于root用户。
您尝试访问的/etc/dhcp/dhcpd.conf
文件属于root用户,出于安全原因,默认情况下/etc/
大多数文件都属于root用户。
您仍然可以通过提升权限来编辑此文件。
要做到这一点,你有很多方法:
-
使用
su
表示切换用户。 没有任何属性,它可以作为切换到root帐户的命令,但是您需要输入要切换到的用户的密码,因为默认情况下root在Ubuntu上没有密码(有效地禁用root帐户) ,除非您为root设置了密码,否则这将不起作用,这是不推荐的。 -
使用
sudo
只能提升一个命令的权限。 这通常仅用于命令行应用程序,如vim
,nano
等CLI文本编辑器 -
使用
gksu
只能提升一个命令的权限,但与sudo
不同的是用于图形程序,如GUI文本编辑器,如gedit
。 它使用图形提示来方便输入密码。
sudo < editor > < filelocation >
例如:
sudo -H gedit etc/dhcp/dhcpd.config