Debian GNU / Linux 7.5 (wheezy)에서 lighttpd 서버를 실행하고 있으며 PHP 웹 페이지를 사용하여 시스템 시간을 변경하려고합니다 (페이지 시간 만 변경할 수는 있지만이 프로젝트에는 필요하지 않습니다). 지금은 exec()
명령을 사용하여 명령을 직접 실행하고 쉘 스크립트를 실행하고 있습니다. 그래서 :
exec('date --set [HH:MM:SS]')
또는
exec("sh /full/file/path/updateTime.sh") //contains command 'date --set [HH:MM:SS]'
명령 줄의 사용자를 www-data로 전환하고 날짜 명령을 실행하려고하면 "날짜 : 날짜를 설정할 수 없습니다 : 작업이 허용되지 않습니다."라는 응답을 얻습니다.
루트로 실행하면 쉘 스크립트가 성공적으로 실행됩니다.
exec()
응답을 유지 하기 위해 두 번째 인수를 제공하면 설정하려는 날짜 / 시간 정보가 포함됩니다.
또한 sudoers를 편집하여 추가하려고했습니다.
www-data ALL=(ALL:ALL) ALL
아래 user privilege specification
와 includedir /etc/sudoers.d
변화없이. 또한 Cmnd 별칭 사양을 /bin/date
만들고 변경없이 www-data 사용자에게 추가하려고했습니다.
나는 관련된 모든 것에 대해 경험이 부족하므로 도움을 주시면 감사하겠습니다.
이 사이트는 작동하지 않지만 사용자의 쉘 명령 수락과 관련된 위험을 알고 있습니다. 나는 확인했습니다 php.ini
있는지 확인하기 위해 파일을 exec()
명령이 비활성화되지 않습니다. 쉘 스크립트의 소유권을 /var/www/
변경하지 않고 www-data 에 제공하려고했습니다 . 현재 권한은 777로 설정되어 있습니다.
date --set
루트로 할 수있는 것을 제한하는 것이 더 안전합니다 ( "실제"사용에는 여전히 위험하지만) . 나는이의 sudoers 구문 권리를 이해 모르겠지만, 나는 생각 이있을 것 "www가 데이터 ALL = (루트) NOPASSWD / 빈 / 날짜 --set"(다음 사용exec('/usr/bin/suro /bin/date --set [HH:MM:SS]')
하여 경로가 약간 다를 수 있습니다 있지만, ).