Linux: jak zezwolić użytkownikowi na ponowne uruchomienie apache?

35

Mam skrypt uruchamiany przez użytkownika innego niż root, który pod pewnymi warunkami powinien zrestartować apache httpd.

Jaki byłby dla mnie najprostszy sposób, aby pozwolić użytkownikowi to zrobić?

Używam Ubuntu Server 8.04 LTS.

itsadok
źródło

Odpowiedzi:

84

Krótka odpowiedź:

Za pomocą visudododaj następujący plik do pliku sudoers, zastępując nazwę użytkownika prawidłową nazwą użytkownika:

username ALL = /etc/init.d/apache2 

Jeśli nie chcesz wpisywać hasła, wykonaj następujące czynności:

username ALL = NOPASSWD: /etc/init.d/apache2 

Następnie użytkownik „nazwa użytkownika” może wykonać sudo /etc/init.d/apache2 start(lub zatrzymać, uruchomić ponownie itp.)

Długa odpowiedź: Prawdopodobnie będziesz chciał skonfigurować osobnego użytkownika, jeśli jeszcze tego nie zrobiłeś, a następnie skonfiguruj plik / etc / sudoers, aby umożliwić użytkownikowi lub grupie wykonanie żądanego polecenia.

Na przykład, aby zezwolić użytkownikowi „ben” na wykonywanie wszystkich poleceń jako root z prośbą o podanie hasła, wykonaj następujące czynności:

ben ALL= ALL

Aby zezwolić „ben” na wykonanie tylko jednego polecenia (jak powiedzmy, rm), wykonaj następujące czynności:

ben ALL= /bin/rm 

Jeśli uruchamiasz skrypt jako użytkownik i nie chcesz pytać o hasło, możesz użyć opcji „NOPASSWD” w następujący sposób:

ben ALL=NOPASSWD: /bin/commandname options

Możesz zrobić to samo dla grup, poprzedzając nazwy grup znakiem procentowym, na przykład:

%supportstaff          ALL= NOPASSWD: /bin/commandname 
epic9x
źródło
2
Czy usernamemożna ograniczyć do podzbioru parametrów? Powiedz, start restartale nie stop?
ThorSummoner,
visudokomenda robi kontrole bezpieczeństwa na Twoich zmian, więc nie złamać sudo/ supolecenie przez przypadek: unix.stackexchange.com/a/27595/61349
ThorSummoner
1

Krótka odpowiedź: sudo.

Połączenie wyglądałoby podobnie do następującego: sudo /etc/init.d/apache2 restart

Najłatwiej jest użyć visudodo skonfigurowania pliku / etc / sudoers. Zobacz man sudoersi man visudoszczegóły.

Zayne S. Halsall
źródło
OP powiedział o zrobieniu tego za pomocą skryptu - skrypt nie będzie mógł wprowadzić hasła, więc ta odpowiedź nie będzie miała sensu.
Matt Fletcher,
@MattFletcher, chyba że używasz NOPASSWD
Robin Kanters
0

Można to również osiągnąć, pisząc opakowanie na apache2ctl, przypisując własność grupy grupie administracyjnej i ustawiając bit suid. Jest to mniej ogólne rozwiązanie niż visudo, ale pozwala na niestandardowe ograniczenia możliwości użytkownika i sprawdzania błędów.

Napisałem to narzędzie na własne potrzeby i udostępniłem je na github: https://github.com/josiahjohnston/ltd_apache2ctl

Josiah Johnston
źródło