Я хочу предоставить доступ не-sudo пользователю без полномочий root на моем компьютере, есть пользовательский dns-manager, его единственная роль - запускать все команды BIND (rndc, dnssec-keygen) и т. Д.
Теперь каждый раз, когда ему нужно выполнить команду, он набирает:
sudo rndc reload
Есть ли способ избавиться от этого sudo, но только для определенного набора команд (и только для dns-manager)?
Если я правильно понимаю ваши комментарии, проблема здесь в том, что команда будет выдана через соединение, которое не имеет возможности ввести пароль, который sudo по умолчанию запрашивает. Кроме того, во многих дистрибутивах ОС sudo по умолчанию будет требовать TTY, которого эта программа может не иметь.
Однако sudo может иметь очень детализированную структуру разрешений, что позволяет одному или нескольким пользователям выполнять одну конкретную команду без пароля и TTY. Ниже я покажу три способа настроить это для ваших нужд. Какой бы вариант вы ни выбрали, теперь пользователь сможет выполнить команду sudo rndc reload
без ввода пароля.
(Кроме того, это может быть ненужным, но ... пожалуйста не забудьте сделать резервную копию вашего файла sudoers перед его редактированием, чтобы оболочка, в которой вы находитесь, была открыта, на случай, если вам нужно вернуться к резервной копии, и отредактировать ее, используя visudo
вместо того sudo vi /etc/sudoers
. Надеюсь, в этих мерах предосторожности нет необходимости, но ... лучше иметь их и не нуждаться в них, чем наоборот!)
Самый простой способ избавиться от требований TTY (если они есть) - убедиться, что строка, начинающаяся с Defaults
в /etc/sudoers
не содержит слова requiretty
- вместо этого он должен содержать !requiretty
. Однако если вы это сделаете, это означает, что нет Для команды sudo потребуется tty!
Вам также нужно будет добавить строку
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Это можно сделать, установив значение по умолчанию для этого пользователя, например:
Defaults:rndcuser !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Это немного сложнее из-за синтаксиса файла 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 находится в /etc/sudoers
в большинстве систем. Вы можете узнать его синтаксис в Google или с помощью man sudo
команда.
Вы не должны редактировать этот файл напрямую; это может привести к условиям гонки безопасности. Вместо этого используйте visudo
команда (которая является оболочкой вашего $EDITOR
переменная окружения).
После настройки sudo вы можете легко обернуть это видимыми командами. Это очень просто:
/usr/local/dnsadmin/bin
)Создайте сценарий оболочки для команд, которые вы хотите использовать без sudo. Это будет очень простая команда, например, /usr/local/dnsadmin/bin/rndc
будет:
#!/bin/bash
exec /usr/bin/sudo /usr/sbin/rndc "$@"
Поместите этот каталог в их PATH
переменная среды (например, общесистемной или их локальной .profile
).
Хотя это не общее решение в конкретном случае rndc
тебе не нужно sudo
вообще.
rndc
может общаться с любым named
процесс либо через локальный сокет, либо через удаленный порт, используя секретный ключ для аутентификации. По умолчанию (или, по крайней мере, для debian, дистрибутива, который я использую) этот файл можно найти в /etc/bind/rndc.key
и обычно доступен для чтения только пользователю bind
и группа bind
.
Любой, у кого есть доступ для чтения к этому ключевому файлу (или его идентичной копии), может использовать rndc
для управления сервером BIND, поэтому самым простым решением в этом конкретном случае было бы добавить пользователя в bind
группа.
Удивительное количество обычных демонов имеют нечто подобное (лично я все еще выясняю возможности powerdns в этом отношении, но пока это выглядит многообещающим). Если ты не хочешь делать sudo
вам нужно будет в каждом конкретном случае проверять, возможно ли то, чего вы хотите достичь.
Вы не хотите использовать sudo для предоставления root для некоторых команд. Вместо этого вы можете chmod 4750 конкретную программу [которая может заключать команду в оболочку], чтобы повысить права обычного пользователя на выполнение ее как root.