Haru Utils

FILE SHARING · 설치·설정 레시피

Samba 인증 파일 공유와 SMB3 보안 구성

Ubuntu Samba 파일 서버에 전용 그룹·공유 경로·사용자 인증을 구성하고 guest 접속을 차단합니다. SMB3 암호화·서명·유효 사용자·클라이언트 CIDR을 제한한 뒤 Linux 또는 Windows 클라이언트에서 실제 목록과 쓰기를 검증합니다.
Samba 설치SMB 파일 공유Samba 사용자Samba 권한SMB3 암호화
지원 환경Ubuntu Server 24.04 LTS Samba standalone server
예상 시간45
난이도중급
검토일2026-08-28

BEFORE YOU START

시작 전에 준비하세요

01

sudo 권한, 유지 중인 SSH 세션과 서버 콘솔 복구 경로

02

사설 DNS·서버 사설 IP·정확한 SMB 클라이언트 CIDR

03

공유에 사용할 기존 Unix 사용자와 전용 그룹·데이터 백업·복원 시험

04

SMB3 암호화와 서명을 지원하는 승인된 클라이언트 목록

권장 대상 Windows와 Linux 사용자에게 인증된 팀 파일 공유를 제공하고 권한·암호화·복구를 운영하려는 관리자

FOLLOW THE RECIPE

8단계 구성·점검 레시피

1
확인시스템을 변경하지 않는 점검 단계

서버 역할과 클라이언트 호환성 확인

이 가이드는 Active Directory 도메인 컨트롤러가 아닌 standalone 파일 서버 기준입니다. authd·AD를 사용한다면 사용자·그룹 매핑 절차를 별도로 적용합니다.

운영체제
cat /etc/os-release
호스트 이름과 사설 주소
hostnamectl
ip -brief address
기존 Samba 패키지
dpkg -l samba smbclient cifs-utils
업무 사용자와 그룹
id <SMB_USER>
getent group samba-share
  • standalone server와 AD member server 중 목표 역할을 확정했다.
  • 모든 승인 클라이언트가 SMB3 암호화와 서명을 지원한다.
  • 공유 사용자와 퇴사·권한회수 책임자가 정해져 있다.
결과 읽기

AD 또는 authd 환경에서 로컬 smbpasswd 사용자를 병행하면 ID 매핑 충돌이 생길 수 있습니다. 이 경우 도메인 멤버 가이드를 사용합니다.

다음 판단

기존 공유·포트·데이터 경로와 접속자를 점검합니다.

2
확인시스템을 변경하지 않는 점검 단계

기존 공유·세션·포트·데이터 점검

기존 smb.conf, 활성 세션, 445 포트와 공유 데이터를 확인합니다. 활성 사용자가 있으면 즉시 재시작하지 않고 유지보수 시간을 합의합니다.

기존 서비스
systemctl status smbd.service --no-pager
445 포트
sudo ss -ltnp | grep ':445 '
현재 구성 검사
testparm --suppress-prompt -s
활성 세션과 열린 파일
sudo smbstatus
공유 경로
sudo namei -l /srv/samba/team
df -hT /srv/samba/team
  • 기존 공유와 활성 사용자의 소유 팀을 확인했다.
  • 공유 데이터의 백업과 별도 호스트 복원 시험이 있다.
  • 445를 다른 서비스가 사용하지 않는다.
  • 현재 smb.conf가 있다면 원본과 유효 설정 출력을 보관했다.
결과 읽기

smbstatus에 열린 파일이 있으면 서비스 재시작이나 공유 변경이 작업 손실을 일으킬 수 있습니다. 사용자에게 알리고 세션 정리 시간을 확보합니다.

다음 판단

Ubuntu 지원 패키지를 변경 목록 확인 후 설치합니다.

3
변경패키지·설정·서비스 상태가 달라지는 단계

Samba 서버와 검증 클라이언트 설치

Ubuntu 보안 저장소의 samba, smbclient, cifs-utils를 설치합니다. 서버와 검증 클라이언트 패키지를 구분해 필요한 호스트에만 설치합니다.

변경 단계입니다. 대상 서버, 백업 파일, 서비스 중단 영향과 바로 이전 상태로 돌아가는 방법을 다시 확인하세요.
패키지 인덱스
sudo apt-get update
서버 설치 미리 보기
apt-get --simulate install samba smbclient
신규 서버 자동 시작 차단
sudo systemctl mask smbd.service nmbd.service
precheck에서 기존 Samba 서비스와 공유가 없음을 확인한 신규 설치 분기에서만 실행합니다. 기존 운영 서비스에서는 설치·마스크 절차를 중단합니다.
서버 패키지 설치
sudo apt-get install samba smbclient
설치 직후 비노출 확인
systemctl is-enabled smbd.service nmbd.service
sudo ss -lntup | grep -E ':(137|138|139|445)[[:space:]]'
masked가 기대 결과이며 포트 출력이 없어야 합니다.
Linux 클라이언트 설치 미리 보기
apt-get --simulate install smbclient cifs-utils
Linux 클라이언트 패키지 설치
sudo apt-get install smbclient cifs-utils
Linux 검증 클라이언트에서 실행합니다.
버전 확인
smbd --version
smbclient --version
  • 설치 미리 보기에 의도하지 않은 제거가 없다.
  • 서버와 클라이언트에 필요한 패키지만 설치했다.
  • 패키지 설치 직후 공용 공유를 추가하지 않았다.
결과 읽기

설치 후 기본 설정은 운영 요구와 다를 수 있습니다. 방화벽을 열기 전에 guest 차단·사용자·SMB 버전·경로를 명시합니다.

다음 판단

전용 그룹·공유 경로·Samba 사용자와 smb.conf를 구성합니다.

4
주의권한·연결·중단 영향을 확인할 단계

전용 그룹·인증 사용자·SMB3 공유 구성

기존 Unix 사용자에게 전용 그룹을 추가하고 Samba 비밀번호는 대화형으로 별도 설정합니다. 공유는 guest를 거부하고 유효 그룹·파일 권한·SMB3 암호화를 명시합니다.

고유 백업 접미사
date -u +%Y%m%dT%H%M%SZ
smb.conf 백업
sudo cp --preserve=all --no-clobber /etc/samba/smb.conf /etc/samba/smb.conf.<BACKUP_SUFFIX>.bak
기존 사용자 확인
id <SMB_USER>
전용 그룹 생성
sudo groupadd --system samba-share
그룹이 아직 없을 때만 실행합니다. 기존 동명 그룹의 GID와 소유자를 먼저 확인합니다.
사용자 그룹 추가
sudo usermod -aG samba-share <SMB_USER>
공유 경로 생성
sudo install -d -o root -g samba-share -m 2770 /srv/samba/team
Samba 사용자 대화형 등록
sudo smbpasswd -a <SMB_USER>
sudo smbpasswd -e <SMB_USER>
비밀번호는 프롬프트에 입력하며 Unix 로그인 비밀번호와 다른 고유 난수를 사용합니다.
Samba 설정 편집
sudoedit /etc/samba/smb.conf
구성 문법 검사
testparm --suppress-prompt -s
설정 예시 · /etc/samba/smb.conf
기존 파일에 병합할 standalone SMB3 보안 설정과 공유
[global]
   server role = standalone server
   security = user
   interfaces = lo <SAMBA_PRIVATE_IP>/<SAMBA_PRIVATE_PREFIX>
   bind interfaces only = yes
   smb ports = 445
   map to guest = Never
   restrict anonymous = 2
   server min protocol = SMB3_00
   server signing = mandatory

[team]
   path = /srv/samba/team
   browsable = yes
   read only = no
   guest ok = no
   valid users = @samba-share
   force group = samba-share
   create mask = 0660
   force create mode = 0660
   directory mask = 2770
   force directory mode = 2770
   inherit permissions = yes
   smb encrypt = required
   hosts allow = <SMB_CLIENT_CIDR>
   hosts deny = ALL
기존 [global]에 같은 키가 있으면 중복하지 말고 의도를 확인해 교체합니다. <SMB_CLIENT_CIDR>는 실제 지원되는 네트워크 표기로 바꾸고 UFW도 같은 범위를 사용합니다.
  • 공유 경로가 root:samba-share, 2770이며 world-write가 아니다.
  • Samba는 loopback과 지정한 사설 IP에만 bind하고 TCP 445만 사용한다.
  • guest ok=no, map to guest=Never, valid users가 적용된다.
  • 최소 SMB3, 암호화 required, 서명 mandatory다.
  • Samba 비밀번호를 명령 인자·Git·티켓에 남기지 않았다.
  • testparm 검사가 성공한다.
결과 읽기

Unix 파일 권한과 Samba valid users를 모두 통과해야 접근할 수 있습니다. 권한 오류를 guest 허용이나 넓은 파일 모드로 우회하지 않습니다.

다음 판단

구성 검사가 성공한 상태에서 smbd를 시작·활성화합니다.

5
변경패키지·설정·서비스 상태가 달라지는 단계

smbd 시작과 유효 구성 확인

활성 세션 영향이 없는 유지보수 시간에 smbd를 시작합니다. NetBIOS 탐색이 필요하지 않은 직접 DNS·445 환경에서는 불필요한 레거시 포트를 열지 않습니다.

변경 단계입니다. 대상 서버, 백업 파일, 서비스 중단 영향과 바로 이전 상태로 돌아가는 방법을 다시 확인하세요.
구성 최종 검사
testparm --suppress-prompt -s
NetBIOS 서비스 비활성화 유지
sudo systemctl disable nmbd.service
sudo systemctl stop nmbd.service
DNS 이름과 TCP 445만 사용하는 이 가이드의 신규 설치 분기입니다. 기존 NetBIOS 의존 환경에서는 실행하지 말고 별도 호환성 검토를 진행합니다.
서비스 활성화와 시작
sudo systemctl unmask smbd.service && testparm --suppress-prompt -s && sudo systemctl enable --now smbd.service
서비스 상태
systemctl status smbd.service --no-pager
최근 로그
sudo journalctl -u smbd.service -n 100 --no-pager
445 전용 리스닝
sudo ss -lntup | grep -E ':(137|138|139|445)[[:space:]]'
지정한 사설 IP의 TCP 445만 보여야 하며 137·138·139는 없어야 합니다.
  • smbd가 active와 enabled 상태다.
  • 로그에 설정·사용자 DB·공유 경로 권한 오류가 없다.
  • 445가 서버 사설 주소에서 리슨한다.
  • nmbd가 inactive·disabled이고 137·138·139가 리슨하지 않는다.
결과 읽기

서비스 실패는 testparm이 잡지 못하는 경로·권한·계정 문제일 수 있습니다. journalctl의 첫 오류와 namei 결과를 확인합니다.

다음 판단

클라이언트 CIDR만 열고 인증·암호화·실제 쓰기를 검증합니다.

6
주의권한·연결·중단 영향을 확인할 단계

인증·SMB3 암호화·실제 쓰기 검증

445를 정확한 클라이언트 CIDR에만 허용합니다. 클라이언트에서 비밀번호 프롬프트를 사용해 공유 목록과 파일 업로드를 검증하고 서버에서 사용자·그룹·암호화 세션을 확인합니다.

서버 445 CIDR 허용
sudo ufw allow from <SMB_CLIENT_CIDR> to <SAMBA_PRIVATE_IP> port 445 proto tcp
현재 SSH 세션·콘솔과 같은 상위 ACL 제한을 유지한 뒤 실행합니다.
클라이언트 공유 목록
smbclient -L //<SAMBA_PRIVATE_DNS> -U <SMB_USER>
비밀번호는 프롬프트에 입력합니다.
클라이언트 공유 접속
smbclient //<SAMBA_PRIVATE_DNS>/team -U <SMB_USER> -c 'ls'
승인 테스트 파일 업로드
smbclient //<SAMBA_PRIVATE_DNS>/team -U <SMB_USER> -c 'put <LOCAL_NON_SENSITIVE_TEST_FILE> <CHANGE_ID>.upload-test'
비민감 테스트 파일만 사용하고 검증 후 공유 운영 절차로 정리합니다.
서버 파일 소유권 확인
sudo stat /srv/samba/team/<CHANGE_ID>.upload-test
서버 세션 보안 확인
sudo smbstatus
방화벽
sudo ufw status numbered
  • 승인 사용자만 team 공유를 조회하고 접근한다.
  • 업로드 파일의 그룹과 모드가 samba-share와 0660이다.
  • smbstatus에서 SMB3와 암호화된 세션을 확인했다.
  • 비승인 사용자와 비승인 CIDR은 접근할 수 없다.
  • guest 또는 빈 비밀번호 접속이 거부된다.
결과 읽기

로그인은 되지만 쓰기 실패면 Samba 계정이 아니라 Unix 그룹 멤버십과 전체 경로 권한을 확인합니다. 새 그룹 멤버십은 기존 로그인 세션에 즉시 반영되지 않을 수 있습니다.

다음 판단

세션·계정 수명주기·백업·감사와 클라이언트 정책을 마감합니다.

7
주의권한·연결·중단 영향을 확인할 단계

계정 수명주기·세션·백업 운영 점검

공유 권한은 Samba 사용자 DB, valid users, Unix 그룹·파일 권한, 네트워크 CIDR이 겹쳐 결정합니다. 입사·이동·퇴사 절차에서 네 계층을 함께 회수합니다.

Samba 사용자
sudo pdbedit -L -v
전용 그룹
getent group samba-share
유효 설정
testparm --suppress-prompt -s
활성 세션·열린 파일
sudo smbstatus
인터페이스·포트 경계
sudo ss -lntup | grep -E ':(137|138|139|445)[[:space:]]'
공유 ACL과 권한
sudo namei -l /srv/samba/team
sudo getfacl -p /srv/samba/team
  • 공용·guest 계정이 없고 사용자별 계정을 사용한다.
  • 퇴사·직무 변경 시 Samba 계정, Unix 그룹, 열린 세션을 함께 회수한다.
  • SMB3 암호화와 서명을 낮추는 예외를 만들지 않는다.
  • 445는 승인 사설 CIDR에만 열려 있다.
  • 공유 데이터 백업·복원 시험, 용량 경보, 감사 로그 보존 정책이 있다.
결과 읽기

Samba 인증 성공만으로 파일 권한이 생기지 않습니다. 반대로 파일 권한이 넓어도 valid users와 네트워크 경계가 추가로 보호해야 합니다.

다음 판단

공유 데이터를 보존하면서 설정·사용자·방화벽을 되돌릴 절차를 확인합니다.

8
주의권한·연결·중단 영향을 확인할 단계

공유 설정·사용자·방화벽 롤백

사용자에게 쓰기 중단을 알리고 열린 파일을 확인합니다. 선택한 smb.conf 백업을 복원해 testparm이 성공한 뒤 reload하며 공유 데이터는 삭제하지 않습니다.

열린 파일과 세션
sudo smbstatus
백업 후보 확인
sudo find /etc/samba -maxdepth 1 -type f -name 'smb.conf.*.bak' -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sort
선택 백업 검증
sudo test -f /etc/samba/smb.conf.<BACKUP_SUFFIX>.bak
현재 실패 설정 보존
sudo cp --preserve=all --no-clobber /etc/samba/smb.conf /etc/samba/smb.conf.failed.<ROLLBACK_SUFFIX>
선택 설정 복원
sudo cp --preserve=all /etc/samba/smb.conf.<BACKUP_SUFFIX>.bak /etc/samba/smb.conf
복원 구성 검사와 reload
testparm --suppress-prompt -s && sudo smbcontrol smbd reload-config
이번 Samba 사용자 비활성화
sudo smbpasswd -d <SMB_USER>
이번 작업에서 신규 등록했고 더 이상 사용하지 않는 계정일 때만 실행합니다. Unix 계정과 데이터는 자동 삭제하지 않습니다.
이번 445 규칙 제거
sudo ufw delete allow from <SMB_CLIENT_CIDR> to <SAMBA_PRIVATE_IP> port 445 proto tcp
  • 사용자에게 알리고 열린 파일·세션을 확인했다.
  • 변경 기록과 내용으로 복원할 smb.conf 백업을 명시적으로 선택했다.
  • 현재 실패 설정도 별도로 보존했다.
  • testparm 성공 후 reload하고 기존 공유를 클라이언트에서 확인했다.
  • /srv/samba/team 데이터와 Unix 계정을 삭제하지 않았다.
결과 읽기

reload 후 기존 세션이 이전 권한을 잠시 유지할 수 있습니다. 보안 회수가 목적이면 영향 공지 후 해당 세션 종료까지 별도 확인합니다.

다음 판단

권한·포트·DNS·서비스 장애 대응 가이드로 이어갑니다.

SECURITY CHECK

운영 전 마지막 보안 점검

  • guest와 빈 비밀번호 접속을 금지하고 사용자별 Samba 계정을 사용한다.
  • SMB3 이상, 전송 암호화 required, 서명 mandatory를 유지한다.
  • loopback·지정 사설 IP와 TCP 445만 사용하고 불필요한 nmbd를 끈다.
  • valid users·Unix 그룹·파일 권한·클라이언트 CIDR을 함께 제한한다.
  • 비밀번호를 명령 인자·Git·로그에 남기지 않고 퇴사 시 즉시 회수한다.
  • 공유 데이터 백업·복원 시험, 열린 파일·용량·인증 실패 모니터링을 운영한다.

COMMON ERRORS

자주 막히는 지점

NT_STATUS_LOGON_FAILURE

증상
클라이언트가 사용자 이름을 인식하지만 인증에 실패합니다.
가능한 원인
Unix 사용자 없음, Samba 사용자 미등록·비활성화, 잘못된 도메인 표기 또는 비밀번호 문제입니다.
확인 순서
id와 pdbedit로 계정 상태를 확인하고 smbpasswd를 대화형으로 다시 설정합니다. guest로 우회하지 않습니다.

NT_STATUS_ACCESS_DENIED

증상
공유 목록은 보이지만 폴더 접근이나 파일 쓰기가 거부됩니다.
가능한 원인
valid users, samba-share 그룹, 파일시스템 소유권·ACL 중 하나가 사용자를 허용하지 않습니다.
확인 순서
testparm, id, namei, getfacl을 순서대로 비교하고 과도한 파일 권한을 부여하지 않습니다.
트러블슈팅으로 이어보기

Windows에서 공유를 찾지 못함

증상
탐색 목록에는 보이지 않거나 서버 이름 연결이 실패하지만 IP 연결은 다르게 동작합니다.
가능한 원인
DNS, 445 방화벽, 네트워크 프로필 또는 레거시 탐색 기대가 원인일 수 있습니다.
확인 순서
사설 DNS와 445 경로를 확인하고 직접 UNC 경로를 사용합니다. 레거시 프로토콜을 켜서 우회하지 않습니다.
트러블슈팅으로 이어보기

PRIMARY REFERENCES

공식 문서

설치 저장소와 지원 버전은 바뀔 수 있습니다. 검토일 이후에는 링크된 공식 문서와 현재 서버의 패키지 후보 버전을 함께 확인하세요.

도구 빠른 검색

최근 사용한 도구를 다시 열거나, 이름과 기능으로 검색하세요.

검색어와 도구의 입력·결과는 저장하지 않습니다.

↑↓ 이동 · Enter 열기 · Esc 닫기