sudoers NOPASSWD: sudo: нет tty и не указана программа askpass

Я добавил пользователя следующим образом:

$ adduser --system --home /no/home --no-create-home --group --disabled-password --disabled-login testuser

Добавил пользователя в группу:

$ adduser testuser testgroup

добавлены строки в sudoers (visudo):

testuser    ALL=(ALL) NOPASSWD: ALL
%testgroup         ALL=(ALL:ALL) NOPASSWD: ALL

Когда я пытаюсь запустить скрипт bash со следующим содержимым:

#!/bin/sh
sudo -u testuser /usr/bin/php /usr/local/bin/script.php

Но когда я запускаю этот скрипт, я получаю сообщение об ошибке в журнале:

sudo: no tty present and no askpass program specified

Изменить: requiretty нет в файле sudoers.


person Tim Mishutin    schedule 29.12.2014    source источник
comment
Разве sudo разрешения для пользователя/группы, от которых вы меняете, не являются пользователем, которого вы меняете на? Так разве эти строки не позволяют пользователю testuser и группе testgroup выполнять любую команду (как и все) без пароля? Разве вам не нужно давать разрешение пользователю, запускающему скрипт, на выполнение команд как testuser для того, что вы хотите? Предполагая, что это то, что вы хотели разрешить?   -  person Etan Reisner    schedule 30.12.2014
comment
@EtanReisner Я тоже пробовал, но все равно получаю ту же ошибку.   -  person Tim Mishutin    schedule 30.12.2014
comment
Вы тоже пробовали что? Запустить sudo в качестве тестового пользователя? Что конкретно вы запускали/пробовали? Какой пользователь запускает исходный скрипт?   -  person Etan Reisner    schedule 30.12.2014
comment
@EtanReisner Ты был прав. Пришлось добавить NOPASSWD для группы клиента. Теперь работает корректно. Спасибо.   -  person Tim Mishutin    schedule 30.12.2014
comment
возможный дубликат sudo: нет tty и нет программы askpass указано -- netbeans   -  person kenorb    schedule 29.03.2015


Ответы (3)


sudo разрешения касаются пользователя/группы, от которых вы меняете, а не пользователя, которого вы меняете на.

Точно так же эти строки разрешений позволяют пользователю testuser и группе testgroup выполнять любую команду (как любой) без пароля.

Вам нужно дать разрешение пользователю, запускающему скрипт, на выполнение команд от имени пользователя testuser для того, что вы хотите.

Предполагая, что это то, что вы имели в виду, чтобы позволить это.

person Etan Reisner    schedule 30.12.2014

Эта ошибка возникает, когда в вашем файле sudoers указано requiretty. Из справочной страницы sudoers:

   requiretty      If set, sudo will only run when the user is 
                   logged in to a real tty.  When this flag is set, 
                   sudo can only be run from a login session and not 
                   via other means such as cron(8) or cgi-bin scripts.  
                   This flag is off by default.

Чтобы исправить ошибку, удалите requiretty из файла sudoers.

person jordanm    schedule 29.12.2014
comment
Спасибо, но это не помогло. requiretty отсутствует в файле sudoers. Я обновил свой вопрос. - person Tim Mishutin; 30.12.2014

Я исправил это, войдя на сервер и добавив следующие строки в конфигурацию ssh-сервера:

> vim /etc/ssh/sshd_config

Match User <your user name>
    PermitTTY yes

Так что мне не нужны опции -t постоянно.

person Jeff Tian    schedule 17.05.2019