DEV/ETC
Samba
SBP
2025. 5. 15. 08:42
Linux Samba 정보
Samba(삼바)는 Linux 및 Unix 계열 운영체제에서 Microsoft Windows 운영체제와 파일, 프린터 공유 및 기타 서비스들을 공유할 수 있도록 하는 소프트웨어 스위트입니다. Windows에서 사용하는 표준 파일 및 프린터 공유 프로토콜인 SMB/CIFS 프로토콜을 구현하여 Windows 환경과의 상호 운용성을 제공합니다.
Samba를 통해 Linux 서버를 Windows 클라이언트들이 접근할 수 있는 파일 서버나 프린터 서버로 만들거나, 반대로 Linux 시스템에서 Windows 공유 폴더나 프린터에 접근할 수 있습니다.
Samba의 주요 구성 요소 (데몬)
Samba는 주로 다음과 같은 데몬(백그라운드 프로세스)으로 구성됩니다.
-
smbd:
SMB/CIFS 프로토콜을 사용하여 파일 및 프린트 서비스를 제공하는 핵심 데몬입니다. 클라이언트의 파일 및 프린터 접근 요청을 처리합니다. -
nmbd:
NetBIOS 이름 서비스를 처리하는 데몬입니다. 네트워크 상에서 컴퓨터 이름(NetBIOS 이름)을 IP 주소로 변환하고, Windows 네트워크 환경에서 서버 목록을 브라우징하는 등의 기능을 담당합니다. -
winbindd:
Windows 도메인 컨트롤러(Active Directory 포함)와 연동하여 사용자 및 그룹 정보를 가져오고 인증을 처리하는 데몬입니다. Linux 시스템을 Windows 도메인의 멤버 서버로 구성할 때 사용됩니다.
Samba의 주요 기능 및 역할
- 파일 서버: Linux 시스템의 디렉토리를 Windows 네트워크에 공유하여 여러 사용자가 접근할 수 있도록 합니다.
- 프린터 서버: Linux 시스템에 연결된 프린터를 Windows 네트워크에 공유하여 Windows 클라이언트들이 사용할 수 있도록 합니다.
- 도메인 멤버 서버: Windows Active Directory 도메인에 가입하여 중앙 집중식 인증 및 권한 관리를 따릅니다.
- 도메인 컨트롤러: Samba 자체를 Active Directory 도메인 컨트롤러로 구축할 수도 있습니다 (복잡한 설정 필요).
- 클라이언트 기능: Linux 시스템에서 Windows 공유 폴더 및 프린터에 접근하는 기능을 제공합니다.
Linux에 Samba 설치 및 기본 파일 서버 설정
가장 일반적인 사용 사례인 Linux를 파일 서버로 설정하는 기본적인 방법을 설명합니다.
-
Samba 패키지 설치:
Linux 배포판의 패키지 관리자를 사용하여 Samba 관련 패키지를 설치합니다.# Debian/Ubuntu 계열 sudo apt update sudo apt install samba samba-client samba-common # RHEL/CentOS/AlmaLinux/Rocky Linux 계열 sudo yum install samba samba-client samba-common # 또는 dnf 사용 시 # sudo dnf install samba samba-client samba-common
-
Samba 설정 파일 (
/etc/samba/smb.conf
) 편집:
Samba의 주 설정 파일인smb.conf
를 편집하여 공유 설정을 구성합니다. 기존 파일의 백업을 권장합니다.sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak sudo nano /etc/samba/smb.conf # 또는 vi 등 다른 에디터 사용
설정 파일 예시:[global] workgroup = WORKGROUP # Windows 작업 그룹 이름 (또는 도메인 이름) server string = Samba Server %v # 서버 설명 (%v는 Samba 버전으로 대체) netbios name = MyLinuxServer # NetBIOS 이름 (Windows에서 보일 이름) security = user # 인증 방식 (user, domain, ads 등) map to guest = bad user # 잘못된 사용자 이름으로 접속 시 guest로 처리 (Optional) dns proxy = no # 로깅 설정 (Optional) log file = /var/log/samba/log.%m max log size = 1000 # 네트워킹 설정 (Optional) interfaces = lo eth0 192.168.1.0/24 # Samba가 바인딩될 네트워크 인터페이스 hosts allow = 127.0.0.1 192.168.1.0/24 # 접근 허용할 IP 주소 또는 대역 [PublicShare] # 공유 이름 (Windows에서 보일 이름) comment = Public Share Directory # 공유 설명 path = /samba/public # 실제 공유할 Linux 서버의 경로 read only = no # 읽기 전용 여부 (yes 또는 no) writable = yes # 쓰기 가능 여부 (yes 또는 no, read only = no와 함께 사용) guest ok = yes # 인증 없이 Guest 접근 허용 (yes 또는 no) force user = nobody # Guest 접근 시 강제로 적용될 Linux 사용자 (guest ok = yes 시 사용) force group = nogroup # Guest 접근 시 강제로 적용될 Linux 그룹 [PrivateShare] # 다른 공유 이름 comment = Private User Shares path = /samba/private read only = no writable = yes guest ok = no # Guest 접근 불허 valid users = user1 user2 @samba_users # 접근 허용할 사용자 또는 그룹 (@그룹명) create mask = 0664 # 생성되는 파일의 권한 마스크 directory mask = 0775 # 생성되는 디렉토리의 권한 마스크 force create mode = 0660 # 생성되는 파일에 강제로 적용할 권한 force directory mode = 0770 # 생성되는 디렉토리에 강제로 적용할 권한
-
공유할 디렉토리 생성 및 권한 설정:
smb.conf
에서 설정한path
에 해당하는 디렉토리를 Linux 서버에 생성하고 Samba 사용자가 접근할 수 있도록 적절한 Linux 파일 시스템 권한을 설정합니다.sudo mkdir -p /samba/public /samba/private sudo chmod 777 /samba/public # Public 공유는 Everyone 접근 가능하도록 설정 예시 sudo chmod 770 /samba/private sudo chown nobody:nogroup /samba/public # force user/group 설정 시 소유권 변경 필요 sudo chown root:samba_users /samba/private # 특정 그룹만 접근 시 소유권 변경 예시 # 필요한 경우 SELinux 보안 컨텍스트 설정
-
Samba 사용자 생성:
security = user
모드를 사용하는 경우, Linux 시스템에 있는 사용자 계정에 대해 Samba 접속 시 사용할 비밀번호를 별도로 설정해야 합니다.
*(sudo smbpasswd -a user1 # user1은 이미 존재하는 Linux 계정이어야 함 # 비밀번호 입력 sudo smbpasswd -e user1 # 계정 활성화 (필요 시)
smbpasswd -x user1
은 계정 삭제,smbpasswd -d user1
은 계정 비활성화)* -
Samba 설정 구문 검사:
설정 파일 편집 후 구문 오류가 없는지 확인합니다.testparm
-
Samba 데몬 시작 및 자동 실행 설정:
smbd
와nmbd
데몬을 시작하고 시스템 부팅 시 자동 실행되도록 설정합니다.
*(sudo systemctl enable smbd nmbd sudo systemctl start smbd nmbd # 상태 확인 sudo systemctl status smbd nmbd
systemctl
명령어는 systemd를 사용하는 최신 배포판 기준입니다. SysVinit 등에서는 다른 명령어를 사용합니다.)* -
방화벽 설정:
Samba 서비스에 필요한 포트(주로 137/udp, 138/udp, 139/tcp, 445/tcp)가 방화벽에서 허용되어 있는지 확인합니다.# firewalld 사용 시 예시 (RHEL/CentOS/AlmaLinux/Rocky Linux) sudo firewall-cmd --permanent --add-service=samba sudo firewall-cmd --reload # UFW 사용 시 예시 (Ubuntu/Debian) sudo ufw allow samba sudo ufw reload
Linux에서 Windows 공유에 접근 (Samba 클라이언트)
Samba 클라이언트 기능을 사용하여 Linux 시스템에서 Windows 공유 폴더에 접근할 수 있습니다.
-
smbclient 사용:
Windows의smbclient
명령어와 유사한 기능을 제공하는 명령줄 유틸리티입니다. 공유 내용을 확인하거나 파일 전송 등에 사용할 수 있습니다.smbclient //windows_server_ip/share_name -U domain_name\\username # 또는 Workgroup 환경 시 smbclient //windows_server_ip/share_name -U username%password # 비밀번호를 바로 넣을 수 있지만 보안상 권장되지 않음 # 접속 후 ls, get, put 등 사용
-
mount 명령어로 마운트:
Windows 공유 폴더를 Linux 파일 시스템에 영구적으로 마운트하여 일반 디렉토리처럼 사용할 수 있습니다.sudo mkdir /mnt/winshare sudo mount -t cifs //windows_server_ip/share_name /mnt/winshare -o vers=3.0,username=your_windows_username,password=your_windows_password,domain=your_windows_domain # 필요 시 /etc/fstab 파일에 등록하여 부팅 시 자동 마운트
Samba는 Linux와 Windows 환경 간의 데이터 공유 및 상호 운용성을 가능하게 하는 강력한 도구입니다. 설정 옵션이 매우 다양하므로 특정 환경에 맞게 구성하려면 Samba 공식 문서나 상세 가이드를 참고하는 것이 좋습니다.