Ubuntu 26.04 강좌 / Samba로 제한된 파일 공유 만들기
제한된 Samba 공유는 사용자 인증, 공유의 접근 규칙, 리눅스 디렉터리 권한과 네트워크 제한을 함께 설정해야 합니다. 이 실습은 새 전용 서버에 LabShare를 만들고 허용 사용자와 제외 사용자를 각각 시험해 접근 범위를 확인합니다.
서버·계정·접속 경로 정하기
Samba는 SMB(Server Message Block) 프로토콜로 파일을 공유합니다. Windows 파일 탐색기에서는 서버의 실제 주소로 접속하고, Linux에서는 smbclient로 시험합니다. 인터넷에 SMB를 직접 노출하지 않고 신뢰하는 LAN이나 관리하는 VPN 안에서 사용합니다.
아래 이름과 /srv/ubuntu-share-lab 경로가 없는 새 실습 VM을 사용합니다. 이미 운영 중인 Samba에서는 기존 전역 설정·계정·공유를 먼저 조사하고 그대로 덮어쓰지 않습니다. Samba 암호는 Linux 로그인 암호와 별도이며 먼저 Linux 계정이 존재해야 합니다.
Ubuntu의 Samba 접근 제어 문서는 계정 데이터베이스와 공유·파일 시스템 권한의 관계를 설명합니다.
그룹과 Samba 전용 계정 만들기
sudo apt update
sudo apt install samba smbclient
sudo addgroup ubuntu-share-lab
sudo adduser --disabled-password --gecos "" --no-create-home --shell /usr/sbin/nologin --ingroup ubuntu-share-lab sharelab
sudo adduser --disabled-password --gecos "" --no-create-home --shell /usr/sbin/nologin sharedeny
sudo smbpasswd -a sharelab
sudo smbpasswd -a sharedeny
sudo install -d -m 2770 -o root -g ubuntu-share-lab /srv/ubuntu-share-lab
id sharelab
id sharedeny
ls -ld /srv/ubuntu-share-lab
두 smbpasswd 명령에서 서로 구분되는 실습 암호를 대화형으로 입력합니다. 명령줄에 암호를 쓰지 않습니다. sharelab은 허용 그룹에 있고 sharedeny는 없어야 합니다. 디렉터리의 2는 setgid로 새 항목의 그룹 상속을 돕고 770은 소유자·그룹의 접근을 허용합니다. 기존 자료에 무차별 chmod 777을 적용하지 않습니다.
공유 절 추가하고 구문 검사하기
backup_dir=$(sudo mktemp -d /root/samba-lab.XXXXXX)
sudo cp -a /etc/samba/smb.conf "$backup_dir/smb.conf"
printf "%s\n" "$backup_dir"
sudoedit /etc/samba/smb.conf
백업 경로를 기록하고 기존 파일 끝에 다음 절을 한 번만 추가합니다. 같은 이름의 공유가 있으면 중단하고 새 이름을 정합니다. 기존 [global]이나 다른 공유 절을 지우지 않습니다.
[LabShare]
path = /srv/ubuntu-share-lab
browseable = yes
read only = no
guest ok = no
valid users = @ubuntu-share-lab
create mask = 0660
directory mask = 2770
sudo testparm -s
systemctl is-active smbd.service
testparm 성공과 출력의 LabShare 설정을 확인한 뒤에만 아래 명령으로 실행 중인 smbd에 다시 읽힙니다. 서비스가 비활성이면 시작 실패 원인을 로그에서 먼저 조사합니다. create mask는 권한의 상한이며 모든 새 파일이 반드시 같은 모드가 된다는 뜻은 아닙니다.
sudo smbcontrol smbd reload-config
sudo ss -lntp
서버의 smbclient 설치와 클라이언트 도구 준비는 별개입니다. VM 생성 강좌의 같은 호스트 전용망에서 서버 .20과 허용 Linux 클라이언트 .10을 먼저 확인하고, 아래 설치는 .10 클라이언트에서 실행합니다. Windows는 별도 smbclient 설치 대신 파일 탐색기의 UNC 경로를 사용합니다.
sudo apt update && sudo apt install smbclient
실제 클라이언트에서 허용과 거부 시험하기
직접 SMB 접속에는 TCP 445를 사용합니다. UFW를 관리하는 실습에서 클라이언트 주소가 실제로 192.168.56.10일 때만 다음 허용 규칙을 사용합니다. 기존 SSH 접근을 보존하고 UFW 활성화·기본 정책은 앞서 확인한 절차를 따릅니다. 광범위한 기존 허용 규칙이 있으면 좁은 규칙을 추가해도 제한되지 않습니다.
sudo ufw allow from 192.168.56.10 to any port 445 proto tcp
sudo ufw status numbered
클라이언트 터미널에서 아래 주소를 실제 서버 주소로 바꿉니다. Windows 파일 탐색기에서는 \\서버주소\LabShare 형태의 UNC 경로에서 인증합니다. 서버의 localhost 시험만으로 다른 장치의 접근이나 방화벽 효과가 확인되지는 않습니다.
smbclient //192.168.56.20/LabShare -U sharelab -c "ls"
smbclient //192.168.56.20/LabShare -U sharedeny -c "ls"
sharelab은 목록 조회에 성공하고 올바른 Samba 암호를 가진 sharedeny는 공유 접근이 거부되어야 합니다. 잘못된 암호에 따른 로그인 실패만으로 그룹 제한을 검증했다고 판단하지 않습니다. 허용 계정으로 작은 새 파일을 업로드·다시 내려받아 비교하고, 허용하지 않은 네트워크에서도 연결 거부를 별도로 확인합니다.
쓰기 시험과 변경 되돌리기
lab_dir=$(mktemp -d)
printf "samba-lab\n" > "$lab_dir/check.txt"
cd "$lab_dir"
smbclient //192.168.56.20/LabShare -U sharelab -c "put check.txt check.txt; get check.txt downloaded.txt"
cmp check.txt downloaded.txt
실습 공유가 비어 있고 check.txt가 없을 때만 실행합니다. cmp가 출력 없이 성공하면 전송 내용이 같습니다. 기존 이름이 있으면 고유한 이름을 사용하세요. 실패는 인증·공유 허용·디렉터리 권한·마운트 상태·AppArmor 기록으로 나누어 조사합니다.
중단할 때는 이번 공유 절과 이번 UFW 규칙만 제거하고 다시 구문 검사 후 설정을 읽힙니다. 새 계정·그룹을 지우기 전 다른 용도나 소유 파일이 없는지 확인하며, 공유 디렉터리는 자료를 보존한 뒤 별도로 정리합니다. 전체 smb.conf 백업 복원은 그 뒤 다른 변경이 없을 때만 검토합니다.




