Есть ли способ запустить / перезапустить / остановить сервер apache в Linux как пользователь без полномочий root? [закрыто]

17

Я хотел бы знать, возможно ли для пользователя без полномочий root использовать linux (я использую openSUSE) для запуска apache без использования команды sudo. Учтите, что пользователь находится в той же группе, что и apache (wwwrun).
Спасибо заранее.

    
задан Adriana 08.02.2009 в 14:04
источник
  • ЕСЛИ Я знал, что я отвечу, но вместо этого я скажу вам, что это не вопрос программирования :) Серьезно, однако, я не знаю ответа. На самом деле это отличный вопрос. –  Dan Rosenstark 08.02.2009 в 14:22
  • Спасибо и да, я не был уверен, подходит ли этот вопрос в программировании, однако я дал ему попробовать :). –  Adriana 08.02.2009 в 14:57
  • Возможно, это связано с программированием, поскольку, по моему опыту, наиболее распространенная причина для этого, заключается в том, что программист может более легко перезапустить apache в своей коробке разработки. –  Dave Sherohman 09.02.2009 в 00:23

11 ответов

3

Проблемы, отмеченные выше benlumley, то есть файлы журналов и зарезервированные порты, можно легко преодолеть, настроив каталог журнала и порт в вашем httpd.conf.

    
ответ дан Rob Wells 08.02.2009 в 14:40
  • Нет ограничений доступа к привилегированным портам без привилегированных аксессуаров. –  kmkaplan 09.02.2009 в 00:11
  • «Настройка порта ... в вашем httpd.conf» - это способ ограничения привилегированных ограничений доступа к портам, так как вы можете выбрать непривилегированный порт для прослушивания. –  Dave Sherohman 09.02.2009 в 00:21
  • О, хорошо, я не понял, что нестандартный порт подойдет perfectDay. –  kmkaplan 10.02.2009 в 12:29
11

Вы можете запускать Apache как любой пользователь. Просто убедитесь, что он настроен только на использование разрешенных ресурсов (каталогов, файлов и, самое главное, прослушивания на не привилегированном порту).

Чтобы он отображался на стандартном порту HTTP 80 (который является привилегированным), вам придется настроить как root перенаправление на ваш настоящий сервер Apache. Самый простой способ - использовать iptables. Например, если ваш сервер Apache прослушивает порт 8080:

iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -j REDIRECT --to-port 8080

Если вы не можете настроить сервер, как это (или ваш sysadmin сделать это один раз для всех), вам придется использовать не-привилегированный порт (что-то вроде Listen 8080 ) и получить к нему доступ, используя URL-адрес, который выглядит как Ссылка

    
ответ дан kmkaplan 08.02.2009 в 14:16
  • Проблема в том, что я не могу стать root, поэтому я ищу способ преодолеть все, что нужно сделать, как root. Но спасибо за ваш ответ. –  Adriana 08.02.2009 в 23:49
6

Если вы установили sudo, вы можете создать файл: /etc/suduers.d/apache2reload со следующим содержимым:

username    ALL=NOPASSWD:/usr/bin/service apache2 reload
    
ответ дан Emanuel Greisen 15.09.2011 в 07:44
  • Не сделал бы этого. Не могу понять, почему так много людей разместили этот вариант. По умолчанию, как только вы выполняете команду sudo, вам не нужно вводить пароль для запуска другой команды sudo, тем самым предоставляя им бесплатный root-доступ. –  dtc 12.06.2013 в 02:52
  • Это не было «по умолчанию» для двух систем, которые я только что пробовал (Ubuntu 14.04, SLES 11) - стоит проверить себя. –  Nick 26.06.2014 в 21:53
  • Это правильный ответ. Изменение пользовательского apache выполняется как (обычно это не root), не имеет значения. Возражение @ dtc основано на непонимании о том, как работает sudoers conf. –  jwg 16.07.2015 в 09:46
5

Короткий ответ: Нет

Причиной этого является то, что только root может связывать порты ниже 1024.

Длинный ответ: посмотрите Ссылка

Как только вы преодолеете проблему с портами, я не думаю, что будет больше неприятностей. Просто помните, что пользователь, которому выполняется apache, должен иметь доступ для записи к файлам журнала и, возможно, к некоторым другим файлам.

Однако, если вы запустите его без sudo, разработчик, вероятно, не сможет изменить пользователя, поэтому apache будет запущен как пользователь, запускающий его, вместо пользователя apache.

Но почему вы не хотите запускать sudo? Процесс запуска выполняется только как root, остальные выполняются под пользователем apache.

    
ответ дан Jimmy Stenke 08.02.2009 в 14:18
3

Если вы не хотите выдавать доступ к sudo, вы также можете создать программу-упаковщик setuid. Например:

Ссылка

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <strings.h>

// allow start/stop/restart of apache by non-root users

int main(int argc, char **argv)
{
  char *cmd, *cmd2, *usage;

  // UPDATE THIS LINE:
  cmd = "/your/path/to/httpd/sbin/apachectl";
  cmd2 = "apachectl";
  usage = "Usage: COMMAND [start|stop|restart]\n";

  if ( argc != 2 ) {
    printf(usage);
    exit(1);
  }

  setegid(0);
  seteuid(0);
  setgid(0);
  setuid(0);

  if ( strncmp(argv[1], "start", 5) == 0 ) {
    if (execl(cmd, cmd2, "start", (char*)0) < 0) {
     perror("Error");
    }
  } else if ( strncmp(argv[1], "stop", 4) == 0 ) {
    if (execl(cmd, cmd2, "stop", (char*)0) < 0) {
     perror("Error");
    }
  } else if ( strncmp(argv[1], "restart", 7) == 0 ) {
    if (execl(cmd, cmd2, "restart", (char*)0) < 0) {
     perror("Error");
    }
  } else {
    printf(usage);
    exit(1);
  }
  exit(0);
}

Обновить путь по адресу:

  // UPDATE THIS LINE:
  cmd = "/your/path/to/httpd/sbin/apachectl";

Затем скомпилируйте и измените разрешения с помощью

gcc -o httpdctrl httpdctrl.c
sudo chown root:root httpdctrl
sudo chmod u+s httpdctrl

Теперь httpdctrl принадлежит root, а setuid будет запускать его как root.

ВАЖНО: убедитесь, что скрипт start / stop и все родительские директории принадлежат root. Также удалите доступ для записи к файлам и dirs для «other». В принципе, вы не хотите, чтобы кто-то мог редактировать или изменять файлы / файлы, которые выполняются с помощью root.

    
ответ дан Kevin Seifert 25.11.2014 в 17:36
1

Две проблемы, о которых я могу думать, нужно преодолеть:

  1. Разрешения на файлы журнала - они могут быть уже настроены, чтобы разрешить wwwrun доступ к ним, но часто это проблема.

  2. Пользователь без прав доступа к привилегированному порту (80) - не уверен, что / как вы можете это изменить.

ответ дан benlumley 08.02.2009 в 14:09
0

Я думаю, вы должны это сделать, предоставив возможность выполнения доступа к группе, владеющей программой управления Apache (например, «chmod g + x apachectl»). Если это не работает само по себе, попробуйте также установить бит SUID владельца в программе (что-то вдоль строк «chmod u + s apachectl»).

Первый шаг позволяет пользователям вашей группы wwwrun выполнить программу apachectl. Второй шаг делает так, что когда группа запускает программу, она запускается с привилегиями владельцев программ.

Сообщите мне, если это сработает, я немного ржавый с SUID, но я могу помочь изучить его дальше, если у вас все еще есть проблемы.

Убедитесь, что вы понимаете последствия установки бит SUID, прежде чем делать это, хотя.

    
ответ дан Jack Leow 08.02.2009 в 14:17
0

Вы можете «setuid» разрешить пользователям без полномочий root запускать apachectl как root (без проверки подлинности как root).

Пример

Изменить: следует упомянуть, что вам нужен root-доступ, чтобы установить это в первую очередь: -)

    
ответ дан Nick 17.02.2009 в 16:11
  • Я думал то же самое. Пробовал это, и он не летает. (13) Разрешено: make_sock: не удалось привязать к адресу [::]: 80 (13) Разрешено: make_sock: не удалось привязать к адресу 0.0.0.0:80 –  Jonathan Mitchell 25.06.2014 в 10:48
  • Моя ошибка - setuid обычно игнорируется для сценариев оболочки (из соображений безопасности). Проверьте ответ Эмануэля. –  Nick 26.06.2014 в 21:51
  • Ответ Эмануэля действительно летает. –  Jonathan Mitchell 02.07.2014 в 11:51
0

Вы можете просматривать свои привилегии с помощью sudo -l, здесь вы можете обнаружить, что у вас есть доступ к команде перезагрузки, но, возможно, не начинайте и не останавливайтесь.

    
ответ дан Opentuned 06.09.2012 в 12:19
0

Некоторая ссылка, которую я нашел, дал для этого наиболее полезный ответ. Технически, он по-прежнему действует как root, но вы можете chmod u + s файлы apache2 и apache2ctl (если вы также используете второй). Это позволяет вам запускать их с правами root, но все равно быть пользователем, который имеет те же права доступа, сохраняя целостность системы (если apache или apache2ctl не будут делать более сумасшедшие вещи, которые, я сомневаюсь, что они есть).     

ответ дан dtc 12.06.2013 в 02:51
-1

вы можете использовать супервизор для запуска apache

    
ответ дан Tuong Le 26.03.2014 в 07:35