Не может SUDO SU больше ," нет tty присутствует и не указана программа askpass"

у меня есть корневой сервер, где я отключил вход через root пользователя и создал другого пользователя, который находится в списке sudoer. Поэтому, когда я хочу работать на сервере я:

ssh myusername@IP_ADDRESS

на сервере:

sudo su

введите мой пароль, чтобы получить права root. Это хорошо работало в течение 6 месяцев. Сегодня я получаю это сообщение, когда делаю sudo su:

sudo: no tty present and no askpass program specified

что происходит Хак? Что означает эта ошибка и почему я ее получаю?? Без root прав не так много сервер. Есть идеи, как это исправить?

2 ответов


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 пытается запросить пароль root, и псевдо-tty не выделяется.

вы должны либо войти в систему как root, либо настроить следующие правила в своем /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