方法1(推薦)
在root使用者下用visudo指令添加以下代碼到/etc/sudoers檔案的末端。替換其中的user為你的使用者名,hostname為你的主機名(可以使用hostname指令查詢)。
user hostname=NOPASSWD: /sbin/shutdown -h now
user hostname=NOPASSWD: /sbin/reboot
或者合并為一行表示
user hostname=NOPASSWD: /sbin/shutdown -h now,/sbin/reboot
修改完之後ctrl+o寫入,ctrl+x退出編輯。
現在你的使用者可以用sudo shutdown -h now指令關機,reboot指令重新開機了。
注意:修改完仔細檢查,寫錯了會導緻無法進入root權限,如果出現了錯誤可以參照文章最後進行修複
方法2(不安全)
[email protected] ~]#whereis reboot #查找reboot的位置
reboot: /sbin/reboot /usr/share/man/man8/reboot.8.gz
[[email protected] ~]#su user #切換到user
[[email protected] root]$ reboot #執行重新開機測試
reboot: Need to be root #提示需要root
[[email protected] root]$ exit #退回到root使用者
exit
[[email protected] ~]# ll /sbin/reboot #檢視預設/sbin/reboot的詳細資訊
-rwxr-xr-x. 1 root root 13932 Jul 19 2011 /sbin/reboot #注意看前三個為rwx
[[email protected] ~]# chmod u+s /sbin/reboot #增加suid權限
[[email protected] ~]# ll /sbin/reboot #重新檢視修改後的/sbin/reboot詳細資訊
-rwsr-xr-x. 1 root root 13932 Jul 19 2011 /sbin/reboot #這時候已經變更為rws
[[email protected] ~]# su user #重新切換到user使用者
[use[email protected] root]$ reboot #執行reboot指令
方法3(xfce桌面下,gnome等桌面并不可行)
在Xfce下,如果你希望使用者利用Halt關機,需要安裝sudo。然後用visudo -f指令添加以下内容到/etc/sudoers中
對所有使用者:
%users hostname=NOPASSWD:/usr/lib/xfce4/xfsm-shutdown-helper
對單一使用者:
user hostname=NOPASSWD:/usr/lib/xfce4/xfsm-shutdown-helper
替換其中的user為你的使用者名,hostname為你的主機名。
這樣你定義了的使用者的“關機”和“重新開機”選項就激活了。
意外情況
因為修改了/etc/sudoers以及相關權限,導緻sudo無法使用,錯誤如下:
sudo: >>> /etc/sudoers:syntax error 在行 附近<<<
sudo: /etc/sudoer中第 行附近有解析錯誤
sudo: 沒有找到有效的 sudoers 資源,退出
sudo: 無法初始化政策插件
解決方法:
1、重新開機ubuntu,啟動時按Esc或Shift鍵,可以看到引導選項;
2、在引導選項中選擇Recovery模式的那一項來引導;
3、進入Recovery Menu頁面,選擇root,也就是進入試用root使用者進行系統恢複,在這裡可以執行超級使用者的權限的操作,回車後可以看到熟悉的 [email protected] ~# 指令提示符;
4、設定或者撤銷/etc/sudoers檔案的權限,也可以将該檔案改回到發生錯誤之前的狀态。
chmod /dev/null
mount -o remount rw /
vi /etc/sudoers
恢複本檔案内容并存盤(:wq!)
5、退出Recovery模式,重新啟動ubuntu。