CentOS 7 환경에서 MySQL 실행이 안되서 살펴보니, 아래와 같은 에러 메시지를 본 적이 있었습니다.

( 에러 메시지가 정확히 기억이 나지는 않습니다... )

/var/lib/mysql/mysql.sock permission denied


그리고 이 글을 쓰게 된 계기로, Django 애플리케이션과 연동이 안되서 uwsgi 로그를 확인해보니 아래와 같은 에러 메시지가 보였습니다.

to unix:/run/uwsgi/.sock failed (13: permission denied) while connecting to upstream



두 에러 메시지는 소켓에 접근하기 위한 권한이 없다는 의미이며, 확인해야 할 것은 두 가지입니다.

첫 번째 권한 설정입니다.

socket 파일에 대한 접근을 누가 하는지, 그리고 socket 파일의 권한( 소유권/허가권 )을 확인해야 합니다.


두 번째로 SELinux 실행 여부 입니다.

SELinux는 기존 접근 통제 규칙보다 먼저 동작하므로, SELinux 정책에 위배된다면 접근을 차단해버립니다.

즉 socket 파일의 권한이 root로 되어 있거나 socket port 번호가 높다면, SELinux 정책에 위배된다고 판단하여 Permission denied 에러를 발생합니다.

따라서 SELinux를 해제하면 해결이 가능합니다.




이상으로 sock 파일의 permission denied 에러를 해결하는 방법에 대해 알아보았습니다.

저는 SELinux를 해제함으로써 에러를 해결했는데, SELinux를 해제하는 것은 바람직하지 않다고 합니다.