/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자신의 사용자가 시작할 때 이유에 대한 두 가지 가능한 설명이 있습니다.

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

즉, 명령을 sudo vcgencmd version.

관련 정보