web-dev-qa-db-ja.com

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ファイルにありません。

9
Tim Mishutin

Sudoパーミッションは、変更するユーザー/グループに関するものですfrom変更するユーザーではありませんto

したがって、これらの許可行は、testuserユーザーとtestgroupグループに、パスワードなしで任意のコマンドを(すべてのユーザーとして)実行させます。

許可を与える必要がありますtoコマンドを実行するスクリプトを実行するユーザーas目的のtestuserユーザー。

それがあなたがそれを許すつもりだったと仮定することです。

8
Etan Reisner

このエラーは、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.

エラーを修正するには、sudoersファイルからrequirettyを削除します。

4
jordanm

サーバーにログインして修正し、ssh-server構成に次の行を追加しました。

> vim /etc/ssh/sshd_config

Match User <your user name>
    PermitTTY yes

ですから、-tオプションは永久に必要ありません。

0
Jeff Tian