知识混子的博客 

CentOS7设置sudo免密码失败原因

by 知识混子


Posted on 星期五 2018年11月09日 at 07:12下午 in IT技术


Linux系统一般不用root账号登录进行操作,而使用自建的用户如admin进行日常操作,需要执行特权命令的时候一般有两种方法。

1、使用 su 命令,然后输入 root 用户的密码,转换身份为 root,但这样会泄露 root 的密码,不安全。

2、使用 sudo 执行特权命令,需要输入当前用户的密码。前提是当前用户要列在 /etc/sudoers 文件里。

一、设置 /etc/sudoers

要给一个没有 sudo 权限的用户授予权限,需要修改 /etc/sudoers 文件。该文件属性为只读,之前有些方法将此文件添加写属性,然后用 vi 修改,再改回只读属性。实际上有一个专门的命令修改这个文件。

# visudo

上面提示符为 # 表示 root 身份,其他用户提示符为 $。不需要修改文件属性,可直接打开 /etc/sudoers 进行修改。

找到如下图所示 root ALL=(ALL) ALL ,在下面加上 admin ALL=(ALL) ALL 然后 ESC 输入 :wq 回车,保存退出即可。

sudo-admin.png

二、设置sudo免密码

如上面设置之后,用户 admin 就可以使用 sudo 了,但需要输入自己的密码,如果嫌麻烦不想输入密码,则要设置 sudo 免密码。

执行 visudo 命令打开 /etc/sudoers ,如下设置为 admin ALL=(ALL) NOPASSWD:ALL 即可。

sudo-nopswd.png

但有时候会无效,仍然要输入密码,原因出在第二个红箭头处。CentOS的一个新特性,有一个wheel组,这个组里的成员都可以使用 sudo,从上图就可以看出来,已经预先写在 sudoers 里面了,并且预留了 wheel 组免密码的设置,暂时注释掉了(第三个红箭头处)。

如果在安装CentOS的时候创建用户 admin,勾选了“成为系统管理员”,那么就自动把 admin 放到 wheel 这个组里了。所以第二个红箭头处针对 wheel 组所有成员的设置覆盖了前面 admin 的免密码设置。

可以用命令 cat /etc/group 查看所有用户分组的情况。

解决方法有3个:

1、推荐:第一个红箭头处 admin 那行删除,第二个红箭头处加上注释符 #,第三个红箭头处的注释符去掉。这样 wheel 组的所有成员都免密码,当然包括admin

2、保留第一个红箭头处的 admin 的设置,将第二个红箭头处加上注释符。这样只有 admin 可以免密码使用 sudo,wheel组的其他成员就不能使用 sudo 了。

3、把 admin 的那行移到 %wheel 那行的下面,这样针对 admin 的设置就不会被覆盖掉。有些系统比如阿里云的CentOS针对admin的免密码设置是写在 sudoers 的最后一行,保证其生效。



No one has commented yet.

Leave a Comment

HTML语法: 禁用