Nginx

Nginx 설치 w/o sudo, root

·2014년 3월 10일·조회 8,662

지난주 글에서 예고(?)드렸던 1024 이하 포트를 sudo나 root 없이 사용하는 방법입니다.

자신있게 적었지만, 제가 테스트하고 있는 환경은 지원이 안돼서 아직 성공하지 못했습니다.

다른 환경을 구하게 되면 해당 내용 추가하도록 하겠습니다.

 

1. 배경

Kernel을 사용하는 데 있어서 권한이 있는 사용자, 프로세스가 해당 자원을 사용하도록 하는 게 보안을 위해 굉장히 중요하지요.

기존 UNIX같은 경우에는 이런 권한을 해당 프로세스의 사용자가 super user(root)인지를 통해서 판단하도록 했습니다.

즉 해당 자원을 사용하기 위해서는 super user로 프로세스를 실행시켜야 하고, super user가 실행하는 프로세스라면 앞뒤 따지지 않고 모든 권한을 주고 있습니다.

왜 굳이 1024 이하의 포트를 super user만 사용하게 해서 이런 고통을 주는지, 그 이유는

사용자에게 '당신이 1024 이하의 포트에 접속한다면 그건 super user가 기동한 프로세스에 접속하는 것이니 믿어도 된다'는 의미를 주기 위한 거라고 하네요.

참고 : http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html

 

2. Linux는

Linux Kernel 2.2부터는 capability라고 해서 이러한 권한을 영역별로 묶어서 Thread나 File에 할당/관리합니다.

이렇게 묶어둔 권한은 CAP_SYS_BOOT(재기동 할 수 있는 권한), CAP_MAC_ADMIN, CAP_IPC_LOCK, CAP_CHOWN 등등 다양해서 프로그램 별 권한을 조정하거나 super user를 주는 게 아니라 필요한 권한만 주도록 할 수 있습니다.

1024 아래의 포트를 사용하는 데 필요한 권한은 CAP_NEW_BIND_SERVICE 입니다.

 

3. 권한 설정 방법과 Linux 버전에 따른 지원

 setcap이라는 명령어를 사용합니다. 사용 예는 아래와 같습니다.

 shell> setcap cap_net_bind_service=+ep /usr/local/nginx/bin/nginx

단, setcap이라는 명령어를 통해 실행 파일에 위와 같은 권한을 주려면 2.6.24 kernel 이상이 되어야 한다고 합니다.

2.6.24 이상 Kernel을 사용하고 있는 Linux는 CentOS와 RHEL 6.0 이상부터라고 합니다.

 

댓글 3

로그인 후 댓글을 남길 수 있습니다.

  • 몽상가몽상가· 2014년 3월 10일
    1024 이하 포트의 권한과 의미 잘 보았습니다. 새로운 환경 구하셔서 테스트 성공 하시길... ^^
  • 강철지그강철지그· 2014년 3월 11일
    말씀하신 커맨드로 잘 되는 것 확인했습니다. # setcap cap_net_bind_service=+ep /home/nginx/1.4.5/sbin/nginx 하고 나서 root 가 아닌 일반 계정(nginx) 으로 실행해도 잘 뜹니다. (커맨드의 정확한 의미는 아직 잘 모르겠지만요)
  • 맑· 2014년 3월 11일
    몽상가님/ 1024 아래 포트를 사용하는 방법을 찾다보니 대체 왜 얘네만 특별취급하는건가 싶더라구요... jeeg님/ 잘된다니 다행입니다-. 커맨드 정확한의미와 역사를 3번에 적으려다가 뻗었지요.. 조만간 추가하도록 하겠습니다^-^