윈도 사용자는 탐색기에서 \\서버\공유폴더로 네트워크 드라이브를 잡고 싶어 하지만, 윈도는 SMB/CIFS (Server Message Block)를, 리눅스는 전통적으로 NFS 를 쓴다. 이 간극을 메우는 도구가 Samba 다.
SMB : 1980년대 IBM이 만들고 마이크로소프트가 발전시킨 네트워크 파일 공유 프로토콜. 후에 CIFS (Common Internet File System)로 확장돼 오늘날 윈도 네트워크 공유의 표준이 됐다.
Samba : 그 SMB 프로토콜을 리눅스/유닉스 위에서 구현한 자유 소프트웨어. 리눅스 서버가 마치 윈도 파일 서버처럼 보이게 만든다.
Samba는 전통적으로 두 개의 데몬 으로 동작한다.
데몬 역할 사용 포트 smbd파일·프린터 공유, 사용자 인증 처리 TCP 139, 445 nmbdNetBIOS 이름 서비스, 네트워크 브라우징(이름→IP 해석) UDP 137, 138
smbd가 실제 파일 전송과 인증을 담당하는 핵심이다.
nmbd는 윈도의 "내 네트워크 환경"에 서버 이름이 보이게 해주는 이름 해석 서비스다.
현대 환경에서는 DNS와 445 포트만으로도 동작하지만, 시험에서는 두 데몬의 역할 구분을 묻는다.
smbd는 파일 공유와 인증 , nmbd는 NetBIOS 이름 해석과 브라우징 . 포트도 짝이 있다 — smbd는 139/445(TCP), nmbd는 137/138(UDP).
Samba 패키지를 설치하면 보통 다음 명령으로 서비스를 다룬다.
# 패키지 설치 (RHEL 계열)
yum install samba samba-client samba-common
# 서비스 시작/자동시작 (systemd)
systemctl start smb nmb
systemctl enable smb nmb
# 구버전(SysV init)
service smb start
배포판 차이 : 서비스 이름이 배포판마다 다르다. RHEL/CentOS 계열은 smb, nmb, 데비안/우분투 계열은 smbd, nmbd가 서비스 이름이다. 설정 파일 위치도 RHEL은 /etc/samba/smb.conf로 동일하다.
Samba의 동작은 거의 전부 /etc/samba/smb.conf 하나로 결정된다.
구조는 윈도의 INI 파일과 비슷하다 — 섹션(section) 단위로 나뉜다.
섹션 이름은 대괄호 [ ]로 감싼다.
# /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = LINUXSRV
security = user
map to guest = Bad User
log file = /var/log/samba/log.%m
max log size = 50
[homes]
comment = Home Directories
browseable = no
writable = yes
[public]
comment = Public Share
path = /srv/samba/public
browseable = yes
writable = yes
guest ok = yes
특별한 의미를 갖는 세 가지 섹션이 있다.
섹션 의미 [global]서버 전체에 적용되는 전역 설정. 워크그룹, 보안 모드, 로깅 등 [homes]각 사용자의 홈 디렉터리를 자동으로 공유 (특수 섹션) [printers]시스템에 등록된 프린터를 자동으로 공유 (특수 섹션)
[global]을 제외한 나머지 섹션 이름은 곧 공유 이름(share name) 이 된다.
예: 윈도에서 \\LINUXSRV\public로 접근하면 [public] 섹션의 설정이 적용된다.
[homes]는 마법 같은 섹션이다. 사용자 kim이 접속하면 Samba가 [homes] 정의를 복제해 [kim]이라는 가상 공유를 만들어 kim의 홈 디렉터리(/home/kim)로 연결한다. 그래서 별도로 사용자마다 공유를 정의할 필요가 없다.
security 지시어는 인증 방식을 결정하는 가장 중요한 항목이다.
security 값 의미 user(기본·권장) Samba 서버 자체가 사용자/암호로 인증. 접속자는 Samba 계정이 있어야 함 share공유 단위 암호 인증 (구식, 현재 폐기됨) domain도메인 컨트롤러(별도 서버)에 인증 위임 ads액티브 디렉터리(Active Directory) 도메인에 가입해 인증
workgroup : 윈도 작업 그룹 이름을 지정한다.
server string : 네트워크에서 보이는 서버 설명을 지정한다.
%v(버전), %m(클라이언트 NetBIOS 이름) 같은 치환 변수 를 쓸 수 있다.
개별 공유 섹션에서 자주 쓰는 지시어를 정확히 알아야 실기에서 빈칸을 채울 수 있다.
지시어 의미 예 path공유할 실제 디렉터리 경로 path = /srv/samba/datacomment공유 설명 comment = Team Sharebrowseable네트워크 목록에 공유 이름이 보일지 browseable = yeswritable (= read only = no)쓰기 허용 여부 writable = yesread only읽기 전용 (writable의 반대) read only = yesguest ok (= public)암호 없이 게스트 접근 허용 guest ok = yesvalid users접근 허용할 사용자/그룹 valid users = kim, @saleswrite list읽기 전용 공유에서 쓰기를 허용할 사용자 write list = admincreate mask새로 만든 파일의 권한 마스크 create mask = 0644directory mask새로 만든 디렉터리의 권한 마스크 directory mask = 0755
⚠️ 주의 : writable = yes와 read only = no는 같은 뜻 이다. 둘을 동시에 모순되게 쓰면 마지막에 쓴 값이 이긴다. valid users = @sales처럼 그룹은 @를 앞에 붙인다(그룹 지정 기호).
다음은 영업팀(sales 그룹)만 읽고 쓸 수 있는 공유 예시다.
[sales]
comment = Sales Team Data
path = /srv/samba/sales
valid users = @sales
writable = yes
browseable = yes
create mask = 0660
directory mask = 0770
권한의 이중 관문 : Samba 공유 접근은 두 단계 검사를 통과해야 한다. (1) smb.conf의 valid users/writable 같은 Samba 수준 권한 , (2) 그 디렉터리에 대한 리눅스 파일시스템 권한(chmod/chown) . 둘 중 하나라도 막으면 접근이 거부된다. "smb.conf는 맞는데 쓰기가 안 된다"면 십중팔구 리눅스 디렉터리 권한 문제다.
smb.conf를 수정한 뒤 오타를 잡으려면 testparm 으로 문법을 검사한다.
실무에서 서비스를 재시작하기 전에 반드시 거치는 단계다.
# 문법 검사 + 적용될 설정 요약 출력
testparm
# 특정 파일을 검사
testparm /etc/samba/smb.conf
출력에 Loaded services file OK.가 나오면 문법은 정상이다.
이어서 Enter를 누르면 실제로 적용될 모든 설정값을 펼쳐 보여준다.
smb.conf 수정 → testparm으로 검증 → systemctl restart smb → smbclient로 접속 테스트. 이 순서로 작업한다.
security = user에서는 접속자가 Samba 비밀번호 를 가져야 한다.
핵심은 이것이 리눅스 로그인 비밀번호(/etc/shadow)와 별개 라는 점이다.
Samba는 자체 암호 데이터베이스(기본은 TDB 형식, 과거엔 /etc/samba/smbpasswd 파일)를 쓴다.
전제 조건 : Samba 사용자는 먼저 리눅스 시스템 계정으로 존재해야 한다. Samba 계정은 기존 리눅스 사용자 위에 비밀번호만 얹는 형태다.
# 1) 리눅스 시스템 계정이 먼저 있어야 한다
useradd -s /sbin/nologin sambauser
# 2) Samba 비밀번호 등록 (대화형으로 비밀번호 2번 입력)
smbpasswd -a sambauser
smbpasswd의 주요 옵션은 정확히 구분해 외운다.
옵션 의미 -a 사용자Samba 데이터베이스에 사용자 추가 (add) -x 사용자Samba 사용자 삭제 (delete) -d 사용자사용자 계정 비활성화 (disable) -e 사용자비활성화된 계정 활성화 (enable) -n 사용자비밀번호를 없음(null) 으로 설정 (옵션 없이) 사용자해당 사용자의 비밀번호 변경
⚠️ 함정 : smbpasswd -a로 추가하기 전에 그 사용자가 /etc/passwd에 없으면 오류가 난다. "리눅스 계정 먼저, Samba 비밀번호 나중"의 순서를 헷갈리면 안 된다. 또한 pdbedit -L로 등록된 Samba 사용자 목록을 확인할 수 있다.
# 등록된 Samba 사용자 목록 보기
pdbedit -L
# 상세 정보까지
pdbedit -Lv
서버 설정이 끝나면 클라이언트 쪽에서 접속을 확인해야 한다.
smbclient 는 FTP와 비슷한 대화형 인터페이스로 SMB 공유에 접속하는 도구다.
# 서버가 제공하는 공유 목록 보기 (-L = list)
smbclient -L //LINUXSRV -U sambauser
# 특정 공유에 접속 (FTP 비슷한 프롬프트로 진입)
smbclient //LINUXSRV/sales -U sambauser
# 접속 후 smb: \> 프롬프트에서 ls, get, put, cd 등 사용
리눅스 클라이언트에서 SMB 공유를 마운트 해 일반 디렉터리처럼 쓸 수도 있다.
# cifs 타입으로 마운트
mount -t cifs //LINUXSRV/sales /mnt/sales -o username=sambauser
# /etc/fstab 등록 예
# //LINUXSRV/sales /mnt/sales cifs username=sambauser,password=secret 0 0
mount 타입 정리 : 윈도/Samba 공유는 mount -t cifs(과거엔 -t smbfs), 리눅스끼리는 mount -t nfs. 시험에서 "윈도 공유 폴더를 리눅스에 마운트하는 타입"을 물으면 cifs다.
# ① 설치
yum install samba samba-client
# ② 공유 디렉터리 준비 + 리눅스 권한
mkdir -p /srv/samba/sales
chgrp sales /srv/samba/sales
chmod 2770 /srv/samba/sales # SGID로 그룹 상속
# ③ smb.conf 편집 ([global] + [sales] 섹션)
vi /etc/samba/smb.conf
# ④ 문법 검증
testparm
# ⑤ Samba 계정 등록
smbpasswd -a sambauser
# ⑥ 서비스 시작
systemctl restart smb nmb
# ⑦ 방화벽 개방 (firewalld)
firewall-cmd --add-service=samba --permanent
firewall-cmd --reload
# ⑧ 접속 테스트
smbclient -L //localhost -U sambauser
직접 쳐보기 : 가상머신 두 대(또는 로컬 루프백)로 위 ①~⑧을 한 번 따라 해 본다. 특히 ④ testparm이 토해내는 경고 메시지를 읽어보면 어떤 지시어가 잘못됐는지 감이 잡힌다. ⑦ 방화벽을 빼먹고 "접속이 안 된다"며 헤매기 쉽다.
내일은 리눅스끼리의 표준 공유인 NFS를 다루며, Samba와 어떻게 다른지 비교한다.
SMB/CIFS : 윈도가 쓰는 네트워크 파일 공유 프로토콜. Samba가 리눅스에서 이것을 구현한다.
smbd : 파일·프린터 공유와 사용자 인증을 처리하는 Samba의 핵심 데몬. TCP 139/445를 쓴다.
nmbd : NetBIOS 이름을 IP로 풀어주고 네트워크 목록에 서버를 띄우는 데몬. UDP 137/138을 쓴다.
smb.conf : /etc/samba/에 있는 Samba의 단일 설정 파일. 대괄호 섹션으로 구성된다.
[homes] : 접속한 사용자의 홈 디렉터리를 자동으로 가상 공유로 만들어 주는 특수 섹션.
security = user : Samba 서버가 자체 계정/암호로 직접 인증하는 기본 모드.
valid users : 그 공유에 접근할 수 있는 사용자 목록. 이름 앞에 @를 붙이면 그룹을 뜻한다.
smbpasswd : Samba 전용 비밀번호를 등록·삭제·잠금하는 명령. -a 추가, -x 삭제, -d 비활성, -e 활성.
testparm : smb.conf의 문법을 검사하고 실제 적용될 값을 펼쳐 보여주는 검증 도구.
cifs : 윈도/Samba 공유를 리눅스에 마운트할 때 지정하는 파일시스템 타입(mount -t cifs).
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
Samba에서 실제 파일 공유와 사용자 인증을 담당하는 데몬으로 옳은 것은?
A nmbd B smbd C rpcbind D winbindd smb.conf에서 각 사용자의 홈 디렉터리를 자동으로 공유하는 특수 섹션은?
A [global] B [printers] C [homes] D [public] 다음 smb.conf 설정에 대한 설명으로 옳은 것은?
```ini
[data]
path = /srv/data
valid users = @sales
writable = yes
```
A 모든 사용자가 게스트로 접근할 수 있다 B sales라는 이름의 사용자 한 명만 접근할 수 있다 C sales 그룹에 속한 사용자들이 읽고 쓸 수 있다 D 읽기 전용 공유이므로 쓰기가 불가능하다 Samba 사용자를 데이터베이스에 추가하기 위한 명령으로 옳은 것은?
A smbpasswd -x user B smbpasswd -a user C smbpasswd -d user D smbpasswd -e user smb.conf를 수정한 뒤 문법 오류를 검사하는 명령은?
A smbclient -L B testparm C pdbedit -L D nmblookup 리눅스 클라이언트에서 윈도/Samba 공유 폴더를 마운트할 때 사용하는 파일시스템 타입은?
[global] 섹션의 security = user 설정에 대한 설명으로 옳은 것은?
A 공유별로 암호를 설정하는 구식 방식이다 B Samba 서버 자체가 사용자명과 암호로 인증을 수행한다 C 별도의 도메인 컨트롤러에 인증을 위임한다 D Active Directory에 가입하여 인증한다