9.3. NFS 서비스 보안
Kerberos를 사용하여 모든 파일 시스템 작업을 인증하고 암호화하여 네트워크 파일 시스템 버전 4(NFSv4)를 보호할 수 있습니다. NAT(Network Address Translation) 또는 방화벽으로 NFSv4를 사용하는 경우 /etc/default/nfs
파일을 수정하여 위임을 해제할 수 있습니다. 위임은 서버에서 파일 관리를 클라이언트에 위임하는 기술입니다. 반면 NFSv2 및 NFSv3에서는 파일을 잠금 및 마운트하는 데 Kerberos를 사용하지 않습니다.
NFS 서비스는 모든 버전의 NFS에서 TCP를 사용하여 트래픽을 전송합니다. 이 서비스는 RPCSEC_GSS
커널 모듈의 일부로 Kerberos 사용자 및 그룹 인증을 지원합니다.
NFS를 사용하면 원격 호스트가 네트워크를 통해 파일 시스템을 마운트하고 로컬에 마운트된 것처럼 해당 파일 시스템과 상호 작용할 수 있습니다. 중앙 집중식 서버의 리소스를 병합하고 파일 시스템을 공유할 때 /etc/nfsmount.conf
파일의 NFS 마운트 옵션을 추가로 사용자 지정할 수 있습니다.
9.3.1. NFS 서버 보안을 위한 내보내기 옵션
NFS 서버는 /etc/exports
파일에 있는 호스트로 내보낼 디렉터리 및 호스트의 목록 구조를 결정합니다.
/etc/exports
파일에서 다음 내보내기 옵션을 사용할 수 있습니다.
ro
- NFS 볼륨을 읽기 전용으로 내보냅니다.
rw
-
NFS 볼륨에서 읽기 및 쓰기 요청을 허용합니다. 쓰기 액세스를 허용하면 공격 위험이 증가하기 때문에 이 옵션을 주의해서 사용하십시오. 시나리오에
rw
옵션을 사용하여 디렉터리를 마운트해야 하는 경우 가능한 위험을 줄이기 위해 모든 사용자가 쓸 수 없는지 확인합니다. root_squash
-
uid
/gid
0의 요청을 anonymousuid
/gid
에 매핑합니다. 이는bin
사용자 또는직원
그룹과 같이 동일하게 민감한 다른 uid 또는 gid에는 적용되지 않습니다. no_root_squash
-
루트 스쿼시를 끕니다. 기본적으로 NFS 공유에서는
root
사용자를 권한이 없는 사용자 계정인nobody
사용자로 변경합니다. 이렇게 하면 생성된 모든루트
파일의 소유자가nobody
로 변경되어setuid
비트가 설정된 프로그램 업로드가 방지됩니다.no_root_squash
옵션을 사용하는 경우 원격 루트 사용자는 공유 파일 시스템의 파일을 변경하고 다른 사용자를 위해 trojans의 애플리케이션을 유지할 수 있습니다. 보안
-
내보내기를 예약된 포트로 제한합니다. 기본적으로 서버는 예약된 포트를 통해서만 클라이언트 통신을 허용합니다. 그러나 모든 사용자가 여러 네트워크의 클라이언트에서
루트
사용자가 되기 때문에 예약된 포트를 통한 통신이 권한이 있다고 가정하는 것은 거의 안전하지 않습니다. 따라서 예약된 포트에 대한 제한은 제한된 값입니다. Kerberos, 방화벽 및 특정 클라이언트에 대한 내보내기 제한에 의존하는 것이 좋습니다.
/etc/exports
파일의 구문에 있는 추가 공백으로 인해 구성이 크게 변경될 수 있습니다.
다음 예에서 /tmp/nfs/
디렉터리는 bob.example.com
호스트와 공유되며 읽기 및 쓰기 권한이 있습니다.
/tmp/nfs/ bob.example.com(rw)
다음 예제는 이전 예제와 동일하지만 읽기 전용 권한으로 bob.example.com
호스트에 동일한 디렉토리를 공유하며 호스트 이름 이후의 단일 공백 문자로 읽기 및 쓰기 권한으로 전 세계에 공유합니다.
/tmp/nfs/ bob.example.com (rw)
showmount -e < hostname
> 명령을 입력하여 시스템의 공유 디렉토리를 확인할 수 있습니다.
또한 NFS 서버를 내보낼 때 다음과 같은 모범 사례를 고려하십시오.
- 홈 디렉토리를 내보내는 것은 일부 애플리케이션이 일반 텍스트 또는 약하게 암호화된 형식으로 암호를 저장하므로 위험합니다. 애플리케이션 코드를 검토하고 개선하여 위험을 줄일 수 있습니다.
- 일부 사용자는 SSH 키에 암호를 설정하지 않고 다시 홈 디렉터리에 대한 위험을 초래합니다. 암호를 사용하거나 Kerberos를 사용하여 이러한 위험을 줄일 수 있습니다.
-
NFS 내보내기만 필수 클라이언트로 제한합니다. NFS 서버에서
showmount -e
명령을 사용하여 서버가 내보내는 내용을 검토합니다. 특히 필요하지 않은 항목을 내보내지 마십시오. - 불필요한 사용자가 서버에 로그인하여 공격 위험을 줄이는 것을 허용하지 마십시오. 주기적으로 서버에 액세스할 수 있는 사용자 및 항목을 확인할 수 있습니다.
파일 시스템의 하위 디렉터리 내보내기는 안전하지 않으므로 전체 파일 시스템을 내보냅니다. 공격자는 부분적으로 내보낸 파일 시스템의 내보내기되지 않은 부분에 액세스할 수 있습니다.
추가 리소스
- RHEL Identity Management 사용 시 IdM에서 pod 사용
-
exports(5)
및nfs(5)
도움말 페이지
9.3.2. NFS 클라이언트 보안을 위한 마운트 옵션
다음 옵션을 mount
명령에 전달하여 NFS 기반 클라이언트의 보안을 강화할 수 있습니다.
nosuid
-
nosuid
옵션을 사용하여set-user-tekton 또는
비트를 비활성화합니다. 이렇게 하면set
-group-tektonsetuid
프로그램을 실행하여 원격 사용자가 더 높은 권한을 얻지 못하며,setuid
옵션과 반대로 이 옵션을 사용할 수 있습니다. noexec
-
클라이언트의 모든 실행 파일을 비활성화하려면
noexec
옵션을 사용합니다. 이를 사용하여 사용자가 실수로 공유 파일 시스템에 저장된 파일을 실행하지 못하도록 합니다. nodev
-
nodev
옵션을 사용하여 클라이언트의 장치 파일을 하드웨어 장치로 처리하지 않도록 합니다. resvport
-
resvport
옵션을 사용하여 예약된 포트에 대한 통신을 제한하고 권한 있는 소스 포트를 사용하여 서버와 통신할 수 있습니다. 예약된 포트는 권한 있는 사용자 및root
사용자와 같은 프로세스를 위해 예약되어 있습니다. sec
-
NFS
서버의
second 옵션을 사용하여 마운트 지점의 파일에 액세스하기 위해 RPCGSS 보안 플레이버를 선택합니다. 유효한 보안 플레이버는 ,sys
,tekton5
, jenkinsfile5i
, jenkinsfile5p
.입니다.
jenkinsfile 5-libs
패키지에서 제공하는 MIT Kerberos 라이브러리는 새 배포에서 데이터 암호화 표준(DES) 알고리즘을 지원하지 않습니다. 보안 및 호환성으로 인해 DES는 Kerberos 라이브러리에서 기본적으로 더 이상 사용되지 않으며 비활성화되어 있습니다. 호환성을 이유로 환경에 DES가 필요한 경우가 아니면 DES 대신 최신의 보안 알고리즘을 사용하십시오.
추가 리소스
9.3.3. 방화벽을 사용하여 NFS 보안
NFS 서버에서 방화벽을 보호하려면 필요한 포트만 열어 둡니다. 다른 서비스에 NFS 연결 포트 번호를 사용하지 마십시오.
사전 요구 사항
-
nfs-utils
패키지가 설치되어 있어야 합니다. -
firewalld
패키지가 설치되어 실행 중입니다.
절차
-
NFSv4에서 방화벽이 TCP 포트
2049
를 열어야 합니다. NFSv3에서
2049
개의 추가 포트를 엽니다.rpcbind
서비스는 NFS 포트를 동적으로 할당하므로 방화벽 규칙을 생성할 때 문제가 발생할 수 있습니다. 이 프로세스를 단순화하려면/etc/nfs.conf
파일을 사용하여 사용할 포트를 지정합니다.-
[
섹션에 portmountd
]= <value> 형식으로
설정합니다.mountd
(mountd)에 대해 TCP 및 UDP 포트를 -
[
섹션에 portstatd
]=
설정합니다.&
lt;value> 형식의 TCP 및 UDP 포트를
-
/etc/nfs.conf
파일에서 NFS 잠금 관리자(nlockmgr
)의 TCP 및 UDP 포트를 설정합니다.-
[lockd]
섹션에서nlockmgr
(#189.statd
)의 TCP 포트를port=value
형식으로 설정합니다. 또는/etc/modprobe.d/lockd.conf
파일에서nlm_tcpport
옵션을 사용할 수 있습니다. -
[lockd]
섹션에서udp-port=value
형식의nlockmgr
(tekton.statd
)에 대해 UDP 포트를 설정합니다. 또는/etc/modprobe.d/lockd.conf
파일에서nlm_udpport
옵션을 사용할 수 있습니다.
-
검증
NFS 서버의 활성 포트 및 RPC 프로그램을 나열합니다.
$ rpcinfo -p