파일서비스 개요
년도별 탄생 비화가 중요한 내용은 아니지만 관련된 명령어를 떠올리거나 대상에 대해 연상하는데 많은 도움이 된다.
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
'자격증' 카테고리의 다른 글
[리눅스마스터 1급] 12. 메일 서비스 (sendmail) (0) | 2025.05.03 |
---|---|
[리눅스마스터 1급] 11-3. 파일 서비스 (vsftpd) (0) | 2025.04.30 |
[리눅스마스터 1급] 11-1. 파일 서비스 (NFS) (0) | 2025.04.29 |
[리눅스마스터 1급] 10. 웹 서비스 (Apache) (0) | 2025.04.28 |
[리눅스마스터 1급] 9. 시스템 백업 (0) | 2025.04.19 |