일반 사용자가 1024 이하의 포트를 모니터링하도록 허용

일반 사용자가 1024 이하의 포트를 모니터링하도록 허용

루트가 아닌 사용자가 포트 tcp/80에서 수신 대기하는 서버를 실행하도록 허용해야 합니다.

이를 수행할 수 있는 방법이 있습니까?

답변1

setcap 'cap_net_bind_service=+ep' /path/to/program

이는 특정 프로세스에 적용됩니다. 그러나 특정 사용자가 1024 미만의 포트에 바인딩할 수 있도록 허용하려면 해당 사용자를 sudoers에 추가해야 합니다.

확인 해봐논의하다더 알아보기.

답변2

(이러한 접근 방식 중 일부는 다른 답변에서 언급되었으며 대략적인 선호도에 따라 몇 가지 가능한 옵션을 제공했습니다.)

낮은 포트를 높은 포트로 리디렉션하고 높은 포트에서 수신 대기할 수 있습니다.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080

서버를 루트로 시작하고 서버가 권한 있는 포트에서 수신 대기를 시작하면 권한을 제거할 수 있습니다. 직접 코딩하는 것이 아니라 작업을 수행하는 래퍼에서 서버를 시작하는 것이 좋습니다. 서버가 연결별로 인스턴스를 시작하는 경우 다음 위치에서 시작하세요.inetd(또는 다음과 같은 유사한 프로그램xinetd). 의 경우 inetd다음과 같은 줄을 사용합니다 /etc/inetd.conf.

http  stream  tcp  nowait  username:groupname  /path/to/server/executable  argv[0] argv[1]…

서버가 단일 인스턴스를 수신하는 경우 다음 위치에서 시작하세요.authbind. 빈 파일을 생성 /etc/authbind/byport/80하고 서버를 실행하는 사용자로 실행 가능하도록 만들거나 create 를 생성합니다. /etc/authbind/byuid/1234여기서 1234는 서버가 실행 중인 UID이며 행을 포함합니다 0.0.0.0/0:80,80.

서버 실행 파일이 해당 기능을 지원하는 파일 시스템에 저장된 경우 다음을 지정할 수 있습니다.cap_net_bind_service 능력. 이러한 기능은 아직 비교적 새로운 기능이며아직 몇 가지 질문이 있습니다..

setcap cap_net_bind_service=ep /path/to/server/executable

답변3

서비스가 systemd에 의해 실행되는 경우,

  1. 서비스 구성에서 필요한 포트를 설정하세요.
  2. 유닛 파일을 열고(보통) 해당 섹션으로 이동하여 새 줄을 추가하고 파일을 저장합니다./etc/systemd/system/something.service[Service]AmbientCapabilities=CAP_NET_BIND_SERVICE
  3. 파일을 다시 로드합니다.systemctl daemon-reload
  4. (다시) 서비스 시작: 또는systemctl start somethingsystemctl restart something

원천

답변4

당신이 사용할 수있는netcat 또는 xinetd또는 iptables 포트 전달을 사용하거나 Apache를 프런트 엔드 프록시로 사용하고 권한이 없는 포트에서 프로세스를 실행하세요.

관련 정보