CIFS/SMB 마운트 — 윈도우 공유 폴더를 리눅스에서 연결하기

리눅스에서 CIFS/SMB 공유 폴더를 마운트하는 방법, 자격증명 파일 관리, fstab 영구 설정, smbclient 사용법, SMB 버전 보안 설정까지 설명합니다.

· 5 min read · PALDYN Team

지난 글에서 유닉스 계열 서버 간 파일 공유에 쓰이는 NFS를 살펴봤습니다. 이번에는 CIFS(Common Internet File System) — Windows 네트워크 공유 폴더를 리눅스에서 마운트하는 방법을 알아봅니다. CIFS는 SMB 프로토콜을 리눅스 파일시스템으로 구현한 것으로, 윈도우·Mac·NAS 장비의 공유 폴더를 로컬 디렉터리처럼 접근할 수 있게 합니다.

SMB와 CIFS의 관계

SMB(Server Message Block)는 Microsoft가 개발한 파일 공유 프로토콜입니다. CIFS는 SMB1을 인터넷 표준으로 공개한 이름이며, 현재는 SMB2, SMB3으로 발전했습니다. 리눅스 커널의 마운트 타입은 여전히 cifs를 사용하지만, 실제 통신 버전은 옵션으로 지정합니다.

CIFS/SMB 아키텍처

SMB 버전별 보안: SMB1은 WannaCry 랜섬웨어가 악용한 EternalBlue 취약점이 있습니다. 반드시 SMB2 이상을 사용해야 합니다.

사전 준비

# Debian/Ubuntu
sudo apt install cifs-utils smbclient

# RHEL/CentOS
sudo dnf install cifs-utils samba-client

임시 마운트

# 마운트 포인트 생성
sudo mkdir -p /mnt/smb

# 기본 마운트 (비밀번호를 명령줄에 노출 — 개발/테스트용만)
sudo mount -t cifs //192.168.1.10/share /mnt/smb \
    -o username=alice,password=secret,vers=3.0

# 도메인 환경 (Active Directory)
sudo mount -t cifs //192.168.1.10/share /mnt/smb \
    -o username=alice,domain=CORP,vers=3.0

# 마운트 확인
df -hT /mnt/smb
findmnt /mnt/smb

자격증명 파일 — 비밀번호 보호

CIFS/SMB 명령어

명령줄에 비밀번호를 직접 쓰면 ps aux로 노출됩니다. 자격증명 파일을 분리해야 합니다.

# ~/.smbcredentials 생성
cat > ~/.smbcredentials << 'EOF'
username=alice
password=secret123
domain=WORKGROUP
EOF

# root만 읽을 수 있도록 제한
chmod 600 ~/.smbcredentials

# 자격증명 파일로 마운트
sudo mount -t cifs //192.168.1.10/share /mnt/smb \
    -o credentials=/home/alice/.smbcredentials,vers=3.0

fstab 영구 설정

# /etc/fstab
//192.168.1.10/share  /mnt/smb  cifs  credentials=/root/.smbcredentials,uid=1000,gid=1000,vers=3.0,_netdev,noauto,x-systemd.automount  0 0

주요 옵션 설명:

옵션설명
uid=, gid=마운트된 파일 소유자 (CIFS는 리눅스 권한 미지원)
file_mode=0664파일 권한 고정
dir_mode=0775디렉터리 권한 고정
vers=3.0SMB3 사용 (보안)
_netdev네트워크 준비 후 마운트
noauto부팅 시 자동 마운트 안 함
x-systemd.automount첫 접근 시 자동 마운트
# fstab 적용 테스트
sudo mount -a

# systemd automount 활성화
sudo systemctl daemon-reload

smbclient — FTP 방식 접근

마운트 없이 FTP처럼 파일을 주고받을 수 있습니다.

# 서버의 공유 목록 조회
smbclient -L //192.168.1.10 -U alice

# 대화형 접속
smbclient //192.168.1.10/share -U alice
# 내부 명령: ls, cd, get, put, mget, mput, del

# 단일 명령 실행 (스크립트용)
smbclient //192.168.1.10/share -U alice -c 'get report.pdf /tmp/'

# 익명 접속 (게스트)
smbclient //192.168.1.10/public -N

리눅스를 Samba 서버로 구성

리눅스가 Windows 클라이언트에 폴더를 제공할 때도 Samba를 사용합니다.

sudo apt install samba

# /etc/samba/smb.conf
cat >> /etc/samba/smb.conf << 'EOF'
[shared]
    path = /srv/shared
    valid users = alice bob
    writable = yes
    create mask = 0664
    directory mask = 0775
EOF

# Samba 사용자 추가 (별도 비밀번호)
sudo smbpasswd -a alice

# 서비스 재시작
sudo systemctl restart smbd

# 설정 검증
testparm

연결 진단

# 서버 접근 가능 여부
ping 192.168.1.10
telnet 192.168.1.10 445

# SMB 연결 테스트
smbclient //192.168.1.10/share -U alice -c 'ls' 2>&1

# 마운트된 CIFS 통계
cat /proc/fs/cifs/Stats

# 커널 CIFS 디버그
dmesg | grep -i cifs

지난 글: NFS 마운트 — 네트워크 파일시스템 공유와 연결

다음 글: FUSE — 사용자 공간에서 파일시스템 만들기


읽어주셔서 감사합니다. 😊