方法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(不安全)
root@localhost ~]#whereis reboot #查找reboot的位置
reboot: /sbin/reboot /usr/share/man/man8/reboot.8.gz
[root@localhost ~]#su user #切换到user
[user@localhost root]$ reboot #执行重启测试
reboot: Need to be root #提示需要root
[user@localhost root]$ exit #退回到root用户
exit
[root@localhost ~]# ll /sbin/reboot #查看默认/sbin/reboot的详细信息
-rwxr-xr-x. 1 root root 13932 Jul 19 2011 /sbin/reboot #注意看前三个为rwx
[root@localhost ~]# chmod u+s /sbin/reboot #增加suid权限
[root@localhost ~]# ll /sbin/reboot #重新查看修改后的/sbin/reboot详细信息
-rwsr-xr-x. 1 root root 13932 Jul 19 2011 /sbin/reboot #这时候已经变更为rws
[root@localhost ~]# su user #重新切换到user用户
[user@localhost 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 在行 32 附近<<<
sudo: /etc/sudoer中第 32 行附近有解析错误
sudo: 没有找到有效的 sudoers 资源,退出
sudo: 无法初始化策略插件
解决方法:
1、重启ubuntu,启动时按Esc或Shift键,可以看到引导选项;
2、在引导选项中选择Recovery模式的那一项来引导;
3、进入Recovery Menu页面,选择root,也就是进入试用root用户进行系统恢复,在这里可以执行超级用户的权限的操作,回车后可以看到熟悉的 root@user ~# 命令提示符;
4、设置或者撤销/etc/sudoers文件的权限,也可以将该文件改回到发生错误之前的状态。
chmod 666 /dev/null
mount -o remount rw /
vi /etc/sudoers
恢复本文件内容并存盘(:wq!)
5、退出Recovery模式,重新启动ubuntu。