Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Tim MishutinОтветов: 3

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

$ 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.

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

bashlinuxsudotty

Ответы

Ответ 1 · рейтинг 8 · Etan Reisner

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

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

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

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

Ответ 2 · рейтинг 4 · jordanm

Эта ошибка возникает, когда в вашем файле 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.

Ответ 3 · Jeff Tian

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

> vim /etc/ssh/sshd_config

Match User <your user name>
    PermitTTY yes

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы