Uruchamianie Apache jako inny użytkownik


10

Kiedy uruchamiam ps -efHpolecenie, aby wyświetlić cały proces, widzę, że Apache działa jako rooti wydaje się, że podprocesy działają jako www-data. Oto fragment:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Czy mogę sprawić, by Apache i wszystkie podprocesy działały jako inny użytkownik apache2d:apache2d? Jeśli tak to jak? Czytałem gdzieś, że ustawienia tego można znaleźć, /etc/apache2/httpd.confale ten plik wydaje się pusty? Czy można tego dokonać, zmieniając właściciela i grupę /etc/init.d/apache2skryptu, a następnie ustawiając na nim flagę setuid?

Odpowiedzi:


21

Apache musi początkowo działać jako root, aby połączyć się z portem 80. Jeśli początkowo nie uruchomisz go jako root, nie będziesz mógł powiązać z portem 80. Jeśli chcesz powiązać z portem powyżej 1024, to tak, możesz. W przeciwnym razie nie przejmuj się rootem. Jest to nadrzędny proces Apache i nie obsługuje żadnych żądań. Odrodzi procesy potomne i upuści uprawnienia do obsługi żądań.

Aby zmienić użytkownika Apache, ustaw parametry Useri Groupw konfiguracji Apache.


Cóż, przepraszam za digress, ale zauważam, że haproxy może działać jako haproxy (nie jako root) i wiązać port tcp 80. Jak to osiąga? Jakieś oświecenie?
— kiiwii

1
Tak nie jest. Procesy mogą się łączyć z portami poniżej 1024, jeśli mają uprawnienia superużytkownika. Tak więc haproxy zaczyna się jako root i upuszcza uprawnienia (prawdopodobnie) lub setuid root (mało prawdopodobne).
— bahamat

Nie musisz go uruchamiać jako root, wystarczy, że zezwolisz swojemu użytkownikowi „apache” na dostęp do ograniczonych portów (tj. Tych poniżej 1024). Ta odpowiedź wyjaśnia, w jaki sposób możesz użyć „authbind”, aby to zrobić: superuser.com/questions/710253/…
— Animal451

4

@bahamat wyjaśnia to całkiem dobrze, ale dodam trochę więcej szczegółów.

W trakcie normalnej pracy proces apache będący własnością root nie będzie wykonywać żadnych rzeczywistych operacji poza nasłuchiwaniem na porcie 80 i przekazywaniem połączeń przychodzących do swoich (bezpiecznie nieuprzywilejowanych, jako www-dataużytkownik) dzieci.

Lokalizacja głównego pliku konfiguracyjnego zależy od opcji czasu kompilacji i różni się w zależności od dystrybucji, ale /etc/apache2/apache2.confjest dobrym początkowym przypuszczeniem.

Ponadto, jeśli konfigurujesz system hostingu dla wielu użytkowników, możesz zajrzeć do SuExec i fcgid, aby proces apache dla każdego użytkownika webhostingu działał jak wspomniany użytkownik - tak, że jeśli jeden użytkownik zaniedbuje swoje bezpieczeństwo, drugi nie będzie to miało wpływu na użytkowników.


3

Przynajmniej w Ubuntu, ustawienia dla tego są w /etc/apache2/envvars. Ulepsz je, a następnie uruchom ponownie apache i jesteś gotowy do pracy.


Dzięki, pomogło mi to! Konfiguruję błędne okno Ubuntu iz jakiegoś powodu /etc/apache2/httpd.conf nie był używany do ładowania użytkownika i grupy. Envars wydaje się załatwić sprawę!
— Greg

2

Sprawdź także Apache2 ITK MPM .

Rozwidla wątek Apache z przypisanym uid/ gid, to pozwala ci dalej używać mod_php. Nigdy więcej chmod/ chownitp.


Upvoting, dla mpm_itkktórego jest znacząca poprawa w stosunku do suexec / fcgid
— Shadur

0

Mac OS X:

To, co zadziałało, to przejście do pliku konfiguracyjnego Apache:

/etc/apache2/httpd.conf

W tym pliku szukałem użytkownika lub grupy

i wpadłem na:

User _www
Group _www

Zmieniłem to na to, czego kiedykolwiek potrzebowałem użytkownik / grupa (w moim przypadku na użytkownika / grupę, który jest właścicielem moich plików aplikacji internetowej, które możesz zobaczyć. I to możesz sprawdzić, używając prostego 'ls -l' Komenda)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.