Я хочу дать пользователю 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 () без изменения определенных разрешений. Я согласен с тем, что перезапуск привязки не требуется, поскольку, если вы позволите пользователю это сделать, вы, вероятно, в конечном итоге потратите больше времени на перезапуск службы, чем она на самом деле запущена и находится в сети для обслуживания запросов.