Python 스크립트를 호출해야 하는 PHP 스크립트가 있습니다. 그러나 나는 Python 스크립트가 www-data(php 사용자)가 아닌 pycert로 실행되기를 원합니다. 그래서 www-data가 sudoers 파일에서 스크립트를 실행하도록 허용하려고 시도했지만 작동하지 않는 것 같습니다. PHP 코드:
exec("timeout --preserve-status -k 10 15s sudo -u pycert /bin/python /var/www/files/certs/creation/cert.py $file", $resulta, $result);
Vesudo 파일:
www-data ALL=(pycert:pycert) NOPASSWD:/bin/python /var/www/files/certs/creation/cert.py /var/www/files/certs/creation/cert-[0-9a-ZA-Z]+
이것은 auth.log입니다.
sudo: www-data : command not allowed ; TTY=pts/1 ; PWD=/var/www/files.git ; USER=pycert ; GROUP=pycert ; COMMAND=/bin/python /var/www/files/certs/creation/cert.py /var/www/files/certs/creation/cert-Wi1S9a
내가 뭘 잘못했나요?
답변1
첫째, "visudo 파일"과 같은 것은 없습니다. Visudo는 sudoers 파일을 변경하는 편집기입니다.
둘째, 이것이 어떤 Linux 배포판인지 언급을 생략했습니다. 이는 필수 액세스 제어 시스템이 존재하는지 여부에 대한 단서를 제공할 수 있습니다.
셋째, 필요한 경우 쉽게 재현할 수 있는 작업으로 문제를 나누는 대신 최종 결과를 구축하려고 합니다. 즉, 일반적인 대화형 사용자 계정을 사용하여 sudo 작업을 구현하려고 합니다.
넷째, 지침을 읽지 않았습니다. 특히 "참고하세요. 이는 정규 표현식이 아닙니다." 부분입니다. [0-9a-ZA-Z]+
반복되는 알파벳 문자 및 숫자 집합을 일치시키는 대신 리터럴 "+"가 뒤에 오는 단일 알파벳 문자 또는 숫자와 일치합니다.
노력하다...
user ALL=(pycert:pycert) NOPASSWD:/bin/python /var/www/files/certs/creation/cert.py /var/www/files/certs/creation/cert-*