安装 Ubuntu Server 过程中创建的首个用户无法实现免密 sudo 效果

2015-10-21 10:27:24 +08:00
 sphawkcn
正常情况下,在安装好 Ubuntu Server 之后, adduser 新建一个用户 Tom 后,如果希望这个 Tom 能够在执行 sudo 时不需要输密码,那么使用 sudo visudo 命令在 /etc/sudoers 里面添加这么一行: Tom ALL=(ALL) NOPASSWD: ALL ,即可实现,这个没有问题。

那么问题来了,在安装 Ubuntu Server 的过程中,安装流程默认会让你新建一个用户(首个用户),假设叫 Mick ,这个 Mick 默认就具备了 sudo 权限,但是如果我想让 Mick 也具备不需要输密码也能 sudo 的能力,那么同样使用 sudo visudo 命令在 /etc/sudoers 里面添加这么一行: Mcik ALL=(ALL) NOPASSWD: ALL ,亲测发现在 sudo 的时候仍然需要密码,求教高手这是怎么回事?如何解决呢?拜谢!
4840 次点击
所在节点    Linux
43 条回复
est
2015-10-21 10:31:36 +08:00
和 LZ 问题无关,只是吐槽下,为毛教程都是让改 /etc/sudoers ?把用户加到 sudo 组里就行了的事情。非得那么费劲。。。。。。。唉。
billwsy
2015-10-21 10:32:59 +08:00
Mcik? Mick?
ooxxcc
2015-10-21 10:34:56 +08:00
@est 要免密码还是需要 visudo 的。。
sphawkcn
2015-10-21 10:37:02 +08:00
@billwsy 不好意思,是 Mick ,笔误。但是,服务器上是没写错的。
zhs227
2015-10-21 10:53:15 +08:00
两个问题:
1. 如果想要让一个用户具有 sudo 权限,只要加入到相应的组就行了,不需要修改 /etc/sudoers
这个组名, ubuntu 好像就是 sudo , centos 是 wheel

2. /etc/sudoers 这个文件,最好不要直接编辑,要使用 visudo

3. 你的问题我没试过,觉得隔一段时间输个密码也不费事。楼主发现问题了结一下贴
sphawkcn
2015-10-21 11:01:46 +08:00
@zhs227 谢谢指点。

1 、赋予 sudo 权限只需要加入 sudo 组,俺知道,但是这样不能实现免密码 sudo 。
2 、 /etc/sudoers 这个文件,最好不要直接编辑。俺也知道的,我是通过 sudo visudo 来编辑的,不是直接编辑的。
3 、所述问题依旧在。
ooxxcc
2015-10-21 11:11:01 +08:00
直接把文件内容贴上来看看,说不定有 typo 呢

还有这行加在文件最后比较合适
sphawkcn
2015-10-21 11:18:01 +08:00
@ooxxcc

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL:ALL) ALL
Mick ALL=(ALL:ALL) NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
msg7086
2015-10-21 11:40:47 +08:00
其实上面已经说了一半答案了。
你的用户在%sudo 组里,所以改下%sudo 组试试看?
PS: 如果 Mick 那行不加的话,请记得务必给 root 设一个密码。 Ubuntu 的 sudo 用户组,如果你不小心给自己账户设组的时候把 sudo 组去掉了的话,就再也回不去 root 了。
我的建议是加上 Mick ,同时给%sudo 加上 NOPASSWD 。
zhs227
2015-10-21 11:40:50 +08:00
你有没有重启过 sudo 的服务呢? `sudo service sudo restart`

另外,关注一下最后面那个目录`sudoers.d`,里面还有文件的,找一找有没有自己的那个用户,如果有的话,这个目录里面的内容会覆盖你的设置。

http://askubuntu.com/questions/192050/how-to-run-sudo-command-with-no-password

上面是一个参考链接,我觉得还不错。

BTW :答案没有经过尝试,纯属瞎答。正准备试一下的时候, vagrant up ,发现我的 D 盘挂了。正在恢复数据中。
sphawkcn
2015-10-21 11:45:11 +08:00
@zhs227 我连服务器都重启过 2 次了。现在试试 @msg7086 的办法。
msg7086
2015-10-21 11:50:35 +08:00
@zhs227 看了一眼 debian 的 sudo 服务文件,里面只写了一件事,就是把 /var/lib/sudo 里的东西全删了。
sphawkcn
2015-10-21 11:55:36 +08:00
@msg7086 非常感谢,已经测试成功,你的方法靠谱。我是在保留 Mick 那行的基础上,再同时给%sudo 加上 NOPASSWD 。

添加的代码如下:
………………
Mick ALL=(ALL:ALL) NOPASSWD: ALL
………………
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD: ALL

由此又想到了另外一个问题,这样应该是 sudo 组下所有用户都可以免密码 sudo 了吧,而不是指定的某一个人,当然,这个问题有点钻牛角尖了。

再次感谢以上积极帮忙解答的各位!
msg7086
2015-10-21 11:58:29 +08:00
@sphawkcn 自然是这样。如果要安全的话,留下自己名字的 sudo 权限,然后把 sudo 从自己的 groups 里删了就好。
aliuwr
2015-10-21 12:01:27 +08:00
我估计就是你用户名写错了,用户名一般都是全小写。大写字母默认要加强制参数才能设置。
sphawkcn
2015-10-21 12:04:27 +08:00
@msg7086 恩恩,确实,我傻了 :)
sphawkcn
2015-10-21 12:05:45 +08:00
@aliuwr 不是用户名写错了,小写的用户名都试过了,问题照旧。 @msg7086 的方法是正解。
sphawkcn
2015-10-21 12:08:17 +08:00
问题解决,见 13 楼,结贴。
zhs227
2015-10-21 13:51:48 +08:00
@sphawkcn @msg7086
恢复了一中午硬盘,搞好了测试了一下。

useradd testuser -G sudo
sudo visudo /etc/sudoers
把 Mick ALL=(ALL:ALL) NOPASSWD: ALL 这一行放在所有的组授权下面就可以。

看情况应该是下面的:%sudo 这一行覆盖了你上面的 NOPASSWD 设定。
就是加在#includedir 上一行,没有发现任何问题,非常自然。 sudo ls ,如丝般顺滑
qyz0123321
2015-10-21 16:40:41 +08:00
推荐 visudo ,之前就是直接改文件把 sudo 搞挂了。。没有 root , sudo 进不去。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/229752

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX