このようなユーザーを追加しました:
$ 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
パーミッションは、変更するユーザー/グループに関するものですfrom変更するユーザーではありませんto。
したがって、これらの許可行は、testuser
ユーザーとtestgroup
グループに、パスワードなしで任意のコマンドを(すべてのユーザーとして)実行させます。
許可を与える必要がありますtoコマンドを実行するスクリプトを実行するユーザーas目的のtestuser
ユーザー。
それがあなたがそれを許すつもりだったと仮定することです。
このエラーは、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
を削除します。
サーバーにログインして修正し、ssh-server構成に次の行を追加しました。
> vim /etc/ssh/sshd_config
Match User <your user name>
PermitTTY yes
ですから、-t
オプションは永久に必要ありません。