sudo 권한, 유지 중인 SSH 세션과 서버 콘솔 복구 경로
FILE SHARING · 설치·설정 레시피
Samba 인증 파일 공유와 SMB3 보안 구성
Ubuntu Samba 파일 서버에 전용 그룹·공유 경로·사용자 인증을 구성하고 guest 접속을 차단합니다. SMB3 암호화·서명·유효 사용자·클라이언트 CIDR을 제한한 뒤 Linux 또는 Windows 클라이언트에서 실제 목록과 쓰기를 검증합니다.BEFORE YOU START
시작 전에 준비하세요
사설 DNS·서버 사설 IP·정확한 SMB 클라이언트 CIDR
공유에 사용할 기존 Unix 사용자와 전용 그룹·데이터 백업·복원 시험
SMB3 암호화와 서명을 지원하는 승인된 클라이언트 목록
권장 대상 Windows와 Linux 사용자에게 인증된 팀 파일 공유를 제공하고 권한·암호화·복구를 운영하려는 관리자
FOLLOW THE RECIPE
8단계 구성·점검 레시피
서버 역할과 클라이언트 호환성 확인
이 가이드는 Active Directory 도메인 컨트롤러가 아닌 standalone 파일 서버 기준입니다. authd·AD를 사용한다면 사용자·그룹 매핑 절차를 별도로 적용합니다.
cat /etc/os-releasehostnamectl
ip -brief addressdpkg -l samba smbclient cifs-utilsid <SMB_USER>
getent group samba-share- standalone server와 AD member server 중 목표 역할을 확정했다.
- 모든 승인 클라이언트가 SMB3 암호화와 서명을 지원한다.
- 공유 사용자와 퇴사·권한회수 책임자가 정해져 있다.
AD 또는 authd 환경에서 로컬 smbpasswd 사용자를 병행하면 ID 매핑 충돌이 생길 수 있습니다. 이 경우 도메인 멤버 가이드를 사용합니다.
기존 공유·포트·데이터 경로와 접속자를 점검합니다.
기존 공유·세션·포트·데이터 점검
기존 smb.conf, 활성 세션, 445 포트와 공유 데이터를 확인합니다. 활성 사용자가 있으면 즉시 재시작하지 않고 유지보수 시간을 합의합니다.
systemctl status smbd.service --no-pagersudo ss -ltnp | grep ':445 'testparm --suppress-prompt -ssudo smbstatussudo namei -l /srv/samba/team
df -hT /srv/samba/team- 기존 공유와 활성 사용자의 소유 팀을 확인했다.
- 공유 데이터의 백업과 별도 호스트 복원 시험이 있다.
- 445를 다른 서비스가 사용하지 않는다.
- 현재 smb.conf가 있다면 원본과 유효 설정 출력을 보관했다.
smbstatus에 열린 파일이 있으면 서비스 재시작이나 공유 변경이 작업 손실을 일으킬 수 있습니다. 사용자에게 알리고 세션 정리 시간을 확보합니다.
Ubuntu 지원 패키지를 변경 목록 확인 후 설치합니다.
Samba 서버와 검증 클라이언트 설치
Ubuntu 보안 저장소의 samba, smbclient, cifs-utils를 설치합니다. 서버와 검증 클라이언트 패키지를 구분해 필요한 호스트에만 설치합니다.
sudo apt-get updateapt-get --simulate install samba smbclientsudo systemctl mask smbd.service nmbd.serviceprecheck에서 기존 Samba 서비스와 공유가 없음을 확인한 신규 설치 분기에서만 실행합니다. 기존 운영 서비스에서는 설치·마스크 절차를 중단합니다.sudo apt-get install samba smbclientsystemctl is-enabled smbd.service nmbd.service
sudo ss -lntup | grep -E ':(137|138|139|445)[[:space:]]'masked가 기대 결과이며 포트 출력이 없어야 합니다.apt-get --simulate install smbclient cifs-utilssudo apt-get install smbclient cifs-utilsLinux 검증 클라이언트에서 실행합니다.smbd --version
smbclient --version- 설치 미리 보기에 의도하지 않은 제거가 없다.
- 서버와 클라이언트에 필요한 패키지만 설치했다.
- 패키지 설치 직후 공용 공유를 추가하지 않았다.
설치 후 기본 설정은 운영 요구와 다를 수 있습니다. 방화벽을 열기 전에 guest 차단·사용자·SMB 버전·경로를 명시합니다.
전용 그룹·공유 경로·Samba 사용자와 smb.conf를 구성합니다.
전용 그룹·인증 사용자·SMB3 공유 구성
기존 Unix 사용자에게 전용 그룹을 추가하고 Samba 비밀번호는 대화형으로 별도 설정합니다. 공유는 guest를 거부하고 유효 그룹·파일 권한·SMB3 암호화를 명시합니다.
date -u +%Y%m%dT%H%M%SZsudo cp --preserve=all --no-clobber /etc/samba/smb.conf /etc/samba/smb.conf.<BACKUP_SUFFIX>.bakid <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/teamsudo smbpasswd -a <SMB_USER>
sudo smbpasswd -e <SMB_USER>비밀번호는 프롬프트에 입력하며 Unix 로그인 비밀번호와 다른 고유 난수를 사용합니다.sudoedit /etc/samba/smb.conftestparm --suppress-prompt -s[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를 시작·활성화합니다.
smbd 시작과 유효 구성 확인
활성 세션 영향이 없는 유지보수 시간에 smbd를 시작합니다. NetBIOS 탐색이 필요하지 않은 직접 DNS·445 환경에서는 불필요한 레거시 포트를 열지 않습니다.
testparm --suppress-prompt -ssudo systemctl disable nmbd.service
sudo systemctl stop nmbd.serviceDNS 이름과 TCP 445만 사용하는 이 가이드의 신규 설치 분기입니다. 기존 NetBIOS 의존 환경에서는 실행하지 말고 별도 호환성 검토를 진행합니다.sudo systemctl unmask smbd.service && testparm --suppress-prompt -s && sudo systemctl enable --now smbd.servicesystemctl status smbd.service --no-pagersudo journalctl -u smbd.service -n 100 --no-pagersudo 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만 열고 인증·암호화·실제 쓰기를 검증합니다.
인증·SMB3 암호화·실제 쓰기 검증
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-testsudo smbstatussudo ufw status numbered- 승인 사용자만 team 공유를 조회하고 접근한다.
- 업로드 파일의 그룹과 모드가 samba-share와 0660이다.
- smbstatus에서 SMB3와 암호화된 세션을 확인했다.
- 비승인 사용자와 비승인 CIDR은 접근할 수 없다.
- guest 또는 빈 비밀번호 접속이 거부된다.
로그인은 되지만 쓰기 실패면 Samba 계정이 아니라 Unix 그룹 멤버십과 전체 경로 권한을 확인합니다. 새 그룹 멤버십은 기존 로그인 세션에 즉시 반영되지 않을 수 있습니다.
세션·계정 수명주기·백업·감사와 클라이언트 정책을 마감합니다.
계정 수명주기·세션·백업 운영 점검
공유 권한은 Samba 사용자 DB, valid users, Unix 그룹·파일 권한, 네트워크 CIDR이 겹쳐 결정합니다. 입사·이동·퇴사 절차에서 네 계층을 함께 회수합니다.
sudo pdbedit -L -vgetent group samba-sharetestparm --suppress-prompt -ssudo smbstatussudo ss -lntup | grep -E ':(137|138|139|445)[[:space:]]'sudo namei -l /srv/samba/team
sudo getfacl -p /srv/samba/team- 공용·guest 계정이 없고 사용자별 계정을 사용한다.
- 퇴사·직무 변경 시 Samba 계정, Unix 그룹, 열린 세션을 함께 회수한다.
- SMB3 암호화와 서명을 낮추는 예외를 만들지 않는다.
- 445는 승인 사설 CIDR에만 열려 있다.
- 공유 데이터 백업·복원 시험, 용량 경보, 감사 로그 보존 정책이 있다.
Samba 인증 성공만으로 파일 권한이 생기지 않습니다. 반대로 파일 권한이 넓어도 valid users와 네트워크 경계가 추가로 보호해야 합니다.
공유 데이터를 보존하면서 설정·사용자·방화벽을 되돌릴 절차를 확인합니다.
공유 설정·사용자·방화벽 롤백
사용자에게 쓰기 중단을 알리고 열린 파일을 확인합니다. 선택한 smb.conf 백업을 복원해 testparm이 성공한 뒤 reload하며 공유 데이터는 삭제하지 않습니다.
sudo smbstatussudo find /etc/samba -maxdepth 1 -type f -name 'smb.conf.*.bak' -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sortsudo test -f /etc/samba/smb.conf.<BACKUP_SUFFIX>.baksudo 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.conftestparm --suppress-prompt -s && sudo smbcontrol smbd reload-configsudo smbpasswd -d <SMB_USER>이번 작업에서 신규 등록했고 더 이상 사용하지 않는 계정일 때만 실행합니다. Unix 계정과 데이터는 자동 삭제하지 않습니다.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
공식 문서
설치 저장소와 지원 버전은 바뀔 수 있습니다. 검토일 이후에는 링크된 공식 문서와 현재 서버의 패키지 후보 버전을 함께 확인하세요.