安装 Ubuntu Server 过程中创建的首个用户无法实现免密 sudo 效果 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
sphawkcn
V2EX    Linux

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

  •  
  •   sphawkcn 2015-10-21 10:27:24 +08:00 5252 次点击
    这是一个创建于 3688 天前的主题,其中的信息可能已经有所发展或是发生改变。
    正常情况下,在安装好 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?
    47jm9ozp
        3
    47jm9ozp  
       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 、所述问题依旧在。
    47jm9ozp
        7
    47jm9ozp  
       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 1: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     Solana     2875 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:07 PVG 22:07 LAX 06:07 JFK 09:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86