태그 보관물: shell

shell

날짜-사용자에게 허용되지 않음 www-data exec()명령을 사용하여 명령을

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 specificationincludedir /etc/sudoers.d변화없이. 또한 Cmnd 별칭 사양을 /bin/date만들고 변경없이 www-data 사용자에게 추가하려고했습니다.

나는 관련된 모든 것에 대해 경험이 부족하므로 도움을 주시면 감사하겠습니다.

이 사이트는 작동하지 않지만 사용자의 쉘 ​​명령 수락과 관련된 위험을 알고 있습니다. 나는 확인했습니다 php.ini있는지 확인하기 위해 파일을 exec()명령이 비활성화되지 않습니다. 쉘 스크립트의 소유권을 /var/www/변경하지 않고 www-data 에 제공하려고했습니다 . 현재 권한은 777로 설정되어 있습니다.



답변

www-data가 sudoers 파일에있는 경우 www-data는 sudo암호를 입력 할 수 없으므로 명령에 암호가 필요하지 않다고 설명합니다.

sudoers 항목은 www-data ALL=(ALL:ALL) NOPASSWD: ALL

그런 다음 sudo date --set [HH:MM:SS]그냥 대신 실행해야합니다 date --set [HH:MM:SS].

www-data는 sudo테스트 서버에서 자신의 개인 개발 용도로만 사용하지 않는 한 절대 권한을 가져서는 안됩니다 . 이것은 큰 보안 허점입니다.

편집 : PHP exec ()에서 유사한 sudo 인 이 질문을 살펴보십시오.


답변

다른 접근 방식이 있습니다.

  • 합리적으로 안전한 장소에 FIFO (명명 된 파이프)를 만드십시오. 세계에서 쓸 수없는 곳은 괜찮습니다. 
  • www-data모드 600을 소유 하십시오. 또는 200이 작동해야합니다.
  • PHP 응용 프로그램이 시스템 시간을 변경하려고 할 때마다 새로운 시간을 FIFO에 쓰십시오.
  • 루트로 실행되는 데몬 프로세스가 FIFO에서 읽도록하십시오. 올바르게 포맷 된 시간을 읽으면 시스템 시계를 설정하십시오.

엉망 일 필요가 없습니다 sudo. 누군가가 시스템에 침입 www-data
하면 FIFO에 시간 변경 사항을 기록하고 데몬이 시간을 변경하게 할 수 있다는 최악의 상황이 발생할 수 있습니다. root
데몬에 취약점을 만들지 않는 한 공격자가 자신의 권한을 상승시킬 수있는 것은 거의 불가능한 것 같습니다 .


답변