[SELinux] nginx: [emerg] bind() to 0.0.0.0:443 failed (13: Permission denied)

-- Unit nginx.service has begun starting up.
Oct 29 07:30:20 host nginx[29837]: nginx: [emerg] bind() to 0.0.0.0:443 failed (13: Permission denied)
Oct 29 07:30:20 host systemd[1]: nginx.service: control process exited, code=exited status=1
Oct 29 07:30:20 host systemd[1]: Failed to start nginx - high performance web server.
-- Subject: Unit nginx.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit nginx.service has failed.
--
-- The result is failed.
Oct 29 07:30:20 host systemd[1]: Unit nginx.service entered failed state.
Oct 29 07:30:20 host systemd[1]: nginx.service failed.
Oct 29 07:30:20 host polkitd[583]: Unregistered Authentication Agent for unix-process:29827:605576299 (system bus name :1.93831, object path /org/freedesktop/

(1) 까닭

  SELinux를 쓰는 때에 위처럼 권한 문제로 nginx에서 특정 포트를 쓰지 못한다는 오류가 날 수 있다. HTTP 3.0을 쓰려고 하는 때에는 UDP 포트가 방화벽에 막혔기 때문일 수도 있다.

(2) 풀기

1) SELinux 끄기

  보안을 생각한다면 SELinux를 끄는 것은 권장할 방법은 아니다.

① SELinux 임시로 끄기

# setenforce 0

  "setenforce 1"로 SELinux를 다시 켤 수 있다. 운영체제를 다시 띄우면 setenforce로 바꾼 설정값은 본래대로 되돌아간다.

② SELinux 영구히 끄기

  /etc/selinux/config 파일에서 SELINUX 항목값을 바꾼다.

SELINUX=enforcing (켜기)
SELINUX=disabled (끄기)
SELINUX=permissive (끄지만 경고문은 나옴)

  이 항목값을 바꾸고 운영체제를 다시 시작하면 운영체제가 뜨는 시간이 평소보다 길게 걸릴 수 있다.

2) SELinux 끄지 않기

○ 포트 번호 등록하기

  SELinux를 그대로 쓰되 semanage로 특정 포트를 http 통신에 쓸 수 있게 등록한다. 443 포트를 udp 전송에 쓰려면 아래처럼 넣어 준다.

# semanage port -a -t http_port_t -p udp 443

  http 통신에 쓸 수 있게 허가된 포트 번호들은 "semanage port -l | grep http_port_t"으로 확인할 수 있다.

▣ 참고한 곳 : https://www.burndogfather.com/192

2022/11/06 11:00 2022/11/06 11:00
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요