/etc/sudoers에 www-data를 추가하면 PHP shell_exec()에서 명령을 실행할 수 없습니다.

/etc/sudoers에 www-data를 추가하면 PHP shell_exec()에서 명령을 실행할 수 없습니다.

저는 Raspberry Pi의 Raspbian(Debian 기반)에서 웹 서버 lighttpd를 실행하고 있습니다. 서버는 사용자 www-data로 실행됩니다( 로 확인 ps aux). 다음 줄을 추가했습니다 /etc/sudoers.

www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd

vcgencmdPHP 파일 내에서 상태 정보를 제공하는 Raspberry Pi의 도구를 실행할 수 있습니다 .

<? echo shell_exec('vcgencmd version'); ?>

sudo인쇄되는 것은 vcgencmd가 잘못된 권한으로 실행될 때 나타나는 "VCHI 초기화 실패"(사용자가 없이도 사용자에게 실행할 때 나타나는 예상 버전 정보 대신)입니다 .

예를 들어 실행 중

<? echo shell_exec('cat /sys/class/thermal/thermal_zone*/temp'); ?>

아무런 /etc/sudoers변경 없이 잘 작동하므로 PHP에는 아무런 문제가 없습니다(금지된 shell_exec것과 같은).

명령을 실행하려면 또 무엇을 설정해야 합니까?

답변1

에 추가한 것을 사용하려면 에 /etc/sudoers전화해야 합니다 sudo.

sudosetuid 비트가 설정된 프로그램일 뿐입니다. 더 이상 특별한 것은 없습니다. 즉, 프로그램이 시작될 때마다 자체적으로 개입하지 않는다는 의미입니다.

호출할 수 있는 이유 cat /sys/class/thermal/thermal_zone*/temp는 해당 파일에 대한 읽기 액세스 권한이 있기 때문입니다. 파일 시스템 권한이 설정된 방식에 따라 읽기 액세스 권한이 있을 수 있지만 반드시 쓰기 액세스 권한은 있을 수 없습니다.

vcgencmd version자신의 사용자가 2가지 가능한 설명을 갖고 있으므로 실행하면 그 이유가 작동할 수 있습니다.

  1. alias vcgencmd='sudo vcgencmd프로필에 이 있으므로 자동으로 sudo.
  2. vcgencmd작동해야 하는 파일에 대한 충분한 권한이 있습니다 . 쓰기 액세스가 필요하고 해당 파일이 귀하가 구성원으로 속한 그룹에 의해 소유되고 해당 그룹에 대한 쓰기 액세스 권한이 있는 경우 sudo가 필요하지 않습니다.

요약하면 명령을 sudo vcgencmd version. 또는 수정하고 수정하는 데 필요한 파일 권한을 찾으십시오.

관련 정보