Infra & Security Eng/Project Implementation

NFSv4 환경에서의 8가지 Squash 시나리오 권한 매핑 분석하기

엔지니어 E 2026. 2. 5. 20:34
반응형

/home/a1 192.168.10.192(rw,sync,no_root_squash,insecure)
/home/a2 192.168.10.192(rw,sync,all_squash,insecure)
/home/a3 192.168.10.192(rw,sync,no_all_squash,insecure)
/home/a4 192.168.10.192(rw,sync,all_squash,root_squash,insecure)
/home/a5 192.168.10.192(rw,sync,all_squash,no_root_squash,insecure)
/home/a6 192.168.10.192(rw,sync,no_all_squash,root_squash,insecure)
/home/a7 192.168.10.192(rw,sync,no_all_squash,no_root_squash,insecure)
/home/a8 192.168.10.192(rw,sync,all_squash,anonuid=2003,anongid=2002,insecure)
본 보고서의 목적: NFSv4 환경에서 다양한 Squash 옵션(all_squash, no_root_squash 등)이 클라이언트 사용자 권한 매핑에 미치는 영향을 분석하고 보안 정책 수립 능력을 배양함
각 폴더별로 신분이 어떻게 변하는지 보기 위해 파일을 직접 생성하고 숫자를 확인 해야 한다
# touch /mnt/a1/r1 /mnt/a2/r2 /mnt/a3/r3 /mnt/a4/r4 /mnt/a5/r5 /mnt/a6/r6 /mnt/a7/r7 /mnt/a8/r8

루트 계정으로 접속시 어떻게 변하는가? (루트 매핑여부 확인)
1. /home/a1 192.168.10.192(rw,sync,no_root_squash,insecure) - 
# ls -ln /mnt/a1/r1
-rw-r--r--. 1 0 0 0  2월  5 03:30 /mnt/a1/r1
루트로 인식, 매핑 안됨
* 0 0 에서 0은 소유자, 0은 그룹소유자 

2. /home/a2 192.168.10.192(rw,sync,all_squash,insecure)
# ls -ln /mnt/a2/r2
-rw-r--r--. 1 65534 65534 0  2월  5 03:30 /mnt/a2/r2
익명 사용자로 인식, 매핑 됨

3. /home/a3 192.168.10.192(rw,sync,no_all_squash,insecure)
# ls -ln /mnt/a3/r3
-rw-r--r--. 1 65534 65534 0 2월  5 03:30 /mnt/a3/r3
익명 사용자로 인식, 매핑 됨
* no_all_squash 명령어를 썼는데 65534가 나오는 이유: 3번에 기재는 안했지만 root_squash 가 default 값으로 설정 되어 있어서 루트를 유령(65534) 취급하게 된다

4. /home/a4 192.168.10.192(rw,sync,all_squash,root_squash,insecure)

# ls -ln /mnt/a4/r4
-rw-r--r--. 1 65534 65534 0  2월  5 03:30 /mnt/a4/r4
익명 사용자로 인식, 매핑 됨

5. /home/a5 192.168.10.192(rw,sync,all_squash,no_root_squash,insecure)
# ls -ln /mnt/a5/r5
# -rw-r--r--. 1 65534 65534 0  2월  5 03:30 /mnt/a5/r5
익명 사용자로 인식, 매핑 됨

6. /home/a6 192.168.10.192(rw,sync,no_all_squash,root_squash,insecure)
# ls -ln /mnt/a6/r6
# -rw-r--r--. 1 65534 65534 02월  5 03:30 /mnt/a6/r6
* no_all_squash 명령어를 썼는데 65534가 나오는 이유: root_squash 가 default 값으로 설정 되어 있어서 루트를 유령(65534) 취급하게 된다
익명 사용자로 인식, 매핑 됨

7. /home/a7 192.168.10.192(rw,sync,no_all_squash,no_root_squash,insecure)
# ls -ln /mnt/a7/r7
# -rw-r--r--. 1 0 0 0  2월  5 03:30 /mnt/a7/r7
루트로 인식, 매핑 안됨

8./home/a8 192.168.10.192(rw,sync,all_squash,anonuid=2003,anongid=2002,insecure)
# ls -ln /mnt/a8/r8
# -rw-r--r--. 1 2003 2002 0  2월  5 03:30 /mnt/a8/r8
특정 사용자(UID 2003)로 인식, 매핑 됨
특정 사용자(UID 2003)으로 접속시 어떻게 변하는가? (nfsusr 매핑 여부 확인)
# su - nfsuser 
* 특정 사용자로 접속: 리눅스에서 # su - 계정
* 새로운 계정으로 로그인 한거라 파일을 만들어야 한다 
# touch /mnt/a1/u1 /mnt/a2/u2 /mnt/a3/u3 /mnt/a4/u4 /mnt/a5/u5 /mnt/a7/u7 /mnt/a8/u8

1. 
/home/a1 192.168.10.192(rw,sync,no_root_squash,insecure) 
# ls -ln /mnt/a1/u1
# -rw-r--r--. 1 2003 2002 0  2월  5 04:30 /mnt/a1/u1
특정 사용자(UID 2003)로 인식, 매핑 안됨
* no_root_squash 는 "클라이언트에서 root 권한으로 접속하면 서버에서도 root 권한을 그대로 인정해 주겠다"는 설정인데 현재 root 권한이 아니므로 영향력이 없음

2. /home/a2 192.168.10.192(rw,sync,all_squash,insecure)
# ls -ln /mnt/a2/u2
# -rw-r--r--. 1 65534 65534 0  2월  5 04:30 /mnt/a2/u2
익명 사용자로 인식, 매핑 됨

3. /home/a3 192.168.10.192(rw,sync,no_all_squash,insecure)
# ls -ln /mnt/a3/u3
# -rw-r--r--. 1 2003 2002 0  2월  5 04:30 /mnt/a3/u3
특정 사용자(UID 2003)로 인식, 매핑 안됨

4. /home/a4 192.168.10.192(rw,sync,all_squash,root_squash,insecure)
#  ls -ln /mnt/a4/u4
# -rw-r--r--. 1 65534 65534 0  2월  5 04:30 /mnt/a4/u4
익명 사용자로 인식, 매핑 됨

5. /home/a5 192.168.10.192(rw,sync,all_squash,no_root_squash,insecure)
#  ls -ln /mnt/a5/u5
# -rw-r--r--. 1 65534 65534 0  2월  5 04:30 /mnt/a5/u5
익명 사용자로 인식, 매핑 됨 
* all_squash는 **"root를 포함한 모든 유저"**를 으깨버리는 옵션임


6. /home/a6 192.168.10.192(rw,sync,no_all_squash,root_squash,insecure)
#  ls -ln /mnt/a6/u6
# -rw-r--r--. 1 2003 2002 0  2월  5 04:54 /mnt/a6/u6
특정 사용자(UID 2003)로 인식, 매핑 안됨
* no_all_squash는 기본 상태를 유지하는 옵션이므로, NFS의 기본 보안 정책인 root_squash가 활성화되어 root가 익명화됨 


7. /home/a7 192.168.10.192(rw,sync,no_all_squash,no_root_squash,insecure)
#  ls -ln /mnt/a7/u7
# -rw-r--r--. 1 2003 2002 0  2월  5 04:30 /mnt/a7/u7
특정 사용자(UID 2003)로 인식, 매핑 안됨

8. /home/a8 192.168.10.192(rw,sync,all_squash,anonuid=2003,anongid=2002,insecure)
#  ls -ln /mnt/a8/u8
# -rw-r--r--. 1 2003 2002 0  2월  5 04:30 /mnt/a8/u8
특정 사용자(UID 2003)로 인식, 매핑 안됨
* 원래 신분을 all_squash 로 무시하지만 anonuid=2003,anongid=2002 설정을 해줌으로써 강제적으로 신분을 전환 시킨다

결과 분석
실험 결과, all_squash는 모든 신분을 익명화하지만 no_root_squash 오직 root 계정에만 영향을 미친다는 것을 확인하였음
보안이 중요한 환경에서는 all_squash를, 관리 편의성이 중요한 환경에서는 no_root_squash를 선택적으로 적용해야 함

 

참고사항

옵션명 대상 동작 원리 (매핑 여부) 결과 UID (서버 저장 번호)
root_squash root(0) 매핑 O: root의 권한을 박탈하여 익명화함 65534 (nfsnobody)
no_root_squash root(0) 매핑 X: root의 신분과 권한을 그대로 유지함 0 (root)
all_squash 모든 유저 매핑 O: 접속자 모두를 무조건 익명화함 65534 (nfsnobody)
no_all_squash 일반 유저 매핑 X: 일반 유저의 UID를 그대로 인정함 2003 (원래 UID)
anonuid=2003 매핑 대상 매핑 O: 익명화될 때 특정 UID로 강제 지정함 2003 (nfsuser)

 

- 매핑 O: 원래 번호(0 또는 2003)가 서버 설정에 의해 다른 번호로 바뀜
- 매핑 X: 원래 번호가 그대로 유지됨

- Squash:원래 신분을 무시 한다, 익명(유령) 으로 생각하면 편하다
- No Squash: 원래 신분을 인정 한다