Перезапустить nginx без sudo?
Итак, я хочу, чтобы уметь: развертывать без необходимости вводить пароли. Я установил все закрытые ключи, чтобы я мог нормально добраться до удаленных серверов, и теперь я использую svn over ssh, поэтому никаких паролей нет.
У меня есть одна последняя проблема, мне нужно перезапустить nginx. Сейчас у меня есть sudo/etc/init.d/nginx reload. Это проблема b/c, в которой используется пароль capistrano, тот, который я только что удалил b/c. Я использую ключи. Любые идеи о том, как перезапустить nginx с паролем?
Ответы
Ответ 1
Я просто провел хороший час, глядя на подстановочные знаки sudoer и тому подобное, пытаясь решить эту точную проблему. По правде говоря, все, что вам действительно нужно, это корневой исполняемый файл script, который перезапускает nginx.
Добавьте это в файл /etc/sudoers
username hostname ALL=NOPASSWD: /path/to/script
Напишите script как root
#! /bin/bash
/bin/kill -HUP `cat /var/run/nginx.pid`
Сделайте исполняемый файл script
Test.
sudo /path/to/script
Ответ 2
Существует более высокий ответ на переполнение стека, который не связан с записью пользовательского script:
Лучшей практикой является использование /etc/sudoers.d/myuser
Папка /etc/sudoers.d/
может содержать несколько файлов, которые позволяют пользователям для вызова материала с использованием sudo без root.
Файл обычно содержит пользователя и список команд, которые пользователь может работать без указания пароля.
Инструкция:
Во всех командах замените myuser на имя вашего пользователя, которое вы хотите использовать для перезапуска nginx без sudo.
-
Откройте файл sudoers для вашего пользователя:
$ sudo visudo -f /etc/sudoers.d/myuser
-
Откроется редактор. Там вы вставляете следующую строку. Это позволит пользователю запускать nginx, перезапускать и останавливать:
$ myusername ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart
-
Сохранить, нажав ctrl + o. Он спросит, где вы хотите сохранить, просто нажмите enter, чтобы подтвердить значение по умолчанию. Затем выйдите из редактора с помощью ctrl + x.
Теперь вы можете перезапустить (и запустить и остановить) nginx без пароля. Попробуйте.
-
Откройте новый сеанс (иначе вы можете просто не запрашивать пароль sudo, потому что он не был отключен):
$ ssh [email protected]
-
Остановить nginx
$ sudo /usr/sbin/service nginx stop
-
Подтвердите, что nginx остановился, проверив ваш сайт или запустив ps aux | grep nginx
-
Запустите nginx
$ sudo /usr/sbin/service nginx start
-
Подтвердите, что nginx запустил проверку вашего веб-сайта или запуск ps aux | grep nginx
PS: Обязательно используйте sudo /usr/sbin/service nginx start|restart|stop
, а не sudo service nginx start|restart|stop
.