How to use 1-1024 port from application(not root)

리눅스에 웹 서비스나 FTP등의 서비스를 사용한다면, 추가로 서비스를 설치하고 해당 서비스를 웹 서비스는 80, FTP 21등의 포트를 사용하는 것이 좋습니다. 다만 새로 설치한 서비스는 기본적으로 80 포트로 통신을 허용하지 않기 때문에 거부 메세지와 함께 포트가 열리지 않게 됩니다.

이러한 Well-Know-Ports라는 것을 리눅스에서는 다음 3가지 방법으로 사용할 수 있습니다.

  1. 실행파일에 SetUid 적용: 가장 쉽지만 보안상의 이슈가 있을 수 있습니다.
  2. IPTables를 이용한 포트 바인딩: 네트워크 포트를 포워드하는 방법입니다.
  3. capabilities 설정으로 포트 허용 설정: 가장 좋은 방법이라는 생각이 듭니다. 다만 커널 2.6.24 이상에서만 사용이 가능합니다.

1.SetUid 적용

#chown root.[Usergroup] run-application
#chmod 4775 run-application

실행파일의 소유권을 Root로 설정하여 권한을 위임받도록 합니다. UserGroup도 구분하여 실행하고자 하는 경우 User가 속한 그룹을 지정하여 입력해도 되지만, 입력을 하지 않을 경우 중간 구분기호인 “.”을 사용하지 않아도 됩니다.
chmod를 통해 SetUid 설정 퍼미션 4000을 넣어주고, 755는 그룹에 대한 사용자에게 쓰기 권한을 부여하게 됩니다.

2.IPTables를 이용한 포트 바인딩

#iptables -t nat -A PREROUTING -i {네트워크인터페이스} -p tcp --dport {well-know-port} -j REDIRECT --to-ports {run-application-port}

IPTables를 이용해서 80으로 접속한 세션을 8080이나 어플리케이션이 사용하는 포트로 Redirect하는 방법입니다.

3.Capabilities 설정으로 포트 허용 설정

Capabilities 설정인 setcap을 이용하여 권한을 부여하게 됩니다. 네트워크 권한인 CAP_NET_BIND_SERVICE 에 권한을 추가해주면 됩니다. 그리고 정상적으로 권한이 추가되었는지 getcap을 통해 확인이 가능합니다.

#setcap 'cap_net_bind_service=+eip' /usr/bin/nc
#getcap /usr/bin/nc

만약 Kibana를 80으로 서비스 하고자 한다면, 다음과 같은 명령을 통해 진행할 수 있습니다.

#setcap 'CAP_NET_BIND_SERVICE=+eip' /usr/share/kibana/node/bin/node
Facebook Comments

Leave A Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.