如何获得编辑系统配置文件的权限?

我似乎无法在根系统中编辑和保存配置文件(例如: /etc/dhcp/dhcpd.config ); 它只是说“权限被拒绝”或文本编辑器中的保存选项被阻止。

我很确定我是root用户,但我该如何确定? 如果我是root用户,我该如何解决这个问题?

你使用哪个文本编辑器? 如果您是root用户并且知道密码,请尝试(在终端中):

  • sudoedit /etc/dhcp/dhcpd.config如果您正在使用基于终端的编辑器(如nano或ssh’ing到服务器。
  • gksudo /etc/dhcp/dhcpd.config如果您使用的是基于GUI的编辑器,例如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):

  1. 按Alt + F2以显示“运行”对话框。
  2. 键入gksudo后跟程序的可执行文件名(可能与GUI显示的名称不同)。 例如:

     gksudo gedit 
  3. 按Enter键

我想不出root会被permission denied

在12.04你可以这样做: alt + f2并在如下所示的框中输入gksudo

F2对话

你得到一个这样的盒子并输入gedit然后点击ok

在“运行”对话框中键入gedit

点击打开

在gedit中打开选项卡

只需浏览到该文件:

打开文件对话框

完成

警告:有一个超级用户/ 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_IMMUTABLEfunction的进程才能设置或清除此属性。

你可以通过使用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,那么旧答案中提到的sudogksu将不起作用。

使用您喜欢的文本编辑器

您可以通过VISUAL环境变量1sudo -e或其别名sudoedit与您喜欢的(图形!)文本编辑器一起使用:

 VISUAL=gedit sudo -e /path/to/some-config-file.cfg 

这相当于

 VISUAL=gedit sudoedit /path/to/some-config-file.cfg 

当然,您可以使用任何其他您喜欢的编辑器,例如leafpadkatesubl

某些编辑器提供命令行选项以始终启动新实例,即使当前正在运行。 由于sudoedit等待编辑器进程终止以对已编辑的文件应用更改,因此如果您运行同一编辑器的其他实例,则可能需要执行以下操作:

  • 对于GEdit,请使用VISUAL='gedit -s'
  • 对于凯特,使用VISUAL='kate -n'

好处

  • 不需要额外和/或已弃用的应用程序。
  • 不需要像pkexec那样的安全策略更改(您需要编辑文件…作为超级用户,这个答案正在尝试解决的问题)。
  • 不需要使用提升的权限执行可能不安全的应用程序。
  • 使用当前用户的应用程序配置,但搞乱配置文件访问权限,如sudo -H等。
  • 不会回退到root用户的用户应用程序配置数据,这些数据可能看起来也可能看起来和行为不可接受。

缺点

  • 你需要学习一个简短的新命令。

1 EDITORSUDO_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只能提升一个命令的权限。 这通常仅用于命令行应用程序,如vimnano等CLI文本编辑器

  • 使用gksu只能提升一个命令的权限,但与sudo不同的是用于图形程序,如GUI文本编辑器,如gedit 。 它使用图形提示来方便输入密码。

 sudo < editor > < filelocation > 

例如:

 sudo -H gedit etc/dhcp/dhcpd.config