La foret rouge
Published on

SAMBA 서버 구성, 클라이언트 연결 실습

Authors
  • avatar
    Name
    신주용

이전 글에서 NFS 서버-클라이언트 실습을 해봤습니다. NFS도 유용한 파일 공유 프로토콜이긴 하지만 기본적으로는 Unix-like 시스템을 위한 프로토콜입니다. 그래서 이번에는

SAMBA란?

Samba는 SMB 프로토콜을 다시 구현한 소프트웨어로 다양한 Windows 클라이언트에서 파일이나 프린터를 공유할 수 있도록 해줍니다. 그리고 윈도우 뿐만 아니라 리눅스, AIX, macOS 같은 Unix-like 시스템에서도 동작하는 소프트웨어입니다1.

작동 방식

SMB 서버-클라이언트 동작 방식은 NFS와 유사하게 서버의 파일, 디렉토리를 클라이언트 로컬 파일 시스템인 것처럼 사용할 수 있습니다. 하지만 기본적으로 NFS는 파일과 디렉토리 공유만 지원하는 반면 SMB는 파일, 프린터, 스토리지 등 다양한 리소스를 공유할 수 있습니다2.

Rocky Linux에 SAMBA 서버 설치

그럼 지금부터는 설치 실습을 해보겠습니다. 실습 환경은 일반적으로 서버는 리눅스로 많이 운영되기 때문에 서버 역할을 할 Rocky Linux VM과 클라이언트 역할의 Windows VM을 준비했습니다3.

  1. samba 패키지를 설치합니다.

    $ dnf install samba
    
  2. Samba 서비스를 위한 계정을 따로 만들어서 사용하겠습니다.

    $ useradd sambauser
    $ passwd sambauser
    Changing password for user sambauser.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    
  3. 공유할 디렉토리를 생성하고 필요한 권한을 줍니다.

    $ mkdir -p /home/sambauser/samba
    $ chmod 777 /home/sambauser/samba
    $ chown sambauser:sambauser /home/sambauser/samba
    
    Create shared directory
  4. Samba 서비스 기본 설정을 해줍니다. /etc/samba/smb.conf 파일 제일 아래에 다음 내용을 추가해줍니다.

    /etc/samba/smb.conf
    [Shared]
        comment = Samba shared directory
        path = /home/sambauser/samba
        read only = no
        writable = yes
        valid users = sambauser
        browseable = yes
    
    Samba configuration
  5. 이전에 생성한 sambauser를 Samba 서비스에 등록해줍니다.

    $ smbpasswd -a sambauser
    New SMB password:
    Retype new SMB password:
    Added user sambauser.
    
    • 이 비밀번호는 2단계 계정 생성때 비밀번호와 달라도 됩니다.
    • 이후 Windows 클라이언트에서 연결 시 이 비밀번호를 사용하니 기억해둬야 합니다.
  6. Samba 서비스를 시작합니다.

    $ systemctl start smb nmb
    $ systemctl enable smb nmb
    
    Start Samba server
  7. 잊지 않고 방화벽도 열어줍니다.

    $ firewall-cmd --add-service=samba --permanent
    $ firewall-cmd --reload
    $ firewall-cmd --list-all
        public (active)
        # ...
        services: samba ssh ...
        # ...
    
  8. 연결이 잘 됐는지 확인하기 위해 더미 파일과 디렉토리를 생성해봅시다.

    $ cd /home/sambauser/samba
    $ touch test1
    $ mkdir test2
    $ ls
    test1  test2
    

Samba 서버에 연결

로컬에서 마운트

클라이언트 역할을 할 Windows VM에서 연결해보기 전 우선 로컬에서 마운트를 해보겠습니다. 다시 말해 Linux도 클라이언트로 사용할 수 있습니다.

  1. 먼저 클라이언트로 사용하기 위해 필요한 cifs-utils 패키지를 설치합니다.

    $ dnf install cifs-utils
    
  2. 마운트 할 디렉토리를 생성하고 마운트 합니다. 파일, 디렉토리 생성/삭제도 해봅니다.

    $ mkdir -p /mnt/samba-local
    $ mount -t cifs //localhost/Shared /mnt/samba-local -o user=sambauser
    Password for sambauser@//localhost/Shared:
    $ cd /mnt/samba-local
    $ ls
    
    • 로컬에서 연결하는 것이므로 localhost를 사용했고, Sharedsmb.conf 파일에서 구분자로 사용했던 것입니다.
    Create/remove file and directory

만약 여기서 ls: reading directory '.': Permission denied와 같은 오류가 발생한다면 SELinux 설정을 수정해봅시다4.
/etc/sysconfig/selinux 파일에서 SELINUX=permissive로 변경하고 재부팅해주세요.

원격지에서 마운트

그러면 이제 원격지(Windows VM)에서 마운트 해봅시다.

  1. Windows에서는 탐색기에서 '내 PC' 또는 '네트워크'를 우클릭하고 '네트워크 드라이브 연결'을 클릭합니다.

    Windows mount
  2. 여기서는 다른 VM이기 때문에 localhost 대신 \\서버IP주소\Shared 경로를 사용하여 연결합니다.

    Windows mount
  3. smbpasswd로 등록해줬던 사용자/비밀번호를 입력해주면 연결이 완료됩니다.

    Windows mount Windows mount
  4. 여기서도 파일 생성/삭제를 해보고 리눅스 서버에서도 잘 되는지 확인해봅니다.

    Windows mount Windows mount

이렇게 Samba 서버-클라이언트 구성 및 연결 실습을 해봤습니다. 유용하게 잘 사용하시길 바라겠습니다.

참고: 이 글에서 언급되었으나 깊게 설명하지 않은 내용입니다.

  • SMB/CIFS

Footnotes

  1. Wikipedia. "Samba (software)." Wikipedia. https://en.wikipedia.org/wiki/Samba_(software) (accessed Nov. 13, 2024).

  2. AWS. "NFS와 SMB의 차이점은 무엇인가요?" aws.amazon.com. https://aws.amazon.com/ko/compare/the-difference-between-nfs-smb/ (accessed Nov. 13, 2024).

  3. Rocky Linux. "Lab 8: Samba." Rocky Linux Documentation. https://docs.rockylinux.org/labs/networking/lab8-samba/ (accessed Nov. 13, 2024).

  4. rlawlstjd007. "[Linux] SMB 사용시 "ls: reading directory .: Permission denied" 에러 발생 해결법." 진성 소프트:티스토리. https://jinseongsoft.tistory.com/287 (accessed Nov. 13, 2024).