Если я правильно понимаю ваши комментарии, проблема заключается в том, что команда будет отправлена через соединение, которое не имеет возможности ввести пароль, который по умолчанию запрашивает sudo. Кроме того, во многих дистрибутивах ОС sudo по умолчанию требует TTY, чего может не быть в этой программе.
Однако sudo может иметь очень детализированную структуру разрешений, позволяющую одному или нескольким пользователям выполнять одну конкретную команду без пароля и TTY. Ниже я покажу три способа настроить это для ваших нужд. Какой бы вы ни выбрали, пользователь теперь сможет sudo rndc reload
вводить команду без необходимости ввода пароля.
(Кроме того, это может быть ненужным, но ... пожалуйста, не забудьте сделать резервную копию файла sudoers перед его редактированием, чтобы сохранить оболочку, в которой вы являетесь пользователем root, на случай, если вам потребуется вернуться к резервной копии, и отредактировать он использует visudo
вместо sudo vi /etc/sudoers
. Надеюсь, эти меры предосторожности будут ненужными, но ... лучше иметь их, а не нуждаться в них, чем наоборот!)
1. Если вы не хотите требовать TTY для каких-либо запросов
Самый простой способ избавиться от требований TTY (если он существует) - убедиться, что строка, начинающаяся с Defaults
in /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
для этого?