Jestem w trakcie pisania panelu, który będzie zarządzał iptables/tc/ifconfig oraz przeglądał logi, zmieniał pliki konfiguracyjne w /etc/*
Administrator w panelu zmienia ustawienia sieciowe serwera i wciska akceptuj i tu jest problem - jak wdrożyć zmiany w systemie:
Uruchomienie serwera WWW z uprawnieniami roota (domyślny tryb pracy miniserwera od Webmina).
Skrypty CGI w apache z ustawionym SUID (tryb pracy webmina na "obcym" serwerze).
suEXEC lub suPHP.
Cron wdraża zmiany z uprawnieniami roota (co minutę).
Demon w C "okresowo" wdraża zmiany zawarte w plikach konfiguracyjnych tworzonych przez PHP.
Demon w C, na żądanie wdraża zmiany zawarte w plikach konfiguracyjnych tworzonych przez PHP.
Wykorzystanie obsługi SSH w PHP i po zalogowaniu się na roota wykonanie poleceń zawartych w plikach konfiguracyjnych tworzonych przez PHP (hasło roota w BD).
Wykorzystanie obsługi SSH w PHP i po zalogowaniu się na roota wykonanie poleceń zawartych w plikach konfiguracyjnych tworzonych przez PHP (hasło roota podać ręcznie).
Podobnie jak wyżej tyle, że wykorzystać sudo i użytkownika z prawami tylko do niezbędnych poleceń powłoki.
Dodać użytkownikowi apache w /etc/sudoers możliwość wykonywania wszystkich potrzebnych aplikacji poleceń powłoki powłoki.
Sam pracuję nad skryptem do administracji, lecz mój będzie tylko wyświetlał pobrane dane, nic nie będzie zapisywał, gdyż służyć będzie do wyświetlania np. obciążenia, użycia pamięci i tym podobnych w czasie rzeczywistym. Jednak sprawa jest taka, że Apache zabiera od groma zasobów oraz wiem, że i u mnie może wystąpić potrzeba posiadania praw administratorskich. Rozwiązałem ten problem, po prostu programując serwer WWW w PHP(testowane, pierwotna wersja jest już w użyciu w innym projekcie; jest proste do wykonania:bodajże wszystko ma 100 linii kodu). Wystarczy wymusić na użytkowniku, aby aplikacja mogła być włączona jedynie przez administratora i wtedy nie masz już problemu dotyczącego uprawnień. Musisz jednak zważać na wszelkie luki, które mogłyby pozwolić na wykonanie zewnętrznego kodu, gdyż mogłoby to być poważną luką, zagrażającą stabilności systemu.
Tak, napisałem prosty serwer WWW (na razie nawet prymitywny) w PHP. Wszystko ma obsługę podprocesów, więc kilkoro klientów może być obsługiwanych jednocześnie. Jeżeli jesteś zainteresowany, jak to działa, to zamieszczam w załączniku wyrywek kodu odpowiedzialny za pracę samego serwera WWW. Umieszczam to tutaj na licencji GPL2, więc możesz bez żadnych zobowiązań wykorzystywać ten kod. Jest to skrypt pobierania statusu serwera Ventrilo i generowania ,,userbara'' z pobranymi danymi.
Aktualnie mam bardziej rozwinięte wszystkie klasy dotyczące samych gniazd i procesów, ale myślę, że to wystarczy, aby zrozumieć, na jakiej zasadzie to wszystko działa. Sam poświęciłem na odnalezienie potrzebnych funkcji, przeczytanie części dokumentacji protokołu HTTP i rozwiązanie problemów podstawowych, dosyć dużo czasu.