티스토리 뷰
지난 글에 이어서 일반 유저로 1024 미만의 포트(== privileged
포트)를 사용하는 것에 대해 정리해보려고 한다. 결과부터 얘기하면 커널 파라미터를 조정하는 방식으로 구성할 예정이다.
1. 기본 설정으로 일반 유저가 privileged 포트를 사용할 경우
먼저 nginx 컨테이너의 포트를 privileged 포트 중 하나에 바인딩하면 어떤 문제가 발생하는지 알아보자. 테스트 환경은 Ubuntu 22.04.4 LTS
이다.
먼저 nginx 이미지를 받고
$ podman pull docker.io/ngin
privileged 포트 중 하나인 443 포트에 컨테이너의 80번 포트를 바인딩하면
$ podman run --rm -d --name nginx -p 443:80 docker.io/library/nginx
다음과 같은 메세지와 함께 컨테이너가 뜨지 않는 것을 확인할 수 있다.
Error: rootlessport cannot expose privileged port 443,
you can add 'net.ipv4.ip_unprivileged_port_start=443' to /etc/sysctl.conf (currently 1024),
or choose a larger port number (>= 1024): listen tcp 0.0.0.0:443: bind: permission denied
에러 메세지를 보면 알 수 있듯이 net.ipv4.ip_unprivileged_port_start
값을 /etc/sysctl.conf
에 추가하거나, 1024 이상 포트를 사용해야 한다.
2. 커널 파라미터 조정
커널 라파미터란 커널의 작동 방식을 제어하는 방법으로, 커널 파라미터를 핸들링하기 위해 sysctl
커맨드를 활용하고 설정 값은 /etc/sysctl.conf
에서 수정 및 확인할 수 있다.
1024 이상의 포트를 사용하는게 우리의 목적이 아니므로, 에러 메세지에서 나온 것처럼 커널 파라미터(net.ipv4.ip_unprivileged_port_start
)를 추가하는 방식으로 문제를 해결해보자.
먼저 privileged 포트가 아닌 포트는 몇 번부터인지 설정하는 net.ipv4.ip_unprivileged_port_start
파라미터부터 확인해보면 1024로 나오는 것을 알 수 있는데, 이는 일반 계정은 1024 포트부터 사용할 수 있다는 뜻이다.
$ sysctl net.ipv4.ip_unprivileged_port_start
net.ipv4.ip_unprivileged_port_start = 1024
해당 커널 파라미터을 어떻게 설정하냐에 따라 일반 유저가 사용할 수 있는 포트의 범위가 정해지는데, 443 포트를 바인딩할 예정이므로 설정 파일(/etc/sysctl.conf
)에 443으로 설정하면 된다. 참고로 해당 설정 파일은 기본적으로 root만 수정할 수 있다.
net.ipv4.ip_unprivileged_port_start
파라미터를 이전에 설정했는지 확인한 뒤에, 설정된 값이 없으면 443으로 설정한다. → 당연하지만 기존에 설정된 값이 있으면 그 값을 수정한다.
$ cat /etc/sysctl.conf | grep net.ipv4.ip_unprivileged_port_start
# 아래 커맨드는 root 권한으로 수행해야 한다
$ echo 'net.ipv4.ip_unprivileged_port_start=443' >> /etc/sysctl.conf
그리고 root 권한으로 수정된 커널 파라미터를 로드한다.
$ sysctl -p
net.ipv4.ip_unprivileged_port_start = 443
3. 일반 유저로 privileged 포트 사용하기
이전 단계를 통해 unprivileged 대상이 되는 포트의 시작점이 443으로 바뀐 것을 알 수 있다.
$ sysctl net.ipv4.ip_unprivileged_port_start
net.ipv4.ip_unprivileged_port_start = 443
그러므로 일반 계정이 443 포트를 사용해도 된다는 것을 확인할 수 있다!
당연하지만 설정한 커널 파라미터보다 낮은 포트는 privileged 포트가 되므로, 일반 계정으론 사용할 수 없다.
참고 자료 🙇♂️
'Linux' 카테고리의 다른 글
[linux] 유저 권한으로 서비스 실행하고 로그아웃에도 서비스 유지하기 (1) | 2024.04.20 |
---|---|
[linux] 오프라인 환경(air gap)을 위한 yum repository 구축하기 (0) | 2024.03.24 |