맥락: 저는 프로젝트의 다양한 데이터를 처리하기 위해 작성한 스크립트 라이브러리(.sh 및 .php)에 한 번의 클릭으로 액세스할 수 있는 브라우저 내 제어판을 만들고 있습니다. 이는 프로젝트 데이터를 관리하기 위한 "원스톱 상점"입니다.
나는 좋은 진전을 이루었습니다. 저는 아파치, PHP, MySQL을 실행 중이고 프론트엔드는 다음 위치에 있습니다.http://localhost. 여태까지는 그런대로 잘됐다!
이제 내가 가진 문제는 이것입니다. 기본 Apache 사용자(내 컴퓨터에서는 "_www"라고 함)가 내 스크립트 중 일부를 실행할 권한이 없는 것 같다는 점을 제외하고는 잘 작동하는 index.php가 있습니다.
그래서 내가 할 때 :
<?php
echo `ls`;
echo `whoami`;
echo `/Path/To/Custom/Script.sh`;
?>
ls
및의 출력을 얻었 whoami
지만 사용자 정의 스크립트에서는 어떤 결과도 얻지 못했습니다. 내가 했던 것처럼 (대화형 셸에서) 사용자 정의 스크립트를 실행하면 물론 작동합니다.
마지막으로 내 질문은: 무엇입니까?옳은구성하는 방법입니다. 웹 서버가 내 서버처럼 작동합니까? 아니면 _www가 내 사용자 정의 스크립트를 실행할 수 있도록 권한을 변경하시겠습니까?
답변1
/usr/local/bin
가장 좋은 방법은 웹 서버가 실행할 수 있는 충분한 권한이 있는 표준 위치(예: )에 스크립트를 배치하는 것입니다 .
이것이 옵션이 아닌 경우 스크립트 그룹을 변경한 chgrp groupname path
다음 해당 그룹에 대해 실행 가능하도록 만들 수 있습니다 chmod g+x path
. _www
사용자가 아직 그룹에 없으면 그룹에 추가 합니다 usermod -aG groupname _www
.
답변2
귀하의 질문에 대답하려면 _www 그룹에 스크립트 실행 권한을 부여하는 것이 가장 좋습니다.
ACL을 사용하여 *.sh 스크립트의 권한을 확장하여 _www 그룹의 사용자에게 실행 권한을 허용합니다.
cd /Path/To/Custom
setfacl -m g:_www:rx *.sh
또한 /Path/To/Custom의 각 디렉토리 구성요소를 확인하고 Apache가 /Path/To/Custom의 스크립트에 액세스(즉, "보기")하는지 확인하십시오.
ls -ld /Path
ls -ld /Path/To
ls -ld /Path/To/Custom
마지막 구성요소(관습) 여기서 Apache에는 실행 및 읽기 권한이 필요합니다. 예를 들어, 위의 모든 디렉터리 구성 요소가다른허가인수하다그러면 Apache는 다음 디렉터리에서 스크립트를 찾는 데 필요한 모든 액세스 권한을 갖습니다.관습목차.