티스토리 뷰

1. NginX 웹서버의 사용자 계정 확인

$ cat /etc/nginx/nginx.conf | grep user

user nginx

음... nginx 로군.


2. 웹서버 루트 실제 경로 확인

/home 아래 호스팅 계정이라 가정

$ vi /etc/nginx/conf.d/vhost.conf

server {

    ......

    root /home/some/public_html

    ......

}


3. 퍼미션과 owner 확인

$ namei -om /home/some/public_html

접근 권한을 확인하고
chmod, chown 사용하여 적절히 변경한다.


4. 퍼미션 등 확인

웹서버 로그 설정 확인하여 tail 명령 실행

$ tail -f /var/log/nginx/some_error.log

브라우저로 사이트 접속 시도

위 tail 명령 결과에서 permission 오류가 발생하지 않으면 Done!
만약 오류가 발생하면 다음으로 계속~


5. SELinux 꺼보고 다시 접속 테스팅

$ setenforce 0

브라우저로 접속해봐서 403 오류 발생하지 않으면
무조건 SELinux 디렉토리 보안 블럭으로 인해 403 오류 발생한 것.


6. ls -Z 명령으로 디렉토리에 걸린 SELinux 보안상태 확인

$ ls -Z /home/some

drwxr-xr-x  nlinux nlinux root:object_r:httpd_sys_content_t some
drwxr-xr-x  nlinux nlinux user_u:object_r:user_home_dir_t public_html


7. 디렉토리에 SELinux httpd 허용 설정

httpd_sys_content_t 타입을 설정해줘야 HTTP 웹서버가 접근 가능

$ chcon -Rt httpd_sys_content_t /home/some/public_html

파일 저장 디렉토리는 httpd_sys_rw_content_t 타입을 설정해줘야 HTTP 웹서버가 읽기 쓰기 가능

$ chcon -Rt httpd_sys_rw_content_t /home/some/public_html/files


9. SELinux 패키지 설치

$ yum install -y policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans


10. SELinux httpd 관련 허용 설정

$ setsebool -P httpd_can_network_connect on
웹서비스에서 다른 외부 URL 호출(예: curl) 가능하게

$ setsebool -P httpd_enable_homedirs=1
웹서비스에서 사용자 홈 디렉토리 접근 가능하게

$ setsebool -P httpd_use_nfs=1 
웹서비스에서 nfs 폴더 접근 가능하게 (선택사항)


11. SELinux 켜보고 다시 접속 테스팅

$ setenforce 1

브라우저로 접속해봐서 403 오류 발생하지 않음. Done!


12. SELinux 오류 발생 로그 모니터링 (선택사항)

$ tailf /var/log/audit/audit.log



* 참고

http://stackoverflow.com/a/26228135
http://blog.nlinux.com/55
https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-1-basic-concepts
https://www.lesstif.com/pages/viewpage.action?pageId=27984832
https://unix.stackexchange.com/a/337748

댓글