V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
sphawkcn
V2EX  ›  Linux

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

  •  
  •   sphawkcn · 2015-10-21 10:27:24 +08:00 · 4855 次点击
    这是一个创建于 3325 天前的主题,其中的信息可能已经有所发展或是发生改变。
    正常情况下,在安装好 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 的时候仍然需要密码,求教高手这是怎么回事?如何解决呢?拜谢!
    43 条回复    2016-01-14 21:17:05 +08:00
    est
        1
    est  
       2015-10-21 10:31:36 +08:00
    和 LZ 问题无关,只是吐槽下,为毛教程都是让改 /etc/sudoers ?把用户加到 sudo 组里就行了的事情。非得那么费劲。。。。。。。唉。
    billwsy
        2
    billwsy  
       2015-10-21 10:32:59 +08:00
    Mcik? Mick?
    ooxxcc
        3
    ooxxcc  
       2015-10-21 10:34:56 +08:00
    @est 要免密码还是需要 visudo 的。。
    sphawkcn
        4
    sphawkcn  
    OP
       2015-10-21 10:37:02 +08:00
    @billwsy 不好意思,是 Mick ,笔误。但是,服务器上是没写错的。
    zhs227
        5
    zhs227  
       2015-10-21 10:53:15 +08:00
    两个问题:
    1. 如果想要让一个用户具有 sudo 权限,只要加入到相应的组就行了,不需要修改 /etc/sudoers
    这个组名, ubuntu 好像就是 sudo , centos 是 wheel

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

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

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

    还有这行加在文件最后比较合适
    sphawkcn
        8
    sphawkcn  
    OP
       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
        9
    msg7086  
       2015-10-21 11:40:47 +08:00
    其实上面已经说了一半答案了。
    你的用户在%sudo 组里,所以改下%sudo 组试试看?
    PS: 如果 Mick 那行不加的话,请记得务必给 root 设一个密码。 Ubuntu 的 sudo 用户组,如果你不小心给自己账户设组的时候把 sudo 组去掉了的话,就再也回不去 root 了。
    我的建议是加上 Mick ,同时给%sudo 加上 NOPASSWD 。
    zhs227
        10
    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
        11
    sphawkcn  
    OP
       2015-10-21 11:45:11 +08:00
    @zhs227 我连服务器都重启过 2 次了。现在试试 @msg7086 的办法。
    msg7086
        12
    msg7086  
       2015-10-21 11:50:35 +08:00
    @zhs227 看了一眼 debian 的 sudo 服务文件,里面只写了一件事,就是把 /var/lib/sudo 里的东西全删了。
    sphawkcn
        13
    sphawkcn  
    OP
       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
        14
    msg7086  
       2015-10-21 11:58:29 +08:00
    @sphawkcn 自然是这样。如果要安全的话,留下自己名字的 sudo 权限,然后把 sudo 从自己的 groups 里删了就好。
    aliuwr
        15
    aliuwr  
       2015-10-21 12:01:27 +08:00
    我估计就是你用户名写错了,用户名一般都是全小写。大写字母默认要加强制参数才能设置。
    sphawkcn
        16
    sphawkcn  
    OP
       2015-10-21 12:04:27 +08:00
    @msg7086 恩恩,确实,我傻了 :)
    sphawkcn
        17
    sphawkcn  
    OP
       2015-10-21 12:05:45 +08:00
    @aliuwr 不是用户名写错了,小写的用户名都试过了,问题照旧。 @msg7086 的方法是正解。
    sphawkcn
        18
    sphawkcn  
    OP
       2015-10-21 12:08:17 +08:00
    问题解决,见 13 楼,结贴。
    zhs227
        19
    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
        20
    qyz0123321  
       2015-10-21 16:40:41 +08:00
    推荐 visudo ,之前就是直接改文件把 sudo 搞挂了。。没有 root , sudo 进不去。。
    MntCw
        21
    MntCw  
       2015-10-21 17:06:04 +08:00 via Android
    为什么让 sudo 不要密码 那和直接 root 登录有啥区别?
    zhs227
        22
    zhs227  
       2015-10-21 18:56:46 +08:00
    @qyz0123321

    我今天也遇到了这个问题,弄的满头包。

    最后发现一条妙计:
    pkexec "/usr/sbin/visudo"

    他会自动查找具有 sudo 权限的用户,你选择一个普通用户,比如自己的用户,然后输入密码,珰珰:可以使用 root 权限编辑了。

    尝试了一下 ubuntu 和 centos 好像都有这个命令。
    msg7086
        23
    msg7086  
       2015-10-21 20:22:57 +08:00
    @MntCw 不打 sudo 便无法获得特权。
    Cu635
        24
    Cu635  
       2015-10-21 21:01:18 +08:00
    修改并且保存 /etc/sudoers 之后,把用户先注销再登录一次
    Cu635
        25
    Cu635  
       2015-10-21 21:06:28 +08:00
    @est 加入 sudo 组是允许使用 sudo 命令,/etc/sudoers 文件是配置如何使用 sudo 命令、有权使用 sudo 命令的用户如何划分更细的权限。


    @MntCw
    直接 root 的话所有命令自动是 root 权限,无密码 sudo 只有在 sudo xxx 的时候才是 root 权限,其它时候还是普通权限。
    MntCw
        26
    MntCw  
       2015-10-21 21:15:47 +08:00
    @msg7086
    @Cu635
    那打了 sudo 没有密码和在 root 下直接执行哪个更方便,又想用 sudo 又不想用密码不懂为啥。被 windows 宠坏了? sudo 还是需要密码的,不需要密码就用 root 直接登录。
    msg7086
        27
    msg7086  
       2015-10-21 21:44:21 +08:00
    @MntCw
    真是莫名其妙。
    我需要一个不用打密码就能提权,但是不打 sudo 就不提权的环境,有什么问题吗?

    为啥别人一定要像你一样,要么所有命令都提权执行,要么就不停敲密码?
    你这种想法我才不懂是要为啥。
    lostsnow
        28
    lostsnow  
       2015-10-21 22:35:14 +08:00
    @msg7086 如果是生产环境还真是不要这样用的好, 当然如果不是的话也不是说一定不让用, 只是安全性降低了而已
    MntCw
        29
    MntCw  
       2015-10-21 23:23:13 +08:00
    @msg7086 有问题。
    如果你想坚持这么用,那也可以。
    ericFork
        30
    ericFork  
       2015-10-22 00:45:30 +08:00
    Ubuntu 新安装的 sudoers 文件有问题, adm admin 用户组傻傻分不清楚,不了解是 typo 还是故意的
    zhengkai
        31
    zhengkai  
       2015-10-22 01:18:19 +08:00
    @MntCw 别自虐成么,还要求别人也像你一样自虐。绝大部分情况下都是不打 sudo 的,如果特意多敲了 sudo 当然是有这意图的,干嘛还要再敲一次密码呢(敲这玩意很爽?还是因为弱密码),又不是把 sudo rm -rf 做成 alias

    我不觉得有两个锁的门比有一个锁的更安全

    倒觉得初学者为了纠正习惯性的打 sudo 才有必要设密码
    msg7086
        32
    msg7086  
       2015-10-22 01:55:27 +08:00
    @lostsnow 应该也没降低多少安全性。
    只有在个人账户被入侵且入侵者不知道账户密码的时候才有区别。

    远程都是证书登录的,而且只在自己电脑上登录。
    所以很少有机会被人在不拿到密码的情况下拿到账号 shell 的。

    @zhengkai +1 。 Nice 比喻。
    Remember
        33
    Remember  
       2015-10-22 02:52:32 +08:00
    19 楼正解,下面这行覆盖了你的设置,
    %sudo ALL=(ALL:ALL) ALL

    要么把这行注释掉,要么把你设置的挪下来。
    aivier
        34
    aivier  
       2015-10-22 09:00:36 +08:00
    sudo su
    这样不行么
    MntCw
        35
    MntCw  
       2015-10-22 09:05:38 +08:00 via Android
    @zhengkai 呵呵
    tkisme
        36
    tkisme  
       2015-10-22 10:06:08 +08:00
    免密码设置需要加到末尾
    qyz0123321
        37
    qyz0123321  
       2015-10-22 10:11:15 +08:00
    @zhs227 看起来是个好命令,我是直接在 recovery mode 下重新修改的权限。。
    SonicY
        38
    SonicY  
       2015-10-22 13:01:47 +08:00
    只有我一个人感觉这样很危险吗?
    Remember
        39
    Remember  
       2015-10-22 18:51:59 +08:00
    @SonicY 不危险,禁用 root 登录,设置自己账户用证书登录,没什么危险的。
    Cu635
        40
    Cu635  
       2015-10-24 22:48:55 +08:00
    @MntCw 所有的命令都是 root 权限很爽是吧。
    MntCw
        41
    MntCw  
       2015-10-25 21:47:30 +08:00
    @Cu635 呵呵,我是用 sudo 有密码形式进行,你要用 sudo 没密码这种脱裤子放屁的形式,我也干涉不了。
    Cu635
        42
    Cu635  
       2016-01-14 20:37:38 +08:00
    @MntCw
    那好,你想删除你家目录下面的一个东西: rm ~/bin/foobar
    结果手一滑,打成了 rm ~ /bin/foobar
    所以说最好不要在 root 下直接执行命令,而是用普通用户 sudo

    然后用 sudo 有密码嫌麻烦,自然要用无密码 sudo 啊,这也是无密码 sudo 的意义:在麻烦的需要输入密码的 sudo 和不需要密码的 root 之间设置了一个两全其美的选择。

    你要是非得说有密码 sudo 可以在输入密码的时候再查看输入命令有没有错误,那我也没法:这是应该在按回车之前就看好的。
    MntCw
        43
    MntCw  
       2016-01-14 21:17:05 +08:00
    @Cu635 你们爱 sudo 没密码就没密码啦,我喜欢 sudo 有密码,就这样,别再回了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:44 · PVG 10:44 · LAX 18:44 · JFK 21:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.