Я пытаюсь разрешить конкретному пользователю запускать определенный файл .sh
, в котором есть sudo chmod
.
Я следовал этому руководству: Как разрешить выполнение команды для конкретного пользователя без пароля с файлом sudoers?
Мой файл sudoers теперь выглядит так:
the_user ALL=(ALL:ALL) NOPASSWD: /var/www/html/storage/fix_cache_permissions.sh
Однако, когда я запускаю команду:
sh /var/www/html/storage/fix_cache_permissions.sh
он умирает с этой ошибкой:
sudo: no tty present and no askpass program specified
Я пробовал оба с sudo внутри файла .sh
и снаружи при запуске команды. Оба результата приводят к одному и тому же сообщению об ошибке.
Вы пропускаете что-то здесь. sudoers файл относится к эти sudo
команда. Путем выполнения sh yourprogram.sh
Вы не используете эти sudo
команда, Вы используете sh
тот, который в свою очередь будет использовать sudo
впоследствии.
, Таким образом, корректный способ выполнить, что Вы хотите, путем маркировки сценария как исполняемый файл так, чтобы пользователь затем мог записать
sudo /var/www/html/storage/fix_cache_permissions.sh
, и это не попросит пароль.
Примечания:
, Так как Вы получаете эту ошибку, которая означает, что Вы не выполняете команду от своего рода терминала. Если это не просит пароль затем, я думаю, что это не будет проблемой.
порядок команд в sudoers файле важен, и они переопределяют друг друга. При означании, что, если Вы пишете Вам, управляют и впоследствии в файле, существует что-то вроде этого:
%sudo ALL=(ALL:ALL) ALL
Это переопределит что-либо. Так помещает Вашу строку в последние строки sudoers файла.
Используя этот метод можно на самом деле удалить sudo в файле, так как весь сценарий будет работать как корень.