Linux默认是没有将用户添加到sudoers列表中的,需要root手动将账户添加到sudoers列表中,才能让普通账户执行sudo命令。
root 账户键入visudo即可进入sudo配置,这个命令要比vim /etc/sudoers要好很多,因为使用visudo进行sudo配置,将会得到很多提示.
键入visudo后,在编辑器下键入 /root 寻找root,找到第三个root的那一行
root ALL=(ALL) ALL
按yyp键复制并在粘贴在下一行,在这一行的 root处输入cw将root替换为你所需要添加用户的账户名,比如Blinux,结果就是
root ALL=(ALL) ALL
blinux ALL=(ALL) ALL
如果你希望之后执行sudo命令时不需要输入密码,那么可以形如
root ALL=(ALL) ALL
blinux ALL=(ALL) NOPASSWD:ALL
输入:wq保存即可。
之后执行sudo命令时直接在命令前端键入sudo 空格即可,比如sudo shutdown -h now执行立即关机命令.
如果需要输入口令,则输入用户密码即可,而不是root密码.
注:如果用户不在sudoers列表中,将会得到以下提示.
Blinux is not in the sudoers file. This incident will be reported.

1 对 “sudoer列表”的想法;

  1. sudo: sorry, you must have a tty to run sudo

    1. 编辑 /etc/sudoers

    1)Defaults requiretty,修改为 #Defaults requiretty,表示不需要控制终端。

    2)Defaults requiretty,修改为 Defaults:nobody !requiretty,表示仅 nobody 用户不需要控制终端。

    如果修改为 Defaults:%nobody !requiretty,表示仅 nobody 组不需要控制终端。

    其实只要注释掉)Defaults requiretty 那个就可以了。表示在执行的时候不打开终端。但是,有的shell必须要有终端才可以执行。这样显然是不行的。后来,又找到一片文章才搞定。下面为抄录的,仅为记录以后使用。

    有些程序/脚本可能在没有控制终端的环境下上执行(如系统启动服务时, Daemon,
    或者是setsid启动的程序等) 但可能这个程序需要控制终端, 这这么办呢?
    如我们的例子: 我们在linux启动时启动一个服务, 可是中间有个程序(旧的systemtap)使用了sudo
    但sudo需要控制终端(当然可以通过修改sudo的配置文件, 但这样很对用户不友好啊)
    例子: (setsid 启动的程序会失去控制终端)
    # setsid sudo ls
    sudo: sorry, you must have a tty to run sudo
    (如果你的系统没有输出这句话, 那就是你的系统的sudo配置文件允许sudo可以在这个,
    请确保已经设置了Defaults requiretty)
    没有控制中断的时候, 打开控制终端是这样的效果:
    # setsid head -c 0 /dev/tty
    head: cannot open `/dev/tty’ for reading: No such device or address
    为了解决这个问题, 所以应该使用能创建(伪)控制终端的程序来启动你的程序如: script, expect
    如:
    # setsid script -c “sudo ls” /dev/null
    或:
    # setsid expect -c ‘spawn sudo ls; expect’
    #打开控制终端成功:
    # setsid script -c ‘head -c 0 /dev/tty’ /dev/null
    # setsid expect -c ‘spawn head -c 0 /dev/tty; expect’
    不过 setsid 跟 script 组合使用有着奇怪的bug, 我这段时间非常的depression,
    这样对script, expect来说, 都是大材小用了

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code