NFS 클라이언트가 낮은 번호의 포트를 사용하는 이유는 무엇입니까?

NFS 클라이언트가 낮은 번호의 포트를 사용하는 이유는 무엇입니까?

CoreOS EC2 인스턴스를 실행 중입니다. 이 인스턴스에서 로컬 포트 ​​950을 수신하는 프로세스를 실행하고 있습니다. 일반적으로 모든 것이 잘 작동하지만 최근 CoreOS 서버를 다시 시작한 후에는 다른 프로세스가 이미 사용하고 있기 때문에 프로세스가 포트 950에서 수신 대기할 수 없습니다.

이 다른 프로세스는 AWS EFS 볼륨을 탑재하는 데 사용되는 NFSv4 클라이언트인 것으로 보입니다. netstat이 나에게 알려주는 내용은 다음과 같습니다.

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 10.30.102.250:950       10.30.102.170:2049      ESTABLISHED

관련 부분은 다음과 같습니다 /etc/mtab.

fs-faa33256.efs.us-west-2.amazonaws.com:/ /efs nfs4 rw,relatime,vers=4.1,\
rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,\
clientaddr=10.30.102.250,local_lock=none,addr=10.30.102.170 0 0

몇 가지 질문이 있습니다. 1. CoreOS 서버의 NFS 클라이언트가 왜 NFS를 사용합니까?낮은 숫자원격 NFSv4 서버와 통신하기 위한 포트? 2. NFS 클라이언트에게 포트 950을 사용하지 않도록(또는 권한이 없는 포트만 사용) 지시할 수 있습니까?

답변1

(다음 답변은 대부분 내 원본 게시물에 대한 Jeff Schaller의 의견에서 파생되었습니다.)

루트가 아닌 사용자가 NFS 볼륨을 마운트하는 것을 방지하기 위해 NFS 서버는 NFS 클라이언트에 권한 있는 포트(1-1023)를 사용하도록 요구할 수 있습니다. 그러나 현재 루트 사용자만 NFS 볼륨을 마운트하도록 허용하면 네트워크에 컴퓨터를 배치할 수 있는 사람은 누구나 해당 컴퓨터의 루트가 될 수 있으므로 보안이 거의 제공되지 않습니다.

이러한 오래된 보안 관행으로 인해 일부 NFS 클라이언트는 NFS 서버에 연결할 때 기본적으로 권한 있는 포트를 사용합니다.

클라이언트가 권한 있는 포트에서 서비스를 실행해야 하는 경우 포트 충돌이 발생할 수 있습니다. 이 문제를 해결하는 한 가지 방법은 NFS 클라이언트가 다른 서비스에서 사용하는 포트를 방지하도록 NFS 클라이언트가 사용할 최소 및 최대 권한 포트를 설정하는 것입니다. 포트 범위는 다음과 같이 설정할 수 있습니다.커널 매개변수/sys/module/sunrpc/parameters/min_resvport;CoreOS에서는 이러한 매개변수를 파일 및 에 저장할 수 있습니다 /sys/module/sunrpc/parameters/max_resvport.

NFS 볼륨을 마운트할 때 시스템에 권한이 없는 포트를 사용하도록 지시하는 옵션을 추가하면 전체 권한이 있는 포트 문제를 완전히 방지할 수 있습니다. Linux의 경우 이는 noresvport옵션입니다(참조:Linux nfs(5) 매뉴얼 페이지).

다음은 CoreOS 서버에서 사용한 마운트 명령입니다.

fs-faa33256.efs.us-west-2.amazonaws.com:/ /efs nfs4 rw,relatime,vers=4.1,\
rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,\
clientaddr=10.30.102.250,local_lock=none,addr=10.30.102.170 0 0

관련 정보