Якщо я правильно розумію ваші коментарі, проблема тут полягає в тому, що команда буде видана через з'єднання, яке не має можливості вводити пароль, який sudo за замовчуванням вимагає. Крім того, у багатьох дистрибутивах ОС sudo за замовчуванням вимагає TTY - чого ця програма може не мати.
Однак, sudo може мати дуже дрібну структуру дозволів, що дозволяє дозволити одному або більше користувачам видавати одну конкретну команду без пароля та TTY. Нижче я покажу три способи налаштувати це для ваших потреб. Що б ви не вибрали, користувач тепер зможе видавати команду sudo rndc reload
без необхідності введення пароля.
(Крім того , це може бути зайвим, але ... будь ласка , чи не забудьте зробити резервну копію файлу sudoers , перш ніж редагувати його, щоб зберегти оболонку , де ви корінь відкритим в разі , якщо вам потрібно повернутися до резервної копії, і редагувати це використовується visudo
замість sudo vi /etc/sudoers
. Сподіваємось, ці запобіжні заходи будуть непотрібними, але ... краще мати їх і не потребувати їх, ніж зворотне!)
1. Якщо ви не хочете вимагати TTY для будь-яких запитів
Найпростіший спосіб позбутися вимог TTY (якщо такий існує) - переконатися, що рядок, що починається з Defaults
на /etc/sudoers
, не містить слова requiretty
- натомість він повинен містити !requiretty
. Однак якщо ви це зробите, це означає, що жодна команда sudo не потребуватиме tty!
Вам також потрібно буде додати рядок
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
2. Якщо ви хочете вимагати TTY для всіх користувачів, крім цього
Це можна зробити, встановивши за замовчуванням для цього одного користувача, як-от цього:
Defaults:rndcuser !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
3. Якщо ви хочете вимагати TTY для всіх команд, крім цієї однієї команди цим користувачем
Це трохи складніше, завдяки синтаксису файлу sudoers. Вам потрібно буде створити псевдонім для команди, а потім встановити типовий псевдонім для команди, як-от так:
Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD
sudo
призначений. Які заперечення вашого бізнесу щодо його використанняsudo
для цього?