错误:/etc/sudoers: syntax error near line

最近登上远程主机时莫名报错sudo不能用了,原因是 /etc/sudoers.d/文件夹下有一个文件语法错误。搞了好几天,终于搞定了

这个错误的麻烦之处是这个文件必须使用sudo命令才可以修改,而sudo又不能用,所以只能干瞪眼着急。好在找到了一种骚套路解决方法,现在分享给大家!

>>> /etc/sudoers.d/50_stack_sh: syntax error near line 1 <<<
>>> /etc/sudoers.d/50_stack_sh: syntax error near line 2 <<<
>>> /etc/sudoers.d/50_stack_sh: syntax error near line 3 <<<
sudo: parse error in /etc/sudoers.d/50_stack_sh near line 1
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin


自此,无法使用sudo命令,无法打开/etc/sudoers文件,当然也无法修改/etc/sudoers文件。

解决
网上的解决方法是,用下列命令重新打开sudoers文件,从而把之前修改的地方恢复。

pkexec visudo
但是,这个命令执行后,需要输入密码进入root权限,但因为sudoers文件损坏,输入密码后出现下列错误:

==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/sbin/visudo' as the super user
Authenticating as: ubuntu,,, (ubuntu)
Password:
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
This incident has been reported.
这就尴尬了。最终的解决办法如下:

1、打开两个ssh终端,都是用同一个ubuntu用户登录

2、在第一个终端输入以下命令,获取pid

echo $$

3、在第二个终端,输入:

pkttyagent --process 刚刚得到的pid


4、这个时候,第二个终端会卡住,在第一个终端输入:

pkexec visudo


5、然后,第一个终端也卡主,回到第二个终端,会提示输入当前用户密码,输入

6、好吧,输入完密码,第二个终端卡主了,回到第一个终端,会发现,出现了sudoers的内容,编辑出错的地方,保存即可。

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

我的sudoer文件是这样的,可以看到最下方莫名其妙多出现了两行 

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

 将这两行删去,保存退出,就可以发现sudo可以正常使用了~

7、完成任务,修改完成,发现就可以继续使用sudo命令了,over

PS:这里用的编辑器是nano,以下是nano简单的保存方式:

linux下在编辑状态下退出请按Ctrl+X,会有两种情形:
①、如果文件未修改,直接退出;
②、如果修改了文件,下面会询问是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会提示输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确定,这个时候也可用Ctrl+C来取消返回。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这个错误通常表示你没有足够的权限来编辑 /etc/sudoers 文件。你需要使用 root 用户身份来修改 /etc/sudoers 文件。可以使用以下命令以 root 用户身份打开 /etc/sudoers 文件: ``` sudo visudo ``` 然后在文件中进行修改。如果你不确定如何进行修改,可以参考一些教程或者咨询系统管理员。注意,在修改 /etc/sudoers 文件时一定要小心,因为错误的修改可能会导致系统无法使用。 ### 回答2: visudo 是一个编辑 sudoers 文件的命令,而 /etc/sudoerssudoers 文件的路径。当出现 "Permission denied" 的提示时,意味着当前用户没有足够的权限来编辑该文件。 要解决这个问题,有几种方法可以尝试: 1. 使用 root 用户或具有管理员权限的用户进行操作:visudo 命令需要管理员权限才能编辑 sudoers 文件。如果您当前的用户没有足够权限,可以通过切换到 root 用户或使用 sudo 命令来获得需要的权限。 2. 使用 sudo 命令:如果您当前的用户拥有 sudo 权限,可以尝试使用 sudo visudo 命令来编辑 sudoers 文件。该命令将会使用管理员权限运行 visudo,并且您需要输入当前用户的密码以确认权限。 3. 检查文件权限:确认一下 sudoers 文件和 /etc 目录的权限是否正确。通常情况下,sudoers 文件的权限应该是 440 或 400,而 /etc 目录应该是 755 或更高。如果权限设置不正确,可以使用 chmod 命令来更改文件的权限。 如果上述方法仍然无法解决问题,可能是其他因素导致的权限错误,比如 SELinux 或 AppArmor 等安全机制的限制。在这种情况下,您可能需要按照特定的操作系统和安全策略来调整相关设置。 总结:"visudo: /etc/sudoers: Permission denied" 错误表示当前用户没有足够的权限来编辑 sudoers 文件。通过使用具有管理员权限的用户、sudo 命令或检查文件权限,可以解决这个问题。 ### 回答3: 当出现"visudo: /etc/sudoers: Permission denied"错误时,这意味着您没有足够的权限来编辑sudoers文件。sudoers文件是存储用于管理用户访问sudo命令权限的配置文件。 只有超级用户(root)或具有sudo访问权限的用户可以编辑sudoers文件。 要解决此错误,您可以尝试以下几种方法: 1. 使用sudo命令:在命令前添加sudo以提升权限。例如,使用命令sudo visudo可以打开sudoers文件,并以超级用户权限运行visudo命令。 2. 作为超级用户登录:如果您有root用户的凭据,可以直接以root身份登录,并运行visudo命令以编辑sudoers文件。 3. 申请sudo访问权限:如果您是普通用户,但希望具有sudo访问权限并能够编辑sudoers文件,您可以联系系统管理员或root用户请求sudo访问权限。 请注意,编辑sudoers文件是一项敏感任务,因为错误的更改可能导致系统功能中断或安全漏洞。在编辑sudoers文件之前,请确保了解如何正确配置文件,并在必要时备份原始文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值