IT

centos7 nginx CI (codeigniter) shell_exec() 권한 문제 해결 selinux

___gyul 2021. 5. 7. 16:02
반응형

해당 문제를 해결하기 위해 거의 1주일가량을 소비했다..

 

이러한 문제를 다음에는 좀 더 빠르게 해결할 수 있도록 기록한다.

 

문제 상황 :

코드이그나이터(codeigniter 3.0)의 controller(. php )에서 shell_exec() 또는 exec() 함수를 사용하여 rm ~ , wget ~ 등의 쉘 명령어를 실행시키려고 하는데 정상적으로 동작하지 않는 문제가 발견됨.

 

os : centos 7

web server : nginx

source language : php

framework : CI ( codeigniter)

database : mysql 

 

여러가지 블로그들과 영어 원문 등을 찾아봤지만 영어를 잘하지도 못하고 배움도 얕아서 한참 헤맸다.. 

 

chmod, chown, chcon 명령어로 권한 설정하는 것도 여러 가지 찾아보기도 하고,

 

/etc/nginx/nginx.conf, /etc/nginx/conf.d/default.conf, /etc/php-fpm.d/www.conf 등 파일을 수정해보기도 했다.

 

이 과정에서 shell_exec('whoami') 에 대한 결과가 www.conf의 user 값인 'apache'로 출력되는 것도 알 수 있었다.

 

네트워크 공부는 반드시 따로 시간을 내서 공부를 해야겠다.

 

 

뭐 결과적으로는 selinux 쪽에서 차단을 하고 있는걸로 확인이 되었다.

 

간단하게는 selinux 모드를 허용으로 바꾸어 주면 해결이 쉬웠지만.

 

selinux status 확인 방법 : # sestatus

selinux 현재 모드만 확인하려면 # getenforce

 

모드 변경하는 방법 (비활성화는 다음에 공부하고 정리할 예정)

 

강제 모드 : # setenforce 1 

허용 모드 : # setenforce 0

 

 

selinux 보안 컨텍스트의 4가지 구성 요소

 

                               |  사용자  |   역할   |          타입            | 레벨

사용자 : system_u

역할 : object_r

타입 : httpd_sys_content_t

레벨 : s0

 

* selinux에 대한 자세한 내용 및 사용 방법은 글 하단 링크를 참고 부탁합니다.

 

 

급하게 찾아본 내용으로는 대충 httpd_sys_content_t 인 타입을 httpd_sys_rw_content_t로 바꾸어야 읽고 쓰기 권한을 사용할 수 있다는 것이었다.

 

명령어는 

 

chcon -R -t httpd_sys_rw_content_t {path}

 

이렇게 하면 {path} 경로를 포함한 하위 디렉터리 및 파일들의 selinux 보안 컨텍스트를 변경할 수 있다.

 

-R은 모든 하위 파일들에도 적용한다는 의미.

-t는 아마 type의 t가 아닐까 예상

 

 

그런데 이렇게 하고 나서도 permission denied가 계속해서 나타나는 걸 보았다..

 

그러다가 chmod로 파일 권한을 주지 않은 것이 생각남.

 

여러 번 VM 테스트 서버를 설치해서 뒤죽박죽이었다

 

사용한 명령어는

 

chmod 757 {path}

 

read write가 필요한 path를 입력하여 권한을 부여함.

 

 

결과는 성공적.

 

리눅스 명령어 및 권한 설정, 네트워크 공부의 필요성을 아주 많이 느낀 며칠이었다..

 

 

 

내가 봤던 많은 에러 로그들은 대충 아래와 같았다.

더 있던 걸로 기억하지만 적어놓지 않아서 모르겠다 ㅜ

 

sudo : PAM account management error : system error

sudo : unable to open audit system permission denied

 

rm : cannot remove permission denied

 

 

 

급하게 작성하느라 횡설수설하지만 나 같은 사람들에게 조금이나마 도움이 되길, 또는 미래의 나에게 조금이라도 도움이 되길.

 

 

 

 

 

참고 : www.lesstif.com/linux-infra-book/selinux-18219476.html

반응형