NAS(Network Attached Storage) 환경에서 SMB(Server Message Block) 공유 폴더를 운영하다 보면, 특정 사용자나 그룹이 공유 폴더에 접근하지 못하거나, 접근하더라도 예상치 못한 권한 문제로 파일 생성, 수정, 삭제가 불가능해지는 상황을 자주 마주하게 됩니다. 특히 여러 사용자가 동시에 데이터를 공유하는 환경에서는 이러한 권한 문제가 업무 생산성에 직접적인 영향을 미치기 때문에 신속하고 정확한 진단 및 해결이 필수적입니다.
일반적으로 NAS 시스템에서 SMB 공유 권한 문제는 크게 두 가지 원인으로 발생합니다. 첫째는 SMB 서비스 자체의 설정 오류, 둘째는 파일 시스템 레벨의 권한(POSIX 권한 또는 ACL) 문제 또는 이 둘의 복합적인 작용입니다. 단순히 chmod나 chown 명령으로 해결되지 않는 복잡한 상황, 예를 들어 특정 그룹에만 예외적인 쓰기 권한을 부여해야 하거나, 특정 사용자에게만 읽기 전용 접근을 허용해야 할 때, 우리는 파일 시스템의 ACL(Access Control List) 설정을 깊이 이해하고 활용해야 합니다.
SMB 공유 접근 거부 시나리오 분석 및 초기 진단
NAS에서 SMB 공유 폴더에 접근했을 때 "액세스 거부" 메시지가 나타나거나, 특정 파일 및 폴더에 대해 쓰기 작업이 실패하는 경우, 가장 먼저 확인해야 할 것은 클라이언트와 서버 양쪽에서의 기본 설정입니다. 클라이언트 측에서는 네트워크 드라이브 매핑 시 사용한 계정 정보가 올바른지, 그리고 NAS 서버의 방화벽이 SMB 포트(TCP 445)를 차단하고 있지 않은지 확인해야 합니다.
서버 측, 즉 NAS 시스템에서는 Samba 설정 파일(smb.conf)과 실제 공유 폴더의 파일 시스템 권한을 동시에 검토해야 합니다. 예를 들어, 특정 공유 폴더에 접근하려는 사용자가 Samba에 등록된 유효한 사용자인지, 그리고 해당 사용자가 속한 그룹이 공유 폴더 설정에서 허용되어 있는지 확인하는 것이 중요합니다.
# Samba 설정 파일 구문 오류 검사
# testparm 명령은 smb.conf 파일의 구문 오류를 검사하고, 현재 적용된 설정을 보여줍니다.
testparm /etc/samba/smb.conf
# Samba 서비스 상태 확인
# systemctl status 명령으로 smb 및 nmb 서비스가 정상적으로 실행 중인지 확인합니다.
systemctl status smb nmb
# 특정 공유 폴더의 기본 POSIX 권한 확인
# ls -ld 명령으로 공유 폴더의 소유자, 그룹, 그리고 기본 rwx 권한을 확인합니다.
ls -ld /path/to/your/share_folder
초기 진단에서 testparm 결과에 문제가 없거나 Samba 서비스가 정상 작동함에도 불구하고 접근 문제가 지속된다면, 이는 대부분 파일 시스템 레벨의 권한 문제, 특히 ACL과 관련된 경우가 많습니다.
POSIX 권한 모델의 한계와 ACL 도입 배경
리눅스 및 유닉스 기반 시스템의 전통적인 POSIX 권한 모델은 소유자(User), 그룹(Group), 기타(Others) 세 가지 범주에 대해 읽기(r), 쓰기(w), 실행(x) 권한을 부여합니다. 이는 매우 직관적이고 간단하지만, 복잡한 권한 요구사항을 처리하기에는 한계가 명확합니다. 예를 들어, 한 폴더에 여러 사용자나 그룹이 각기 다른 세밀한 권한을 가져야 할 때, POSIX 권한만으로는 이를 표현하기 어렵습니다.
이러한 한계를 극복하기 위해 도입된 것이 바로 ACL(Access Control List)입니다. ACL은 POSIX 권한 모델 위에 추가적인 유연성을 제공하여, 특정 파일이나 디렉토리에 대해 개별 사용자 또는 그룹별로 세밀한 권한을 부여할 수 있게 해줍니다. NAS 환경에서 여러 부서나 프로젝트 팀이 하나의 공유 폴더를 사용하면서 각기 다른 접근 수준을 요구할 때, ACL은 매우 강력한 도구가 됩니다.
ACL을 사용하려면 파일 시스템이 ACL을 지원해야 합니다. 대부분의 최신 리눅스 파일 시스템(ext3, ext4, XFS 등)은 기본적으로 ACL을 지원하지만, 경우에 따라 마운트 옵션에 acl을 명시해야 할 수도 있습니다.
# 파일 시스템 마운트 옵션 확인
# mount 명령으로 현재 마운트된 파일 시스템의 옵션을 확인하여 'acl'이 포함되어 있는지 검토합니다.
mount | grep "/path/to/your/share_folder"
# 만약 'acl' 옵션이 없다면, /etc/fstab 파일을 수정하여 추가하고 재마운트해야 합니다.
# 예시: /etc/fstab 엔트리 수정 (기존 옵션에 'acl' 추가)
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /path/to/your/share_folder ext4 defaults,acl 0 2
ACL 설정 및 관리: setfacl과 getfacl 활용
ACL을 설정하고 관리하는 주요 도구는 setfacl과 getfacl 명령입니다. getfacl은 파일이나 디렉토리에 설정된 ACL을 확인하는 데 사용되며, setfacl은 ACL을 추가, 수정, 삭제하는 데 사용됩니다.
ACL 확인: getfacl
특정 파일이나 디렉토리의 ACL을 확인하려면 getfacl 명령을 사용합니다.
# 공유 폴더의 ACL 정보 확인
# getfacl 명령으로 /path/to/your/share_folder에 적용된 ACL을 상세하게 확인합니다.
getfacl /path/to/your/share_folder
# 출력 예시:
# # file: /path/to/your/share_folder
# # owner: user_a
# # group: group_b
# user::rwx
# group::rwx
# other::r-x
# user:specific_user:rwx # 특정 사용자 'specific_user'에게 rwx 권한 부여
# group:specific_group:rwx # 특정 그룹 'specific_group'에게 rwx 권한 부여
# mask::rwx
# default:user::rwx # 기본 ACL: 새 파일/폴더 생성 시 적용될 권한
# default:group::rwx
# default:other::r-x
# default:user:specific_user:rwx
# default:group:specific_group:rwx
# default:mask::rwx
여기서 mask는 ACL 항목에 부여된 최대 유효 권한을 제한하는 역할을 합니다. default 항목은 해당 디렉토리 내에 새로 생성되는 파일이나 서브 디렉토리에 자동으로 상속될 ACL 규칙을 정의합니다.
ACL 설정: setfacl
setfacl 명령을 사용하여 특정 사용자 또는 그룹에 대해 ACL을 설정할 수 있습니다.
# 특정 사용자 'developer'에게 공유 폴더에 대한 읽기/쓰기/실행 권한 부여
# -m 옵션은 ACL 항목을 수정하거나 추가합니다.
# -R 옵션은 하위 디렉토리 및 파일에 재귀적으로 적용합니다.
setfacl -m u:developer:rwx /path/to/your/share_folder
# 특정 그룹 'marketing'에게 공유 폴더에 대한 읽기/실행 권한만 부여
setfacl -m g:marketing:r-x /path/to/your/share_folder
# 새 파일/폴더 생성 시 자동으로 ACL이 상속되도록 default ACL 설정
# -d 옵션은 default ACL을 설정합니다.
setfacl -m d:u:developer:rwx /path/to/your/share_folder
setfacl -m d:g:marketing:r-x /path/to/your/share_folder
# ACL 항목 제거 (예: 'developer' 사용자의 ACL 제거)
# -x 옵션은 ACL 항목을 제거합니다.
setfacl -x u:developer /path/to/your/share_folder
주의사항: ACL을 설정할 때 mask 값에 유의해야 합니다. mask는 모든 ACL 항목에 대한 유효 권한의 상한선을 결정합니다. 예를 들어, mask가 r-x로 설정되어 있다면, rwx 권한을 부여하더라도 실제 유효 권한은 r-x가 됩니다. setfacl -m m::rwx /path/to/your/share_folder 명령으로 mask를 조정할 수 있습니다.
Samba 설정과 ACL의 연동 및 충돌 방지
Samba는 자체적인 공유 권한 설정(read only, write list, valid users 등)을 가지고 있으며, 이 설정은 파일 시스템의 POSIX 권한 및 ACL과 상호작용합니다. Samba의 공유 권한은 파일 시스템 권한보다 우선적으로 적용될 수 있으므로, 두 가지 설정을 일관성 있게 유지하는 것이 중요합니다.
가장 안전한 방법은 Samba 공유 설정에서 force user 또는 force group을 사용하여 모든 접근을 특정 사용자/그룹으로 강제하고, 실제 파일 시스템 권한 및 ACL은 해당 강제된 사용자/그룹을 기준으로 설정하는 것입니다. 또는 create mask와 directory mask를 사용하여 Samba를 통해 생성되는 파일 및 디렉토리의 기본 권한을 제어할 수 있습니다.
# /etc/samba/smb.conf 예시
[Share_Folder]
comment = My Shared Folder
path = /path/to/your/share_folder
browsable = yes
writable = yes
# 유효 사용자 목록 (여기에 없는 사용자는 접근 불가)
valid users = @group_allowed, specific_user1, specific_user2
# 쓰기 가능한 사용자 목록 (valid users 범위 내에서 추가 제한)
write list = @group_writers, specific_writer
# 모든 파일/디렉토리 생성 시 소유자를 'samba_user'로 강제
force user = samba_user
# 모든 파일/디렉토리 생성 시 그룹을 'samba_group'으로 강제
force group = samba_group
# 새로 생성되는 파일의 기본 권한 (0664: rw-rw-r--)
create mask = 0664
# 새로 생성되는 디렉토리의 기본 권한 (0775: rwxrwxr-x)
directory mask = 0775
# ACL을 사용하는 경우, 파일 시스템 권한을 따르도록 설정
# 이 옵션은 Samba가 파일 시스템의 ACL을 존중하도록 지시합니다.
unix extensions = no
inherit permissions = yes
unix extensions = no는 Samba가 유닉스 확장 기능을 사용하지 않고, Windows 클라이언트가 기대하는 방식으로 권한을 처리하도록 합니다. inherit permissions = yes는 부모 디렉토리의 권한을 상속받도록 설정하여 ACL과 함께 작동할 때 일관성을 유지하는 데 도움이 됩니다. 설정을 변경한 후에는 반드시 Samba 서비스를 재시작해야 합니다.
# Samba 서비스 재시작
# 설정을 변경한 후에는 반드시 서비스를 재시작하여 변경사항을 적용합니다.
sudo systemctl restart smb nmb
적용 후 검증 및 사이드 이펙트 방지 FAQ
ACL 설정을 완료하고 Samba 서비스를 재시작했다면, 실제로 의도한 대로 권한이 적용되었는지 검증하는 것이 중요합니다.
- 클라이언트에서 접근 테스트: ACL을 적용한 사용자 계정으로 Windows/macOS 클라이언트에서 공유 폴더에 접근하여 파일 생성, 수정, 삭제 등의 작업을 시도해 봅니다.
getfacl로 재확인: 서버에서getfacl명령으로 공유 폴더 및 그 안에 새로 생성된 파일/폴더의 ACL이 올바르게 상속되었는지 확인합니다.- 로그 분석: Samba 로그(
log.smbd,log.nmbd)를 확인하여 접근 거부나 권한 관련 오류 메시지가 더 이상 발생하지 않는지 검토합니다.
# Samba 로그 파일 확인
# tail -f 명령으로 실시간으로 Samba 로그를 모니터링하여 오류를 확인합니다.
tail -f /var/log/samba/log.smbd
Q. ACL 설정 후에도 특정 사용자/그룹이 접근 불가합니다.
A. Samba의 valid users 또는 write list 설정이 파일 시스템의 ACL보다 우선할 수 있습니다. smb.conf 파일에서 해당 공유 폴더의 valid users 및 write list 항목에 문제가 되는 사용자 또는 그룹이 포함되어 있는지 확인하세요. 또한, 해당 사용자가 Samba 시스템에 smbpasswd -a <username>으로 등록되어 있고, 비밀번호가 올바른지 확인해야 합니다. 마지막으로, mask 권한이 너무 제한적으로 설정되어 있지 않은지 getfacl로 확인하세요.
Q. 새로 생성되는 파일/폴더에 ACL이 상속되지 않습니다.
A. setfacl -d 옵션을 사용하여 기본(default) ACL을 설정했는지 확인해야 합니다. default ACL은 해당 디렉토리 내에 새로 생성되는 항목에만 적용됩니다. 기존 파일이나 폴더에는 setfacl -R 옵션을 사용하여 재귀적으로 ACL을 적용해야 합니다. 또한, Samba 설정의 create mask 및 directory mask가 default ACL과 충돌하지 않도록 조정해야 할 수도 있습니다.
Q. Samba와 ACL을 함께 사용할 때 성능 저하가 발생할 수 있나요?
A. 일반적으로 ACL을 사용하는 것이 POSIX 권한만을 사용하는 것보다 약간의 오버헤드가 발생할 수 있지만, 현대의 파일 시스템과 하드웨어에서는 대부분 무시할 수 있는 수준입니다. 극단적인 수의 ACL 항목이 한 파일에 적용되거나, 매우 높은 I/O 부하가 발생하는 환경이 아니라면 성능 저하를 체감하기 어렵습니다. 만약 성능 문제가 의심된다면, fstab에서 noacl 옵션으로 마운트하여 ACL을 비활성화한 후 성능을 비교해 볼 수 있지만, 이는 권한 문제 해결에는 도움이 되지 않습니다.
NAS 환경에서 SMB 공유 폴더의 접근 권한 문제는 복합적인 원인으로 발생할 수 있습니다. Samba 설정, POSIX 권한, 그리고 ACL의 상호작용을 정확히 이해하고 진단하는 것이 중요합니다. 이 가이드에서 제시된 단계별 분석 및 조치 방법을 통해 복잡한 권한 문제도 효과적으로 해결하고, 안정적인 NAS 서비스를 운영할 수 있을 것입니다.
