Хотелось бы узнать, возможно ли для пользователя без полномочий root использовать Linux (я использую openSUSE) для запуска apache без использования команды sudo. Учтите, что пользователь находится в той же группе, что и apache (wwwrun).
Спасибо заранее.Есть ли способ запустить/перезапустить/остановить сервер apache на linux как пользователь без полномочий root?
ответ
Проблемы, отмеченные выше benlumley, то есть файлы журнала и зарезервированные порты, могут быть легко преодолены путем настройки каталога журнала и порта в вашем httpd.conf.
Нет ограничений доступа к привилегированным портам без привилегированных аксессуаров. – kmkaplan
«Настройка порта ... в вашем httpd.conf» - это способ ограничения привилегированных портов, так как вы можете выбрать не-привилегированный порт для прослушивания. –
О, хорошо, я не понял, что нестандартный порт подойдет perfectDay. – kmkaplan
две проблемы, которые я могу думать о том, что вам необходимо преодолеть, являются:
Права доступа к файлам журнала - это вполне может быть уже установлен, чтобы позволить wwwrun получить к ним доступ, но часто является проблемой.
Пользователи без прав доступа к привилегированному порту (80) - не уверены, что/как вы можете это изменить.
Вы можете запускать Apache как любой пользователь. Просто убедитесь, что он настроен только на использование разрешенных ресурсов (каталогов, файлов и, самое главное, прослушивания на не привилегированном порту).
Чтобы он отображался на стандартном порту HTTP 80 (который является привилегированным), вам нужно будет установить как root перенаправление на ваш настоящий сервер Apache. Самый простой способ - использовать iptables. Например, если ваш сервер Apache прослушивает порт 8080:
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -j REDIRECT --to-port 8080
Если вы не можете настроить сервер так (или ваш сисадмин сделать это один раз для всех), вы должны будете использовать не привилегированный порт (что-то как Listen 8080
) и доступ к нему с помощью URL, который выглядит как http://www.example.com:8080/
Проблема в том, что я не могу стать root, поэтому я ищу способ преодолеть все, что нужно сделать как root. Но спасибо за ваш ответ. – Adriana
Я думаю, вы должны быть в состоянии сделать это путем предоставления выполнить доступ к группе, владеющей управляющую программу Apache (например, «CHMOD г + х apachectl»). Если это не работает само по себе, попробуйте также установить бит SUID владельца в программе (что-то вдоль строк «chmod u + s apachectl»).
Первый шаг позволяет пользователям вашей группы wwwrun выполнить программу apachectl. Второй шаг делает так, что когда группа запускает программу, она запускается с привилегиями владельцев программ.
Сообщите мне, если это работает, я немного ржавый с выполнением файла SUID, но я могу помочь изучить его дальше, если у вас все еще есть проблемы.
Убедитесь, что вы понимаете последствия установки бит SUID, прежде чем делать это.
Короткий ответ: Нет
Причина этого является то, что только корень может связать порты ниже 1024.
Длинный ответ: проверить http://www.debian-administration.org/articles/386
После преодоления проблемы с портами, я не думаю, что будет больше неприятностей. Просто помните, что пользователь, которому выполняется apache, должен иметь доступ на запись к файлам журнала и, возможно, некоторые другие файлы.
Однако, если вы запустите его без sudo, разработчик, вероятно, не сможет изменить пользователя, поэтому apache будет запущен как пользователь, запускающий его, а не пользователь apache.
Но по какой причине вы не хотите запускать sudo?Процесс запуска выполняется только как root, остальные выполняются под пользователем apache.
Вы можете «setuid», чтобы позволить пользователям, не являющимся root, запускать apachectl как root (без аутентификации под root).
Edit: Следует отметить, что вам требуется корневой доступ, чтобы установить это в первую очередь :-)
Я думал то же самое.Пробовал это, и он не летает. (13) Разрешено: make_sock: не удалось привязать к адресу [::]: 80 (13) Разрешение отклонено: make_sock: не удалось привязать к адресу 0.0.0.0:80 –
Моя ошибка - setuid обычно игнорируется для сценариев оболочки (по соображениям безопасности). Проверьте ответ Эмануэля. – Nick
Ответ Эмануэля действительно летает. –
Если Sudo установлен, вы можете создать файл: /etc/suduers.d/apache2reload со следующим содержанием:
username ALL=NOPASSWD:/usr/bin/service apache2 reload
Не сделал бы этого. Не могу понять, почему так много людей разместили этот вариант. По умолчанию, как только вы выполняете команду sudo, вам не нужно вводить пароль для запуска другой команды sudo, тем самым предоставляя им бесплатный root-доступ. – dtc
Это не было «по умолчанию» для двух систем, которые я только что попробовал (Ubuntu 14.04, SLES 11) - стоит проверить себя. – Nick
Правильный ответ. Изменение пользовательского apache выполняется как (обычно это не root), не имеет значения. Возражение @ dtc основано на непонимании о том, как работает sudoers conf. – jwg
вы можете просматривать свои привилегии с SUDO -l, отсюда вы можете обнаружить, что у вас есть доступ к команде повторного запуска, но, возможно, не запускать и останавливать.
Некоторые ссылки, которые я нашел, дали для этого наиболее полезный ответ. Технически, он по-прежнему действует как root, но вы можете chmod u + s файлы apache2 и apache2ctl (если вы также используете второй). Это позволяет вам запускать их с правами root, но все равно быть пользователем, который имеет те же права доступа, сохраняя целостность системы (если apache или apache2ctl не будут делать более сумасшедшие вещи, которые, я сомневаюсь, что они есть).
вы можете использовать супервизора для запуска Апач
Если вы не хотите выдавать доступ SUDO, вы также можете создать Setuid программу-оболочку. Например:
httpdctrl.c
#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";
Затем компилировать и изменить permisions с
gcc -o httpdctrl httpdctrl.c
sudo chown root:root httpdctrl
sudo chmod u+s httpdctrl
Теперь httpdctrl принадлежит корню, и setuid будет запускать его как root.
ВАЖНО: Убедитесь, что скрипт начала/остановки и все родительские директории принадлежат также и root. Также удалите доступ для записи к файлам и dirs для «other». В принципе, вы не хотите, чтобы кто-то мог редактировать или изменять файлы/файлы, которые выполняются с помощью root.
- 1. Как запустить node.js как пользователь без полномочий root?
- 2. Как фьюзер сообщает о сокетах как пользователь без полномочий root?
- 3. Linux/Python Как импортировать корневой модуль доступа root как пользователь без полномочий root?
- 4. Как перенести установку python, установленную как пользователь без полномочий root на другой сервер, на другой сервер в другом каталоге?
- 5. Разрешить разрешение пользователя root без полномочий root на nfs share
- 6. Запуск docker как пользователя без полномочий root или запуск jenkins на tomcat как пользователь root
- 7. Как запустить gunicorn/сервер приложений python как пользователь без полномочий root?
- 8. Запустить Rails-приложение как пользователь без полномочий root, но попросить пароль root для доступа к файлам
- 9. Есть ли способ запустить скрипт (ksh) как пользователь без полномочий root при входе в систему, кроме добавления его в .profile?
- 10. Выпускать привилегии как обычного пользователя без полномочий root для песочницы?
- 11. Как установить ReviewBoard как пользователя без полномочий root на Linux Redhat?
- 12. Запуск процесса bootRun на порту 80 как пользователь без полномочий root с помощью Spring
- 13. webserver node.js как пользователь не root
- 14. Как отправить ловушку snmp в качестве пользователя без полномочий root?
- 15. Есть ли способ выполнить приложение CGI .exe на Linux + Apache
- 16. Установка CUDA как пользователя без полномочий root без GPU
- 17. Как использовать CPAN в качестве пользователя без полномочий root?
- 18. Как запустить Java-программу как root, но перейти на пользователя без полномочий root
- 19. Как изменить системное время сервера Ubuntu в командной строке как пользователь без полномочий root?
- 20. Можно ли использовать rsForEach RenderScript для ядра без полномочий root?
- 21. Apache как root на ubuntu
- 22. Есть ли команда, которую я могу запустить как пользователь без полномочий root, чтобы узнать, может ли пользователь выполнить определенную команду sudo.
- 23. Ubuntu: разрешить пользователю без полномочий root создавать и олицетворять пользователей
- 24. Как вы используете запуск pm2 с пользователем без полномочий root?
- 25. Как установить бит setuid в программе пользователя без полномочий root?
- 26. Сервер Apache Tomcat на linux
- 27. Установите gcc на linux без привилегий root
- 28. Как запустить приложение Rails в контексте без полномочий root?
- 29. Как выполнять команды Docker как пользователь без полномочий root в Docker в Docker?
- 30. Предпочтительное место для PID-файла системного демона запускается как пользователь без полномочий root
ЕСЛИ Я знал, что я отвечу, но вместо этого я скажу вам, что это не вопрос программирования :) Серьезно, однако, я не знаю ответа. На самом деле это отличный вопрос. –
Спасибо и да, я не был уверен, подходит ли этот вопрос в программировании, однако я попробовал :). – Adriana
Возможно, это связано с программированием, поскольку, по моему опыту, самая распространенная причина для этого, заключается в том, что программист может более легко перезапустить apache в своей коробке разработки. –