Linux가 사용자 수준 네트워크 포트 권한을 허용하지 않는 이유는 무엇입니까? [폐쇄]

Linux가 사용자 수준 네트워크 포트 권한을 허용하지 않는 이유는 무엇입니까? [폐쇄]

가끔 Linux에서 네트워크 포트 액세스에 대한 사용자 수준 권한을 설정하는 방법을 검색하는데 결과가 꽤 지루합니다. 예를 들어, 포트 5080에서 수신 대기하는 중요한 프로세스를 실행하는 컴퓨터가 있는 경우 다른 정상적인 권한 프로세스와 마찬가지로 신뢰할 수 있는 특정 사용자 집합만 해당 포트에 액세스하도록 허용하는 방법이 있어야 한다고 생각합니다. 파일 시스템 기관과 같습니다.

하지만 높은 포트는 모든 사용자가 사용할 수 있는 반면, 낮은 포트는 루트만 사용할 수 있으며, authbind 및 iptables 포워딩과 같은 조잡한 해커만이 다른 사용자에게 낮은 포트를 사용하도록 허용할 수 있는 것으로 보입니다. 이것은 매우 이상한 상황처럼 보입니다. 그래서 왜 이렇게 설계되었으며 사람들이 이것을 바꿀 필요성을 느끼지 않는지 궁금합니다.

답변1

Linux는 네트워크 네임스페이스를 지원합니다. 다양한 프로세스가 다양한 네트워크 인터페이스 세트를 볼 수 있도록 할 수 있습니다. 이것은 광범위한 주제입니다.

컴퓨터 내에서 특정 사용자만 접근할 수 있는 통신 포트를 원한다면 파일 시스템 공간에 허가된 이름을 갖고 있는 전통적인 유닉스 소켓을 사용할 수 있다. Linux는 AF_UNIX 소켓에 대한 읽기/쓰기 권한을 존중합니다.

머신이 다른 머신의 외부 TCP 또는 UDP 요청을 포트 5080에서 수신하고 있다면 우리는 이에 대해 실제로 말할 수 없습니다.사용자더 이상 권한이 없습니다. 인증, 암호화, 무결성/스푸핑 방지/서비스 거부 방지 등 5080개가 넘는 프로토콜에 보안을 구축해야 합니다.

답변2

처음에는 초기 Unix 시스템의 범위를 벗어나는 복잡한 디자인이 필요했기 때문인 것 같습니다.

나중에 일반적인 경우에 대해 사용자 수준 네트워크 포트 권한을 구현하는 확립된 방법이 있다고 추측했습니다.인트라넷, 이는 약 몇 ​​년 후에 나타났습니다(4.3BSD) TCP/IP(4.2BSD). 데몬 은 inetd루트로 실행되며 해당 구성 파일에 지정된 포트에서 수신 대기합니다. 들어오는 연결에서 inetd구성 파일에 지정된 다른 프로그램이 생성되고 inetd 구성 파일에 지정된 사용자로 실행됩니다. 따라서 적어도 각 연결에서 새로운 프로세스를 시작할 수 있는 서비스의 경우 문제가 해결되었습니다.

답변3

그 이유 중 하나는 대부분의 사용자가임시 포트루트가 아닌 다른 서버에 연결하는 데 사용됩니다.

TCP/IPv4 연결은 각각 IP 주소와 포트 번호로 구성된 두 개의 끝점으로 구성됩니다. 따라서 클라이언트 사용자가 서버 컴퓨터에 연결할 때 설정된 연결은 (서버 IP, 서버 포트, 클라이언트 IP, 클라이언트 포트)의 4-튜플로 간주될 수 있습니다. 일반적으로 이 네 가지 중 세 가지는 쉽게 알 수 있습니다. 클라이언트 컴퓨터는 자체 IP 주소를 사용하며, 원격 서비스에 연결할 때는 서버 컴퓨터의 IP 주소와 서비스 포트 번호가 필요합니다.

즉시 명확하지 않은 점은 연결이 설정되면 연결 클라이언트가 포트 번호를 사용한다는 것입니다. 클라이언트 프로그램이 명시적으로 특정 포트 번호를 요청하지 않는 한 사용되는 포트 번호는 임시 포트 번호입니다. 임시 포트는 컴퓨터의 IP 스택에 의해 할당된 임시 포트이며 이 목적으로 지정된 포트 범위에서 할당됩니다. 연결이 종료되면 임시 포트를 재사용할 수 있습니다. 하지만 대부분의 IP 스택은 전체 임시 포트 풀이 사용될 때까지 포트 번호를 재사용하지 않습니다. 따라서 클라이언트 프로그램이 다시 연결되면 연결의 새 측에 다른 임시 포트 번호가 할당됩니다.

관련 정보