Ubuntu下etc/sudoers权限修改导致sudo无法使用问题

ssh到远程服务器,出于某种原因,执行了
sudo chmod 777 etc/sudoers
这样会在非root用户下把sudoers文件的权限修改,但是Ubuntu下如果想用sudo,就必须让这个文件0440权限,但是现在根本进入不了root用户,也用不了sudo,看似进入了僵局。
在网上搜了很多教程,要么是自己虚拟机的情况下,进入recover mode下进行操作,要么是执行

pkexec chmod 0440 /etc/sudoers

 但是这样会报错如下:
 

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

在ssh远程服务器的背景下,只有方法二看起来靠谱一些,于是又在知乎一篇文章找到了解决办法,这里做出一些解释,原文如下:
linux sudoers文件权限异常解决方法 - 知乎 (zhihu.com)
首先命令是:

pkttyagent -p $(echo $$) | pkexec chmod 0440 /etc/sudoers

 执行完就可以用sudo命令了,那这行命令究竟干了些什么呢?

  1. echo $$:这个命令输出当前shell的进程ID(PID)。在shell中,$$是一个特殊变量,它代表当前shell实例的进程ID。

  2. pkttyagent -p $(echo $$)pkttyagent是一个程序,用于为PolicyKit提供文本界面的认证代理。-p选项后面跟的是一个进程ID,告诉pkttyagent为哪个进程的PolicyKit请求提供认证服务。通过使用$(echo $$)pkttyagent被告知为当前shell进程提供服务。

  3. |(管道):这个符号在Unix和Linux系统中用于将一个命令的输出作为另一个命令的输入。在这个场景下,它被用来将pkttyagent的输出(如果有的话)传递给pkexec命令。

  4. pkexec chmod 0440 /etc/sudoerspkexec允许以另一个用户的身份(默认为超级用户)执行命令,这里用来执行chmod 0440 /etc/sudoers。这个命令的目的是将/etc/sudoers文件的权限设置为0440,即只有root用户和所属组可以读取该文件,其他人没有任何权限,这是/etc/sudoers文件的推荐权限设置。

将这些部分组合在一起,整个命令的意图是启动一个pkttyagent实例来为当前shell进程提供PolicyKit认证服务,然后通过pkexec以root权限执行chmod 0440 /etc/sudoers命令,修复/etc/sudoers文件的权限。这种方法尤其在图形界面不可用或pkexec无法直接弹出认证对话框时可能会有用。

这个命令的关键在于,它试图在没有图形界面的环境下提供一种方式来执行需要PolicyKit认证的命令,通过为命令行会话提供一个文本界面的认证代理。
那PolicyKit是什么呢?
PolicyKit(现在通常称为polkit)是一个用于管理操作系统级别策略的组件,它允许非特权进程(通常是在桌面会话中运行的进程)向特权进程请求执行特定的操作。它是现代Linux发行版中用于权限控制和安全管理的关键部分,尤其是在图形用户界面(GUI)环境中。具体技术还是比较复杂的,这里不再赘述。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值