Назад | Перейти на главную страницу

Необходимо разрешить пользователю перезапускать bind9

Я хочу дать пользователю www-data возможность перезапустить bind9 с помощью этой команды

перезапуск службы bind9

На данный момент они могут выполнить его, и он остановит bind9, но не перезапустит его снова, жалуясь, что разрешения не позволяют выполнить chmod файла «named».

Можешь указать мне направление, которое мне нужно сделать?

Обновить

Хорошо, поэтому я добавил строку в sudoers по запросу.

www-data      ALL=NOPASSWD: /etc/init.d/bind9

У него все еще есть проблема:

root@LAMPREY:~# su www-data
$ service bind9 restart
 * Stopping domain name service... bind9                                        rndc: error: none:0: open: /etc/bind/rndc.key: permission denied
rndc: could not load rndc configuration
                                                                         [ OK ]
 * Starting domain name service... bind9                                        chmod: changing permissions of `/var/run/named': Operation not permitted
$ exit

Затем я также попытался запустить другую команду

/etc/init.d/bind9 restart
 * Stopping domain name service... bind9                                        rndc: error: none:0: open: /etc/bind/rndc.key: permission denied
rndc: could not load rndc configuration
                                                                         [ OK ]
 * Starting domain name service... bind9                                        chmod: changing permissions of `/var/run/named': Operation not permitted
$ exit

с тем же результатом

Чтобы ответить на все три вышеупомянутых: sudo это чертовски перебор, когда rndc уже имеет необходимые вам возможности, а также возможность перезагрузки серверов имен Другой чем на localhost.

Сценарий rndc-confgen сгенерирует для вас файл rndc.conf, который вы можете сохранить в /etc/rndc.conf и сделать доступным для чтения www-data:

shadur@Romulus:~$ rndc-confgen 
# Start of rndc.conf
key "rndc-key" {
    algorithm hmac-md5;
    secret "zGHUrg0X5Id4rn27A0Nb9A==";
};

options {
    default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#   algorithm hmac-md5;
#   secret "zGHUrg0X5Id4rn27A0Nb9A==";
# };
# 
# controls {
#   inet 127.0.0.1 port 953
#       allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

Закомментированную часть можно добавить в /etc/bind/named.conf чтобы сообщить серверу, что он должен правильно реагировать на этот ключ (который генерируется случайным образом при запуске rndc-confgen.

После того, как вы выполнили описанное выше и перезапустили привязку один раз, пользователь www-data должен иметь возможность вводить команды для привязки через rndc команда.

rndc restart полностью перезапустит сервер; rndc reconfig заставит его перезагрузить named.conf файл; rndc reload проверит и перезагрузит все зоны; rndc reload <zone> проверит и перезагрузит как раз.

Есть и другие команды; вы можете получить список, просто набрав rndc без каких-либо команд.

Не используйте бензопилу, если подойдет скальпель; не использовать sudo когда вам даже не нужно быть root.

Почему бы вам не предоставить пользователю доступ к sudo запустить эту конкретную команду? Это как раз та ситуация, для которой предназначен sudo.

Добавление

www-data somehost= /sbin/service bind9 restart

предоставит пользователю www-data разрешение на запуск service bind9 restart (и только эту команду) на каком-то хосте.

почему бы не дать им права sudo просто перезапустить bind?

www-data      ALL=NOPASSWD: /etc/init.d/bind9

Затем вы можете запустить его, и он должен работать .. Также вы можете использовать rndc, если вы настроите свои ключи для перезагрузки привязки

Завершение ответа @Mike

Бегать visudo и файл /etc/sudoers откроется в вашем текстовом редакторе по умолчанию. Не открывайте файл другим способом.

Затем добавьте следующую строку, желательно в конце

www-data      ALL = NOPASSWD: /usr/sbin/service bind9 restart

Сохраните и выйдите из редактора. Теперь пользовательские www-data могут выполнить следующее, чтобы перезапустить привязку

sudo /usr/sbin/service bind9 restart

rndc reload должен работать нормально из вызова PHP system () без изменения определенных разрешений. Я согласен с тем, что перезапуск привязки не требуется, поскольку, если вы позволите пользователю это сделать, вы, вероятно, в конечном итоге потратите больше времени на перезапуск службы, чем она на самом деле запущена и находится в сети для обслуживания запросов.