问题描述
我似乎无法在根系统中编辑和保存配置文件(例如:/etc/dhcp/dhcpd.config
);它只是说”permission denied”或保存选项在文本编辑器中被阻止。
我很确定我是root用户,但我该如何确定?如果我是root用户,我该如何解决这个问题?
最佳解决办法
你使用哪个文本编辑器?如果您是root用户并且知道密码,请尝试(在终端中):
-
sudoedit /etc/dhcp/dhcpd.config
如果您正在使用terminal-based编辑器(如nano
)或正在ssh’ing到服务器。 -
gksudo <text editor here> /etc/dhcp/dhcpd.config
如果您使用的是GUI-based编辑器,例如gedit
在任何一种情况下,您都需要在请求时首先提供root密码。
在Ubuntu 14.04及更高版本中,默认情况下不安装gksudo
。您必须安装gksu
软件包(从软件中心或通过sudo apt-get install gksu
)才能获得它。
在Ubuntu 17.10中,Wayland是默认的而不是传统的X服务器,并且以root身份运行图形编辑器很困难。有关详细信息,请参阅Why don’t gksu/gksudo or launching a graphical application with sudo work with Wayland?。
在Ubuntu 18.04中,gksudo
在官方存储库中不可用。请改用sudo -H <text editor>
或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
:
单击Open
:
只需浏览到该文件:
完成
警告:有一个super-user /root是有原因的。这样你就不会在错误的重要事情中不小心把坏事或结构放在外面。您应该非常小心,无论您以root身份编辑的是您要编辑的正确文件,并且您的语法都是完美的。如果有其他工具可供编辑,建议使用它们。例如,使用visudo
terminal command而不是手动编辑/etc/sudoers
。
一些可能搞砸的文件很容易恢复。其他的相对复杂,或者您必须使用恢复控制台和许多命令行。
是的,恢复控制台命令行似乎比this更可怕。小心点
第四种办法
您可以通过几种不同的方式测试当前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
程序使文件不可变。
A file with the ‘i’ attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. Only the superuser or a process possessing the
CAP_LINUX_IMMUTABLE
capability can set or clear this attribute.
您可以使用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
当然你可以使用你喜欢的任何其他编辑器,例如: G。 leafpad
,kate
或subl
。
某些编辑器提供命令行选项以始终启动新实例,即使当前正在运行。由于sudoedit
等待编辑器进程终止以将更改应用于已编辑的文件,因此如果您运行相同编辑器的其他实例,则可能需要执行以下操作:
-
对于GEdit,请使用
VISUAL='gedit -s'
。 -
凯特使用
VISUAL='kate -n'
。
Advantages
-
不需要额外和/或已弃用的应用程序。
-
不需要安全策略更改,如
pkexec
(您需要编辑文件…作为super-user,这个答案正在尝试解决的问题)。 -
不需要使用提升的权限执行可能不安全的应用程序。
-
使用当前用户的应用程序配置,但混乱配置文件访问权限,如
sudo -H
等。 -
不会回退到
root
用户的用户应用程序配置数据,这些数据可能看起来也可能不合适。
Disadvantages
-
你需要学习一个简短的新命令。
1 EDITOR
或SUDO_EDITOR
也可以工作,但优先级较低或者更专业。有关详细信息,请参阅manual page。