shell_exec
PHP 기능을 사용하여 시스템 서비스를 제어 하려고 합니다 .
shell_exec('sudo /usr/sbin/service icecast2 stop');
하지만 이를 작동시킬 수 있는 유일한 방법은 모든 사용자에게 다음 서비스에 대한 루트 액세스를 허용하는 것입니다 /etc/sudoers
.
ALL ALL=(root) NOPASSWD: /usr/sbin/service
이것은 분명히 매우 나쁜 생각이지만 다른 것으로 설정하려고 하면 서비스에 루트 권한이 필요하기 때문에 실행이 거부됩니다. 예를 들면 다음과 같습니다.
%www-data ALL=(root) NOPASSWD: /usr/sbin/service
%www-data ALL=NOPASSWD: /usr/sbin/service
또한 echo는 posix_getpwuid(posix_geteuid())['name'];
실행 중인 프로세스에 대해 www-data가 아닌 다른 이름을 제공합니다. 그러나 다음 중 어느 것도 작동하지 않습니다.
%myphpuser ALL=(root) NOPASSWD: /usr/sbin/service
%myphpuser ALL=NOPASSWD: /usr/sbin/service
또한 서비스를 제어하고 shell_exec에서 호출하기 위해 bash 스크립트를 작성해 보았지만 작동하지 않았습니다.
이렇게 서비스를 열어 두지 않도록 다른 솔루션을 생각할 수 있는 사람이 있나요?
예를 들어, 이 특정 서비스 및 기능에 대한 액세스만 허용하시겠습니까?
편집하다
어느 정도 진전이 있었습니다. 이것은 효과가 있지만 충분히 안전한가요?
myphpuser ALL=(ALL:ALL) ALL
myphpuser ALL=NOPASSWD: /usr/sbin/service
또한 이를 호출하는 PHP 스크립트는 어쨌든 공개되지 않은 cron 작업에 의해 실행된다는 점도 언급해야 합니다.