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 ).