不能SUDO SU了,"没有tty存在且没有指定askpass程序"

Upv*_*ote 7 linux ssh sudo

我有一个根服务器,我通过root用户禁用了登录,并创建了另一个位于sudoer列表中的用户.所以,当我想在服务器上工作时,我会:

ssh myusername@IP_ADDRESS
Run Code Online (Sandbox Code Playgroud)

在服务器上:

sudo su
Run Code Online (Sandbox Code Playgroud)

输入我的密码以获得root权限.这个工作正常6个月了.今天我在做的时候得到了这个消息sudo su:

sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)

黑客正在发生什么?这个错误意味着什么,为什么我会得到它?没有root权限我在服务器上做不了多少.知道如何解决这个问题吗?

Ken*_*ter 17

sudo尝试打开/dev/tty以进行读写,并在失败时打印该错误.您已在评论中指出系统中缺少/ dev/tty.

Sudo可以选择-S从标准输入而不是/ dev/tty读取密码.你应该能够sudo -S成为root用户.

关于如何恢复/ dev/tty,重启服务器就足够了; 系统可能会在启动期间重新创建/ dev中的所有设备.或者,要创建设备,请使用该mknod命令,但您需要知道tty设备的正确主要和次要编号.在我可用的Ubuntu系统上,我在/ dev中看到这些条目:

crw------- 1 root root      5,   1 Apr 16 18:36 console
crw-rw-rw- 1 root tty       5,   2 Sep 24 15:35 ptmx
crw-rw-rw- 1 root tty       5,   0 Sep 24 14:25 tty
Run Code Online (Sandbox Code Playgroud)

在这种情况下,主要编号为5,次要编号为0./dev/console和/ dev/ptmx具有相同的主编号.所以我检查/ dev/console或/ dev/ptmx以找到正确的主号码,然后运行:

mknod /dev/tty c major 0
Run Code Online (Sandbox Code Playgroud)

其中"主要"是正确的主要数字.

重新创建/ dev/tty后,请确保权限正确:

chmod 666 /dev/tty
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 6

它失败了,因为sudo它试图提示root密码并且没有分配伪tty.

您必须以root用户身份登录或在/etc/sudoers (或:)中设置以下规则sudo visudo:

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)

然后确保您的用户属于admin组(或wheel).

理想情况下(更安全)将root权限限制为可以指定为的特定命令 %admin ALL=(ALL) NOPASSWD:/path/to/program