我有一个根服务器,我通过用户root禁用login,并创build另一个用户在sudoer列表中。 所以当我想要在服务器上工作时,我需要:
ssh myusername@IP_ADDRESS
在服务器上:
sudo su
input我的密码以获得root权限。 这工作现在罚款6个月。 今天我在做sudo su:
时得到这个消息sudo su:
sudo: no tty present and no askpass program specified
什么黑客正在发生? 这个错误是什么意思,为什么我得到它? 没有root权限,我无法在服务器上做太多的事情。 任何想法如何解决这个问题?
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
在这种情况下,主数字是5,次数是0. / dev / console和/ dev / ptmx具有相同的主数字。 所以我会检查/ dev / console或/ dev / ptmx找到正确的主号码,然后运行:
mknod /dev/tty c major 0
“主要”是正确的主要数字。
重新创建/ dev / tty之后,请确保权限是正确的:
chmod 666 /dev/tty
它失败,因为sudo
试图提示根密码,并没有伪tty分配。
您必须以根用户身份登录或在/etc/sudoers
(或: sudo visudo
)中设置以下规则:
# Members of the admin group may gain root privileges. %admin ALL=(ALL) NOPASSWD:ALL
然后确保您的用户属于admin
组(或wheel
)。
理想情况下(更安全),将root权限限制为可以指定为%admin ALL=(ALL) NOPASSWD:/path/to/program
命令%admin ALL=(ALL) NOPASSWD:/path/to/program