본문 바로가기
자격증

[리눅스마스터 1급] 11-2. 파일 서비스 (Samba)

by LimSeongHyeon 2025. 4. 30.


파일서비스 개요

년도별 탄생 비화가 중요한 내용은 아니지만 관련된 명령어를 떠올리거나 대상에 대해 연상하는데 많은 도움이 된다.

 

 


Samba's Work Flow

파일 관련 서비스들 대부분이 비슷한 양상을 보이고 있다. 설치와 디렉터리 생성 및 권한 설정. 그리고, 각각에 주어진 configure 파일로 정책을 설정하고 이를 구동하고 제대로 구동되어있는지 확인하는 순서다.

 

 


Install & set Directory

$ sudo dnf install samba samba-common -y

# 서비스 실행
$ sudo systemctl start smb

# 서비스 자동 실행 등록 (필요시)
$ sudo systemctl enable smb
서버에서는 samba와 samba-common, 클라이언트 에서는 samba-client와 samba-common이 필요하다.

 

 

Set Directory

$ sudo mkdir -p /srv/samba/share
$ sudo chown -R user:group /srv/samba/share
$ sudo chmod -R 0777 /srv/samba/share
여느때와 동일하게 디렉토리를 생성하고 알맞는 권한을 부여한다.

 

 


/etc/samba/smb.conf

smb.conf 내부에는 각 섹션에 대해서 설정 가능한 항목에 대해 어떤 값이 설정 되어있는지 작성되어 있다.

 

 

Section

 

 

Global Section

[global]
   workgroup = WORKGROUP
   server string = My Samba Server
   security = user
   map to guest = Bad User
   log file = /var/log/samba/log.%m
   max log size = 50
옵션 설명 사용 예시 빈도
workgroup 윈도우 작업그룹 이름 설정 workgroup = WORKGROUP 높음
log file 로그 파일 경로 지정 log file = /var/log/samba/log.%m 높음
security 인증 방식 설정 security = user 높음
hosts allow 허용할 클라이언트 호스트 지정 hosts allow = 192.168.1. 중간
max log size 로그 파일 최대 크기 (KB) max log size = 50 중간
map to guest 잘못된 사용자 요청 시 guest로 매핑 여부 map to guest = Bad User 중간
server string 서버 설명 문자열 server string = My Samba Server 중간
netbios name NetBIOS 이름 지정 netbios name = MYSERVER 낮음
interfaces 서비스할 네트워크 인터페이스 지정 interfaces = eth0 낮음
passdb backend 사용자 계정 데이터베이스 백엔드 설정 passdb backend = tdbsam 낮음
hide dot files 숨김 파일 표시 여부 hide dot files = yes 낮음
dns proxy NetBIOS 이름 DNS 질의 여부 dns proxy = no 낮음
더보기
찾아서 사용하자!
# 1. name list 저장해두기
$ man smb.conf | grep -E "\(G\)|\(S\)" | sort > smb-names

# 2. name list에서 원하는 키워드 찾기
$ cat smb-names | grep -i "string"
server string (G)

# 3. 찾은 키워드 확인하고 smb.conf 메뉴얼에서 example 참고하기
$ man smb.conf | grep -A 20 "server string (G)"
       server string (G)

           This controls what string will show up in the printer comment box in print manager and next to the IPC connection in net view.
           It can be any string that you wish to show to your users.

           It also sets what will appear in browse lists next to the machine name.

           A %v will be replaced with the Samba version number.

           A %h will be replaced with the hostname.

           Default: server string = Samba %v

           Example: server string = University of GNUs Samba Server
...

 

 

 

Security

$ man smb.conf | grep "SECURITY = "
           SECURITY = AUTO
           SECURITY = USER
           SECURITY = DOMAIN
           SECURITY = ADS
Samba 버전에 따라 지원하지 않는 내용 및 추가된 내용도 있는 모양이다.
옵션 설명 사용 예시 빈도
user Samba 사용자 계정 기반 인증 단독 파일 서버, 로컬 사용자 인증 높음
auto 환경 자동 감지 → 모드 자동 선택 Samba 4 기본값, 혼합 환경 테스트 중간
ads Active Directory 기반 인증, Kerberos 사용 AD 도메인 멤버 서버, 기업 환경 중간
share 공유 단위 인증 (공유마다 비밀번호 설정, 비추천) 구형 Windows 호환, 간단 테스트 낮음
server 별도 인증 서버에 인증 요청 NT 도메인 컨트롤러에 인증 위임 낮음
domain NT Domain Controller에 인증 요청 NT 도메인 기반 네트워크 낮음

 

 

 

Share Definition

[share]
   path = /srv/samba/share
   writable = yes
   browseable = yes
   guest ok = no
   valid users = @staff, user1
   write list = user1
   read list = @staff
   force user = nobody
   create mask = 0660
   directory mask = 0770
옵션 설명 사용 예시 빈도
path 공유할 디렉토리 경로 path = /srv/samba/share 높음
read only 읽기 전용 여부 (yes/no) read only = yes 높음
writable 쓰기 가능 여부 (yes/no) writable = yes 높음
valid users 접근 허용 사용자 리스트 valid users = user1 user2 높음
create mask 파일 생성 시 기본 권한 create mask = 0664 높음
directory mask 디렉토리 생성 시 기본 권한 directory mask = 0775 높음
write list 쓰기 허용 사용자 리스트 write list = user1, @group1 중간
browseable 네트워크 탐색 표시 여부 browseable = no 중간
guest ok guest 접근 허용 여부 guest ok = yes 중간
force user 모든 파일 소유자를 지정 사용자로 강제 force user = nobody 중간
comment 공유 폴더 설명 comment = This is shared folder 낮음
public 공개 여부 (guest ok와 동일, 호환성 옵션) public = yes 낮음
follow symlinks 심볼릭 링크 따라갈지 여부 follow symlinks = yes 낮음
printable 프린터 공유 여부 printable = no 낮음
더보기
찾아서 사용하자!
# 1. name list 저장해두기
$ man smb.conf | grep "(S)" | sort > smb-share-definition-names

# 2. name list에서 원하는 키워드 찾기
$ cat smb-share-definition-names | grep -i "follow"
follow symlinks (S)

# 3. 찾은 키워드 확인하고 smb.conf 메뉴얼에서 example 참고하기
$ man smb.conf | grep -A 20 "follow symlinks (S)"
       follow symlinks (S)

           This parameter allows the Samba administrator to stop smbd(8) from following symbolic links in a particular share. Setting this
           parameter to no prevents any file or directory that is a symbolic link from being followed (the user will get an error). This
           option is very useful to stop users from adding a symbolic link to /etc/passwd in their home directory for instance. However it
           will slow filename lookups down slightly.

           This option is enabled (i.e.  smbd will follow symbolic links) by default.

           Default: follow symlinks = yes
...

 


사용자 등록 관리

# 1. 리눅스 시스템에 사용자 계정 생성
$ useradd smbuser

# 2. Samba 사용을 위한 비밀번호 설정
$ smbpasswd -a smbuser

# 3. 등록된 계정 정보를 조회
$ pdbedit -L
$ pdbedit -v -u smbuser

# 4. Samba 등록 제거
$ smbpasswd -x smbuser

# 5. 리눅스 시스템에서 사용자 계정 제거
$ userdel smbuser

 

더보기
계정 및 비밀번호 파일
smb.conf 파일을 보면 passdb backend의 값을 지정할 수 있다. 일반적으로 tdbsam으로 설정되어 있지만 다른 설정의 경우 계정 및 비밀번호가 저장되는 파일이 아래와 같이 변경될 수 있다.

 

설정값 저장 파일
passdb backend = tdbsam passdb.tdb
passdb backend = smbpasswd /etc/samba/smbpasswd
passdb backend = ldapsam LDAP 서버

고급 설정

 

Samba 서비스 포트 사용

smbd (실제 파일 공유 서비스 담당) nmbd (이름 해석, 브라우징 담당)
- 파일/프린터 공유 서비스 제공
- 클라이언트 인증
- SMB 프로토콜 처리- TCP 445, TCP 139 사용
- NetBIOS 이름 서비스 (이름 → IP 매핑)
- NetBIOS 브로드캐스트 관리
- UDP 137, 138, 139 사용
접근 데몬 프로토콜 포트 사용 용도
nmbd UDP 137 NetBIOS Name Service → 이름 질의/응답
nmbd UDP 138 NetBIOS Datagram Service → 브로드캐스트 메시지
nmbd TCP 139 NetBIOS Session Service → SMB over NetBIOS
smbd TCP 445 SMB Direct over TCP → NetBIOS 없이 SMB 직접 사용

 

 

서비스 기반 방화벽 설정

$ sudo firewall-cmd --permanent --add-service=samba
$ sudo firewall-cmd --reload

 

 

포트 기반 방화벽 설정

# firewall-cmd 버전
$ sudo firewall-cmd --permanent --add-port=137/udp
$ sudo firewall-cmd --permanent --add-port=138/udp
$ sudo firewall-cmd --permanent --add-port=139/tcp
$ sudo firewall-cmd --permanent --add-port=445/tcp
$ sudo firewall-cmd --reload

# iptables 버전
$ sudo iptables -A INPUT -p tcp --dport 139 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 445 -j ACCEPT
$ sudo iptables -A INPUT -p udp --dport 137 -j ACCEPT
$ sudo iptables -A INPUT -p udp --dport 138 -j ACCEPT

 

서비스 실행 및 점검

명령어 역할 대상 예시
smbstatus 현재 연결/잠금 상태 조회 서버 → 자신 smbstatus
testparm 설정 파일(/etc/samba/smb.conf) 검사/유효성 확인 서버 → 자신 testparm
nmblookup NetBIOS 이름 → IP 주소 확인 클라이언트 ↔ 서버 nmblookup MYSERVER
smbcontrol smbd/nmbd/winbindd에 신호/명령 전달 서버 → 자신 smbcontrol smbd reload-config

 


 

클라이언트 마운트



Install

$ dnf install -y samba-common samba-client

 

 

Access

$ smbclient -L 192.168.0.5 -U smbuser

 

 

Mount

$ sudo mount -t cifs //192.168.0.5/share /mnt/samba -o username=유저이름,password=비밀번호
cifs = Common Internet File System 이다. mount -t cifs는 mount.cift와 동일한 작동을 지닌다.

 

더보기
-t Option Manual
       -t, --types fstype
           The argument following the -t is used to indicate the filesystem type. The filesystem types which are currently supported
           depend on the running kernel. See /proc/filesystems and /lib/modules/$(uname -r)/kernel/fs for a complete list of the
           filesystems. The most common are ext2, ext3, ext4, xfs, btrfs, vfat, sysfs, proc, nfs and cifs.

 

-o Option Manual
       -o, --options opts
           Use the specified mount options. The opts argument is a comma-separated list. For example:

           mount LABEL=mydisk -o noatime,nodev,nosuid

           For more details, see the FILESYSTEM-INDEPENDENT MOUNT OPTIONS and FILESYSTEM-SPECIFIC MOUNT OPTIONS sections.

 


 

문제

설정

 

Samba 서버 메인 설정 파일의 절대 경로를 입력하세요.

더보기

/etc/samba/smb.conf

 

아래 조건을 만족하는 설정 값을 작성하시오.

  • 공유 이름이 'www'인 디렉터리를 갖는다.
  • 공유에 대한 설명은 'Web Directory'이다.
  • 공유 디렉터리 경로는 /usr/share이다.
  • reduser, blueuser에게 공유 접근이 허용된다.
  • 공유 디렉터리에서 쓰기가 거부된다.
  • reduser에 한해서 공유 디렉터리에 쓰기가 허용되게 설정한다.
  • 192.168.12.0/24의 접근만 허용되게 설정한다.
  • netbios 이름은 "My_Samba"로 설정한다.
  • 작업 그룹 이름은 "manager"로 설정한다.
  • 서버의 설명은 "This is my Samba."로 설정한다.
더보기

[www]

    comment = Web Directory

    path = /usr/share

    valid users = reduser blueuser

    writable = no

    write list = reduser

    hosts allow = 192.168.12.0/24

    netbios name = MY_Samba

    workgroup = manager

    server string = This is my Samba.

 

변경된 설정 파일을 적용하는 명령어를 입력하세요.

더보기

$ smbcontrol smbd reload-config

 


 

사용자

 

Samba 서버에 reduser를 등록하는 명령어를 입력하세요.

더보기

$ smbpasswd -a reduser

 

Samba 서버에서 reduser를 제거하는 명령어를 입력하세요.

더보기

$ smbpasswd -x reduser

 

Samba 서버에 등록된 유저 리스트를 확인하는 명령어를 입력하세요.

더보기

$ pdbedit -L

 

Samba 서버에 등록된 reduser의 자세한 정보를 확인하는 명령어를 입력하세요.

더보기

$ pdbedit -vu reduser

 

"passdb backend = tdbsam"으로 설정된 Samba 서버인 경우 계정 및 비밀번호가 저장되는 파일 이름을 입력하세요.

더보기

passdb.tdb

 


 

확인

 

Samba 서버 설정 파일 문법을 점검하는 명령어를 입력하세요.

더보기

$ testparm

 

Samba 서버에서 현재 연결 상태를 확인하는 명령어를 입력하세요.

더보기

$ smbstatus

 

 

클라이언트에서 NetBios Name(samba-server)으로 IP주소를 확인하는 명령어를 입력하세요.

더보기

$ nmblookup samaba-server

 


 

마운트

 

클라이언트가 서버(192.168.5.13)의 reduser 계정으로 사용 가능한 Samba 공유 디렉터리를 확인하는 명령어를 입력하세요.

더보기

$ smbclient -L 192.168.0.5 -U reduser

 

 

Samba 서버(192.168.0.5)로 부터 비밀번호 "1234"를 가지는 reduser 계정으로 디렉토리(/share)를 /mnt/samba에 마운트 하는 명령어를 입력하세요.

더보기

$ mount -t cifs //192.168.0.5/share /mnt/samba -o username=reduser,password=1234

혹은

$ mount.cifs //192.168.0.5/share /mnt/samba -o username=reduser,password=1234