6.3. NFS 서비스 보안
Kerberos를 사용하여 모든 파일 시스템 작업을 인증하고 암호화하여 NFSv4(Network File System 버전)를 보호할 수 있습니다. NAT(Network Address Translation) 또는 방화벽으로 NFSv4를 사용하는 경우 /etc/default/nfs
파일을 수정하여 위임을 해제할 수 있습니다. 위임은 서버가 파일 관리를 클라이언트에 위임하는 기술입니다.
반면 NFSv3에서는 파일 잠금 및 마운트에 Kerberos를 사용하지 않습니다.
NFS 서비스는 모든 버전의 NFS에서 TCP를 사용하여 트래픽을 전송합니다. 이 서비스는 RPCSEC_GSS
커널 모듈의 일부로 Kerberos 사용자 및 그룹 인증을 지원합니다.
NFS를 사용하면 원격 호스트가 네트워크를 통해 파일 시스템을 마운트하고 로컬에 마운트된 것처럼 해당 파일 시스템과 상호 작용할 수 있습니다. 중앙 집중식 서버의 리소스를 병합하고 파일 시스템을 공유할 때 /etc/nfsmount.conf
파일에 NFS 마운트 옵션을 추가로 사용자 지정할 수 있습니다.
6.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)
도움말 페이지
6.3.2. NFS 클라이언트 보안을 위한 마운트 옵션
다음 옵션을 mount
명령에 전달하여 NFS 기반 클라이언트의 보안을 강화할 수 있습니다.
nosuid
-
nosuid
옵션을 사용하여set-user-identifier
또는set-group-identifier
비트를 비활성화합니다. 이렇게 하면 원격 사용자가setuid
프로그램을 실행하여 더 높은 권한을 얻지 못하며setuid
옵션 대신 이 옵션을 사용할 수 있습니다. noexec
-
noexec
옵션을 사용하여 클라이언트의 실행 파일을 모두 비활성화합니다. 이를 사용하여 사용자가 공유 파일 시스템에 저장된 파일을 실수로 실행하지 못하도록 합니다. nodev
-
nodev
옵션을 사용하여 클라이언트의 장치 파일을 하드웨어 장치로 처리하지 않도록 합니다. resvport
-
resvport
옵션을 사용하여 예약된 포트로의 통신을 제한하고 권한 있는 소스 포트를 사용하여 서버와 통신할 수 있습니다. 예약된 포트는 권한 있는 사용자 및root
사용자와 같은 프로세스를 위해 예약됩니다. sec
-
NFS 서버에서
sec
옵션을 사용하여 마운트 지점의 파일에 액세스하기 위해 RPCGSS 보안 플레이버를 선택합니다. 유효한 보안 플레이버는없음
,sys
,krb5
,krb5i
,krb5p
입니다.
krb5-libs
패키지에서 제공하는 MIT Kerberos 라이브러리는 새 배포에서 DES(Data Encryption Standard) 알고리즘을 지원하지 않습니다. 보안 및 호환성 때문에 DES는 더 이상 사용되지 않으며 Kerberos 라이브러리에서 기본적으로 비활성화되어 있습니다. 호환성 이유로 환경에서 DES가 필요하지 않은 최신 보안 알고리즘을 사용하십시오.
추가 리소스
6.3.3. 방화벽을 사용하여 NFS 보안
NFS 서버에서 방화벽을 보호하려면 필요한 포트만 열어 둡니다. 다른 서비스에 NFS 연결 포트 번호를 사용하지 마십시오.
사전 요구 사항
-
nfs-utils
패키지가 설치됩니다. -
firewalld
패키지가 설치되어 실행 중입니다.
절차
-
NFSv4에서 방화벽이 TCP 포트
2049
를 열어야 합니다. NFSv3에서
2049
로 4개의 추가 포트를 엽니다.rpcbind
서비스는 NFS 포트를 동적으로 할당하므로 방화벽 규칙을 생성할 때 문제가 발생할 수 있습니다. 이 프로세스를 단순화하려면/etc/nfs.conf
파일을 사용하여 사용할 포트를 지정합니다.-
port
= <value> 형식의
설정합니다.[
의 TCP 및 UDP 포트를mountd
-
port
= <value> 형식의
설정합니다.[
)에 대한 TCP 및 UDP 포트를statd
] 섹션에서 statd(framework.
-
port
/etc/nfs.conf
파일에서 NFS 잠금 관리자(nlockmgr
)의 TCP 및 UDP 포트를 설정합니다.-
port=value
형식의[lock
d )의 TCP 포트를 설정합니다. 또는d]
섹션에서nlockmgr
(authorization.stat/etc/modprobe.d/lockd.conf
파일에서nlm_tcpport
옵션을 사용할 수 있습니다. -
udp-port=value
형식의[lock
d )에 대해 UDP 포트를 설정합니다. 또는d]
섹션에서nlockmgr
(authorization.stat/etc/modprobe.d/lockd.conf
파일에서nlm_udpport
옵션을 사용할 수 있습니다.
-
검증
NFS 서버의 활성 포트 및 RPC 프로그램을 나열합니다.
$ rpcinfo -p