상세 컨텐츠

본문 제목

[PHP&Linux] PHP exec() 함수로 아파치 restart 하기

IT&DEV

by 린이파파 2021. 8. 9. 22:09

본문

PHP를 통해 Linux(CentOS)의 apache 데몬을 graceful 혹은 restart 해야 하는 상황이 생겼다.
기본적으로 별도의 리눅스 sudo 설정을 하지 않았다면,
PHP의 exec() 이나 shell_exec() 함수를 통한 리눅스 명령어 엑세스는
디렉터리를 조회하는 등의 일반 user 에게 부여되는 엑세스만 가능하다.

apache 등의 데몬을 제어하기 위해선 sudo 설정을 통해 일부 명령어에 root 권한을 부여해야 한다.

 

visudo 설정하여 외부 exec() 권한 부여

(CentOS 7.*를 기준으로 한다.)

#visudo


로 sudo 설정파일을 연다.
( #vi sudoers 로 열게 되면 readonly 모드로 열리므로 #visudo 로 열어 수정해야 한다. )

apache ALL=NOPASSWD:/sbin/service

를 추가한다.

가장 앞에 위치한 'apache'의 경우 리눅스 셋팅에 따라
www-data 혹은 nobody 가 되기도 하므로 주의!

 

PHP에서 exec() 으로 apache restart 하기

visudo를 수정 하였기 때문에  /sbin/service 에 apache 에게 root 권한이 부여 되어
웹에서 PHP를 통해 service 제어가 가능해졌다.

아래와 같이
test.php 파일 하나를 만들고 테스트 코드를 작성해 보자.

exec("/usr/bin/sudo /sbin/service httpd restart");

http://domain/test.php
로 접속하게 되면 정상적으로 아파치가 재시작 된 것을 확인해 볼 수 있다.

반응형

관련글 더보기

댓글 영역