Używam serwera lighttpd na Debian GNU / Linux 7.5 (wheezy) i chcę użyć strony php do zmiany czasu systemowego (wiem, że mogę po prostu zmienić czas strony, ale nie tego potrzebuję w tym projekcie). W tej chwili używam exec()
polecenia, aby wydawać polecenia bezpośrednio i po prostu uruchomić skrypt powłoki. Więc albo:
exec('date --set [HH:MM:SS]')
lub
exec("sh /full/file/path/updateTime.sh") //contains command 'date --set [HH:MM:SS]'
Jeśli przełączę użytkownika w wierszu polecenia na www-data i spróbuję uruchomić polecenie date, otrzymam odpowiedź „data: nie można ustawić daty: operacja niedozwolona”.
Skrypt powłoki działa poprawnie, jeśli uruchomię go jako root.
Jeśli podam drugi argument, aby exec()
zatrzymać odpowiedź, zawiera on datę / godzinę, którą próbuję ustawić.
Próbowałem również edytować sudoers, aby dodać
www-data ALL=(ALL:ALL) ALL
pod user privilege specification
i includedir /etc/sudoers.d
bez zmian. Próbowałem również utworzyć specyfikację aliasu Cmnd /bin/date
i dodać ją do użytkownika danych www bez żadnych zmian.
Jestem prawie niedoświadczony we wszystkim, co się z tym wiąże, więc doceniam każdą pomoc.
Witryna nie będzie aktywna, ale zdaję sobie sprawę z niebezpieczeństw związanych z przyjmowaniem poleceń powłoki od użytkowników. Sprawdziłem php.ini
plik, aby upewnić się, że exec()
polecenie nie jest wyłączone. Próbowałem przekazać własność skryptu powłoki /var/www/
do danych www bez zmian. Uprawnienia są na razie ustawione na 777.
date --set
jak root. Nie jestem pewien, czy dobrze rozumiem składnię sudoers, ale myślę, że będzie to „www-data ALL = (root) NOPASSWD: / bin / date --set” (a potem użyjexec('/usr/bin/suro /bin/date --set [HH:MM:SS]')
, chociaż twoje ścieżki mogą być nieco inne )./usr/bin/sudo
dodać część do argumentu wexec()
poleceniu? Czy to dlatego, że to jest lokalizacja polecenia sudo (Znowu dużo się uczę, przepraszam, jeśli to brzmi jak głupie pytanie)?sudo
(lubdate
jednego z nich), po prostu wolę je dołączyć, na wypadek gdyby skrypt działał z dziwnymPATH
, który nie zawiera odpowiednich katalogów. Jeśli chodzi o opcję „--set” powodującą problemy: być może trzeba określić, że dozwolony jest inny argument, na przykład „/ bin / date --set *”, ale jeśli po prostu go wyłączę, nie sądzę to znacznie mniej bezpieczne.Oto inne podejście:
www-data
tryb 600. Lub 200 powinno działać.Nie musisz się z tym bawić
sudo
. Najgorsze, co może się zdarzyć, jeśli ktoś włamie się do twojego systemu, ponieważwww-data
może on zapisać zmiany czasu w FIFO i spowodować, że demon zmieni czas. Wydaje się prawie niemożliwe, aby atakujący mógł podnieść swoje uprawnienia doroot
(chyba że stworzysz lukę w demonie).źródło