2016-06-04 2 views
1

내가 CentOS는 7 에 shell_exec와 Sudo에 문제가있어 다음 줄을 더 출력을 제공하지 :PHP는 shell_exec sudo를

$ 합계 = shell_exec ('sudo는 스크립트/usb/hidusb-relay-cmd ID = HIUPS stat ');

var_dump ($ stat); 제공 NULL 나는 visudo를 사용하여 다음 줄을 추가 한

:

아파치 ALL = NOPASSWD :!의/var/www/html/스크립트/USB/hidusb 릴레이 - cmd를

기본값은/var을 ! 다음과 같이/www /에서 HTML/스크립트/USB// I 읽을 수있는 보안 로그 /의/var에서 requiretty

hidusb 릴레이-CMD :

Jun 4 17:45:43 anhelli sudo : apache : TTY = 알 수 없음; PWD =/var/www/html; USER = root; COMMAND = scripts/usb/hidusb-relay-cmd ID = HIUPS stat

위와 같이 su - apache를 실행하고 sudo를 실행했지만 정상적으로 작동합니다. shell_exec의 출력을 얻을 수없는 이유는 무엇입니까?

많은 도움에 감사드립니다. 최고 감사합니다. bzc0fq

+0

스크립트/usb/hidusb-relay-cmd ID = HIUPS stat' 정상적인 명령 행에서 작동합니까? – Noobscripter

+0

예, 루트로 실행할 때 제대로 작동합니다. 그것은 또한 sudo로 아파치 사용자 명령 줄에서 작동합니다.나는 또한/etc/sudoers를 변경하여 아파치 사용자가 실행하는 모든 파일에 sudo privs를 주지만 도움이되지는 않았다. – bzc0fq

+0

당신은 'ps aux | grep Apache '를 실행하여 권한을 삭제하지 않고 Apache로 실행되고 있는지 확인하십시오. – Sean

답변

0

마지막으로 문제를 해결했습니다. hidusb-relay-cm 파일에 대한 액세스를 차단하는 것은 selinux 정책입니다. 해결 방법은 명령을 사용하여 로컬 보안 정책을 추가하는 것이 었습니다.

cat /var/log/audit/audit.log | grep 거부 | grep hidusb-relay-cm | audit2allow -M hidusb 릴레이-cm

semodule -i hidusb 릴레이 - cm.pp

나는 정책 이름 난 audit2allow 유틸리티를 실행할 때마다 변경. 모든 거부가 '서비스'될 때까지 5 번 실행해야했습니다. 내가 명령을

를 실행해야한다고

setsebool -P httpd_mod_auth_pam

setsebool -P httpd_unified에 캐치했다

에 : 은 또한 두 번 sebool에 설정했다

semodule -DB

/var/log/audit/audit.log에 숨겨진 거부를 표시합니다. 위 내용이 저에게 효과적이었습니다.