У мене сценарій запущений із кроніту непривілейованих користувачів, який викликає деякі команди, використовуючи sudo
. За винятком цього немає. Сценарій працює добре, але команди sudo'ed мовчки не вдається.
Сценарій ідеально працює з оболонки, як йдеться про користувача.
Судо не вимагає пароля. Користувач, про якого йдеться, має
(root) NOPASSWD: ALL
доступ у/etc/sudoers
.Cron працює і виконує сценарій. Додавання простого
date > /tmp/log
дає результат у потрібний час.Це не проблема дозволів. Знову сценарій дійсно виконується, тільки не судо-команд.
Це не проблема шляху. Запуск
env
всередині запущеного сценарію показує правильну$PATH
змінну, яка включає шлях до sudo. Запустити його за допомогою повного шляху не допоможе. Команді, що виконується, надається повна назва шляху.Намагання зафіксувати вихід команди sudo, включаючи STDERR, не показує нічого корисного. Додавання
sudo echo test 2>&1 > /tmp/log
до сценарію створює порожній журнал.Сам бінарний файл sudo виконує штраф і визнає, що він має дозволи навіть під час запуску з cron всередині сценарію. Додавання
sudo -l > /tmp/log
до сценарію дає результат:Користувач ec2-користувач може виконувати наступні команди на цьому хості:
(root) NOPASSWD: ALL
Вивчення коду виходу команди за допомогою $?
показує, що вона повертає помилку (код виходу:) 1
, але помилка, здається, не створюється. Команда настільки ж проста, як і /usr/bin/sudo /bin/echo test
повертає той самий код помилки.
Що ще може бути?
Це нещодавно створена віртуальна машина, на якій працює останній AMI Amazon Linux AMI. Crontab належить користувачеві, ec2-user
а файл sudoers - типовим для розподілу.
sudo
правами / лише / для команд, необхідних у сценарії, та повністю відключити їх можливість входу.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
і мій мозок почав кричати занадто голосно, щоб продовжувати читати.