Задать вопрос
a_ex
@a_ex
Веб-разработчик

Как перезагрузить nginx без root'а?

Или может быть пойти каким-то другим путём.

Хочу сделать веб-интерфейс для добавления сайта.
Очень не хочется помещать пароль в директорию `/var/www/` или давать www-data особые права.
Но даже сделать `yes $PASSW | su root` не выйдет: `su: must be run from a terminal`.

Есть идея обернуть утилитой, которая делает эмуляцию клавиатуры, но тогда ведь придётся пароль светить?

Нагуглить ничего дельного не смог.

С уважением, Александр.
  • Вопрос задан
  • 4591 просмотр
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
savostin
@savostin
Еще один программист
По крону от root'а запускать скрипт, который будет проверять какой-то флаг (файл, mysql, не важно), который будет выставляться из web.
Ответ написан
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Правильный вариант это настройка прав пользователя от которого выполняется скрипт, что бы sudo на определенную команду выполнялось без пароля.
Не являюсь админом, но знаю что в CentOS это решается утилитой visudo

мы используем скриптик

#!/bin/sh
d=$1
if [ -f /etc/nginx/conf.d/$1.conf ];then
  echo $d already exist
  exit 1
fi

cat <<EOT >/etc/nginx/conf.d/$1.conf
server {
  server_name  www.$d;
  return       301 http://$d\$uri;
}

server {
  server_name  $d;
  set \$site_root '/www/$d';
  root \$site_root;

  include /etc/nginx/conf.d/common.inc;

  location / {
    include /etc/nginx/conf.d/common-loc.inc;
  }
}
EOT

mkdir /www/$d
[ -f /www/$d/index.php ] || cat <<EOT >/www/$d/index.php
<? phpinfo(); ?>
EOT

service nginx reload
но дергаем его из консоли.

Соответственно надо настроить visudo так, что бы у пользователя из под которого работает веб-сервер были права на sudo этого скрипта. И все, проблема решена.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Используйте sudo с NOPASSWD
Ответ написан
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
1. Можно создать пользователя, занести его в /etc/sudoers/
2. Создать sh скрипт, сделать владельцем файла этого юзера.
3. Задать SUID для скрипта, чтобы он запускался от имени владельца
4. Запускать sh скрипт через ajax+php (функция exec ), разумеется это как вариант

Про SUID и STICKY BIT

Или можно без SUID обойтись, записать в /etc/sudoers www-data ALL = NOPASSWD: /home/script.sh
Ответ написан
@metajiji
Добавлю в копилку еще вариант с expect или empty, если сильно принципиально вводить пароль :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы