DEV/ETC

Samba

SBP 2025. 5. 15. 08:42
Linux Samba 정보

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를 파일 서버로 설정하는 기본적인 방법을 설명합니다.

  1. 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
  2. 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 # 생성되는 디렉토리에 강제로 적용할 권한
  3. 공유할 디렉토리 생성 및 권한 설정:
    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 보안 컨텍스트 설정
  4. Samba 사용자 생성:
    security = user 모드를 사용하는 경우, Linux 시스템에 있는 사용자 계정에 대해 Samba 접속 시 사용할 비밀번호를 별도로 설정해야 합니다.
    sudo smbpasswd -a user1 # user1은 이미 존재하는 Linux 계정이어야 함
    # 비밀번호 입력
    sudo smbpasswd -e user1 # 계정 활성화 (필요 시)
    *(smbpasswd -x user1은 계정 삭제, smbpasswd -d user1은 계정 비활성화)*
  5. Samba 설정 구문 검사:
    설정 파일 편집 후 구문 오류가 없는지 확인합니다.
    testparm
  6. Samba 데몬 시작 및 자동 실행 설정:
    smbdnmbd 데몬을 시작하고 시스템 부팅 시 자동 실행되도록 설정합니다.
    sudo systemctl enable smbd nmbd
    sudo systemctl start smbd nmbd
    # 상태 확인
    sudo systemctl status smbd nmbd
    *(systemctl 명령어는 systemd를 사용하는 최신 배포판 기준입니다. SysVinit 등에서는 다른 명령어를 사용합니다.)*
  7. 방화벽 설정:
    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 공식 문서나 상세 가이드를 참고하는 것이 좋습니다.