nginx / redis 설치 후, Permission Denied 발생




개요


이번에 CentOS 에 nginx 를 설치하는 작업을 했습니다. 뭐 그냥 대충 설치하면 되죠.

그런데 root 디렉토리를 /usr/share/nginx/html 에서 다른 사용자 홈으로 변경하면 동작이 안되는 겁니다.

즉, /usr/share/nginx/html 에서만 동작한다는 이야깁니다.


에러 로그를 보니, 아래처럼 나옵니다.



2016/04/07 12:01:38 [crit] 13285#0: *1 stat() "/home/und3r/html/tools/public/" failed (13: Permission denied), client: 111.91.142.52, server: localhost, request: "GET / HTTP/1.1", host: "sungwook.kim"

2016/04/07 12:01:38 [crit] 13285#0: *1 stat() "/home/und3r/html/tools/public/" failed (13: Permission denied), client: 111.91.142.52, server: localhost, request: "GET / HTTP/1.1", host: "sungwook.kim"

2016/04/07 12:01:38 [error] 13285#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 111.91.142.52, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "sungwook.kim"

2016/04/07 12:01:38 [error] 13285#0: *1 testing "/home/und3r/html/tools/public" existence failed (13: Permission denied) while logging request, client: 111.91.142.52, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "sungwook.kim"


권한이 없다고라고라?????

전체 폴더를 777 로 줘보기도 하고, 소유권을 nginx 로 지정해도..

저런 에러가 계속 납니다.


권한이 있는데 권한이 없다!!!!!

sudo -u nginx stat /home/und3r/html/tools/public


이렇게 커맨드를 날려보면, 값을 잘 가져 옵니다.

그런데 왜..도대체 왜 안되는걸까요?




해결방법


인터넷에 돌아다니는 각종 방법을 다 해보았습니다.

그러나 대부분 글이 퍼미션을 주었느냐, 755 로 해보아라. 이런 글들이 대부분이더군요.

당연히..안됩니다 ㅠㅠ



그러다가 우연히 audit 라는걸 발견했고, 로그 확인에 들어갔습니다.it.log

[root@localhost audit]# tail -n 10 /var/log/audit/audit.log


type=AVC msg=audit(1459998098.790:3649): avc:  denied  { getattr } for  pid=13165 comm="php-fpm" path="/home/und3r" dev=dm-2 ino=2490369 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir

type=SYSCALL msg=audit(1459998098.790:3649): arch=c000003e syscall=4 success=no exit=-13 a0=7fb4f2826338 a1=7fff5d5d0470 a2=7fff5d5d0470 a3=6e692f63696c6275 items=0 ppid=13163 pid=13165 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=85 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

type=AVC msg=audit(1459998098.792:3650): avc:  denied  { search } for  pid=13285 comm="nginx" name="und3r" dev=dm-2 ino=2490369 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir

type=SYSCALL msg=audit(1459998098.792:3650): arch=c000003e syscall=4 success=no exit=-13 a0=212c7b2 a1=7fffb276f150 a2=7fffb276f150 a3=6166615320303131 items=0 ppid=13283 pid=13285 auid=500 uid=498 gid=499 euid=498 suid=498 fsuid=498 egid=499 sgid=499 fsgid=499 tty=(none) ses=85 comm="nginx" exe="/usr/sbin/nginx" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

type=MAC_POLICY_LOAD msg=audit(1459998203.248:3651): policy loaded auid=500 ses=85

type=SYSCALL msg=audit(1459998203.248:3651): arch=c000003e syscall=1 success=yes exit=8080665 a0=4 a1=7fc959bdd000 a2=7b4d19 a3=7fff50f473b0 items=0 ppid=13300 pid=13301 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=85 comm="load_policy" exe="/sbin/load_policy" subj=unconfined_u:unconfined_r:load_policy_t:s0-s0:c0.c1023 key=(null)

type=AVC msg=audit(1459998213.172:3652): avc:  denied  { getattr } for  pid=13166 comm="php-fpm" path="/home/und3r" dev=dm-2 ino=2490369 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir

type=SYSCALL msg=audit(1459998213.172:3652): arch=c000003e syscall=6 success=no exit=-13 a0=7fff5d5ce290 a1=7fff5d5cdb70 a2=7fff5d5cdb70 a3=b items=0 ppid=13163 pid=13166 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=85 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

type=AVC msg=audit(1459998742.883:3653): avc:  denied  { getattr } for  pid=13167 comm="php-fpm" path="/home/und3r" dev=dm-2 ino=2490369 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir

type=SYSCALL msg=audit(1459998742.883:3653): arch=c000003e syscall=6 success=no exit=-13 a0=7fff5d5ce290 a1=7fff5d5cdb70 a2=7fff5d5cdb70 a3=b items=0 ppid=13163 pid=13167 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=85 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=unconfined_u:system_r:httpd_t:s0 key=(null)



이런 썩을...

에러가 허벌나게 나고 있네요. -_-;


그래서 audit 로 관련 내용을 찾아보았습니다. 보안관련해서 내용이 나옵니다.

https://www.digitalocean.com/community/tutorials/understanding-the-linux-auditing-system-on-centos-7



대충 왜 그런지는 알겠고, 이제 해결방법을 찾아봅시다.


먼저 관련툴을 설치하고...(그냥 하는 방법도 있는데, 엄청 커멘드가 복잡해서 설치 고고!!)

yum install policycoreutils-python


아래처럼 규칙을 추가해 줍니다.

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M swnginx

sudo semodule -i swnginx.pp


다 끝났습니다.

nginx 를 재시작 해 주면, 정상적으로 잘 동작합니다. :)




더불어....

Redis 가 또 말썽입니다. PHP 에서 Redis 로 연결이 안됩니다.

마찬가지로 audtit 문제입니다.


아래처럼 하고, audit 및 각 서버를 모두 재시작 해 주면 정상동작 합니다 :)

# semanage port -a -t http_port_t -p tcp 6379

# semanage port -l | egrep '(^http_port_t|6379)'

http_port_t                    tcp      6379, 80, 81, 443, 488, 8008, 8009, 8443, 9000

Connected successfully.


port (6370)는 본인이 사용하는 redis 포트입니다.





생소한 auditing 이라는 것 때문에, 엄청 삽질했네요.


도움이 되실분들이 얼마나 있을지 모르겠지만, 간만에 포스팅 합니다.

(사실 제가 나중에 잊어버리면 보려고 ㅋㅋ)