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?

Mridang Agarwalla
źródło

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.

bahamat
źródło
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.

Shadur
źródło
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.

mlissner
źródło
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.

Olli
źródło
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)

Rtęć
źródło