我們在使用ubuntu時,經常會使用sudo命令,但是使用ubuntu用戶登錄,使用sudo命令時,經常會要求輸入密碼,爲了方便,我們可能會修改root用戶下 /etc/sudoers 文件,使sudo命令不需要輸入密碼,這個時候就不可避免的會輸入錯誤,導致sudo命令無法使用,出現類似如下錯誤
>>> /etc/sudoers: syntax error near line 22 <<<
sudo: parse error in /etc/sudoers near line 22
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
捉急,怎麼辦,sudo運行不了,ubuntu下一般都不設置root密碼,根本進入不了root用戶。
這個時候常規的做法就是重啓系統,進入grub界面,再進入recovery模式,修改sudoers文件,重啓系統。
但是有時候,主機並不是自己控制的,自己只有ssh登錄系統的使用權限。
這個時候下面這種方法就是救世主了:
使用下面的命令來編輯sudoers文件
pkexec visudo
但是卻報如下錯誤:
==== 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}
這裏的{pid}就是第二部獲取的pid值(PS:記得去掉{})
4、這個時候,第二個終端會卡住,在第一個終端輸入:
pkexec visudo
5、然後,第二個終端也卡主,回到第一個終端,會提示輸入當前用戶密碼,輸入
6、好吧,輸入完密碼,第一個終端卡主了,回到第二個終端,會發現,出現了sudoers的內容,編輯出錯的地方,保存即可。
7、完成任務,修改完成,發現就可以繼續使用sudo命令了,over
PS:這裏用的編輯器是nano,以下是nano簡單的保存方式:
linux下在編輯狀態下退出請按Ctrl+X,會有兩種情形:
①、如果文件未修改,直接退出;
②、如果修改了文件,下面會詢問是否需要保存修改。輸入Y確認保存,輸入N不保存,按Ctrl+C取消返回。如果輸入了Y,下一步會提示輸入想要保存的文件名。如果不需要修改文件名直接回車就行;若想要保存成別的名字(也就是另存爲)則輸入新名稱然後確定,這個時候也可用Ctrl+C來取消返回。