네트워크 파일 공유: SMB

July 1, 2019

    SMB

    네트워크상에서 파일을 공유하는 방법으로 가장 널리 쓰이는 것이 SMB (Server Message Block) 이다. 윈도우 OS의 기본 공유 방식이고, macOS에서도 Mavericks 이후부터 기본으로 채택하고 있다. 리눅스에서는 Samba를 사용해서 SMB를 이용할 수 있다. 또한 Btrfs 스냅샷이 적용된 볼륨에 윈도우 OS로 SMB를 통해 접근하면 개별 파일의 예전 버전을 확인하고 복원할 수 있다.

    Samba 설치

    sudo apt update
    sudo apt install samba
    

    sudo apt update 명령으로 패키지 저장소 목록을 업데이트한 다음에 sudo apt install 명령으로 Samba를 설치한다.

    Samba (SMB) 설정

    sudo smbpasswd -a varins

    우분투 서버에 생성되어 있는 계정 중에서 원하는 계정을 Samba 사용자로 등록한다. 여기서는 예시로 varins 계정을 등록했다. varins를 자신의 계정 이름으로 변경해서 입력한다. 입력하고 나면 New SMB password: 라는 항목이 나타나는데, 여기서 생성하는 비밀번호는 SMB 네트워크로 공유 폴더에 접근할 때 입력하는 비밀번호이다. 우분투 서버의 계정 비밀번호와는 아무런 상관이 없다. 입력 후 Retype new SMB password: 항목이 나타나면 비밀번호를 한 번 더 입력한다.

    sudo mkdir /home/MySMB

    SMB로 공유할 디렉토리를 생성한다. 여기서는 앞서 스냅샷을 설정한 /home 디렉토리 밑에 MySMB 라는 이름의 디렉토리를 생성했다. 참고로 /home 디렉토리 자체의 소유자는 root이므로 /home 디렉토리 하위에 새로운 디렉토리를 생성하려면 sudo 명령어를 써서 root의 권한을 빌려와야 한다.

    sudo chown -R varins:varins /home/MySMB

    sudo 명령어로 디렉토리를 생성했으므로 /home/MySMB 디렉토리의 소유자와 소유그룹은 root로 지정된다. 이를 나의 사용자 계정인 varins로 변경해야 SMB로 파일을 쓸 수 있다. 위 명령에서 varins를 자신의 계정 이름으로 변경해서 입력한다.

    sudo find /home/MySMB -type d -exec chmod 0755 {} \;
    sudo find /home/MySMB -type f -exec chmod 0644 {} \;
    

    MySMB 디렉토리 안에 이미 파일이 존재한다면 기본적인 읽기-쓰기-실행 권한인 디렉토리 755, 파일 644를 부여한다.

    sudo iptables -A INPUT -p tcp -m tcp --dport 135 -j ACCEPT
    sudo iptables -A INPUT -p udp -m udp --dport 137 -j ACCEPT
    sudo iptables -A INPUT -p udp -m udp --dport 138 -j ACCEPT
    sudo iptables -A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
    sudo iptables -A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
    

    iptables 방화벽에서 SMB가 사용하는 포트를 연다. (기본적인 방화벽 세팅은 앞서 우분투 서버 기본 설정에서 완료했다.)

    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    

    iptables 방화벽의 설정 내용을 저장하고 리로드한다. (iptables-persistent는 앞서 우분투 서버 기본 설정에서 설치했다.)

    sudo nano /etc/samba/smb.conf

    Samba의 SMB 설정 파일 smb.conf을 nano 편집기로 열어서, 맨 마지막 부분에 아래의 설명을 참고하여 내용을 추가한다. 윈도우 OS에서는 SMB를 통해서 Btrfs 스냅샷을 인식하고 사용할 수 있으므로 이와 관련된 설정을 함께 적용한다.

    [MyData]
    comment = MyData Samba
    path = /home/MySMB
    vfs objects = shadow_copy2
    shadow:snapdir = /snapmt/@snapshot
    shadow:format = @SNAP_%Y.%m.%d_%H.%M.%S
    shadow:sort = desc
    browseable = yes
    guest ok = no
    valid users = varins
    writable = no
    read list = varins
    write list = varins
    create mask = 0644
    directory mask = 0755
    

    [MyData] → SMB 네트워크상에서 보일 이름
    comment = MyData Samba → [MyData]에 대한 간략한 설명. 임의로 작성하면 된다.
    path = /home/MySMB → 앞서 생성한 SMB로 공유할 디렉토리
    vfs objects = shadow_copy2 → 스냅샷 사용함
    shadow:snapdir = /snapmt/@snapshot → 스냅샷이 저장되는 경로
    shadow:format = @SNAP_%Y.%m.%d_%H.%M.%S → 개별 스냅샷 디렉토리 이름 형식
    shadow:sort = desc → 스냅샷을 날짜별 내림차순으로 정렬
    browseable = yes → SMB 네트워크에서 MyData 보이게 하기
    guest ok = no → 게스트 사용자 접근 차단
    valid users = varins → varins 사용자 접근 허용
    writable = no → 다른 모든 사용자 쓰기 금지
    read list = varins → varins 사용자 읽기 허용
    write list = varins → varins 사용자 쓰기 허용
    create mask = 0644 → SMB를 통해서 생성된 파일 권한 644
    directory mask = 0755 → SMB를 통해서 생성된 폴더 권한 755

    varins를 자신의 계정 이름으로 바꾸는 등, 적절히 변경해서 추가한다. 특히 스냅샷 설정 부분은 앞서  파일 복원: Btrfs 스냅샷에서 설정한 내용과 일치해야 한다. 앞서 스냅샷을 생성하는 명령에서는 디렉토리 형식이 @SNAP_`date +%Y.%m.%d_%H.%M.%S` 였지만, shadow:format = 에 입력하는 디렉토리 형식은 @SNAP_%Y.%m.%d_%H.%M.%S 이다. `가 없고 date +가 없다. 앞서 @SNAP_ 부분을 변경했다면 여기도 변경한 것으로 맞춰야 한다. %Y.%m.%d_%H.%M.%S 는 고정된 형식이기 때문에 다른 형식은 윈도우 OS가 인식하지 못한다.

    편집을 마쳤으면 Ctrl키와 x키를 동시에 눌러서 nano 편집기를 빠져나오면서 저장한다.

    sudo systemctl restart smbd

    Samba를 재실행한다.

    SMB 접속

    내부 네트워크에서

    윈도우 OS

    윈도우 10 기준으로, 파일 탐색기의 좌측 패널에서 내 PC를 클릭했을 때 상단에 나타나는 컴퓨터 메뉴의 네트워크 드라이브 연결을 클릭해서, 폴더 항목에 \\홈.서버.내부.IP주소\MyData 경로를 입력하고, 아래의 다른 자격 증명을 사용하여 연결 항목을 체크하고 접속하면 된다. 여기서 폴더 항목의 경로 중에 MyData 는 앞서 SMB 설정 파일 smb.conf에 기재한 [MyData]MyData 이다. 사용자 이름과 암호를 물어오면 앞서 Samba 사용자로 등록한 내용을 넣는다. 이렇게 접속하면 홈 서버의 /home/MySMB 디렉토리가 윈도우 OS에 네트워크 드라이브 형태로 연결된다.

    macOS

    macOS에서는 파인더에서 이동서버에 연결 (단축키 커맨드 k) 메뉴를 열고, 서버 주소 항목에 smb://홈.서버.내부.IP주소/MyData 경로를 입력해서 접속하면 된다. 여기서 MyData 는 앞서 SMB 설정 파일 smb.conf에 기재한 [MyData]MyData 이다. 사용자 정보를 물어오면 앞서 Samba 사용자로 등록한 내용을 넣는다. 이렇게 접속하면 홈 서버의 /home/MySMB 디렉토리가 macOS에 드라이브 형태로 마운트 된다.

    그 밖의 기기

    SMB 클라이언트 프로그램마다 사용하는 용어나 항목 구성은 다르지만 기재하는 내용은 같다. 호스트 정보에 홈 서버의 내부 IP 주소를 넣고, 경로에 /MyData, 사용자 정보에 Samba 사용자로 등록한 내용을 넣어서 접속하면 된다.

    외부 네트워크에서

    우리나라 인터넷 회선 공급 회사 (ISP) 들은 대부분 SMB가 사용하는 포트를 막아두었기 때문에 집 밖의 외부 네트워크에서는 집 안의 SMB에 접속할 수 없다. 포트를 바꿔서 접속하려 해도 윈도우 OS나 macOS에서는 SMB 접속 포트를 변경할 수 없기 때문에 까다로운 포트 우회 방법을 찾아야 한다. 그렇게 어렵게 접속하는 방법보다는, 홈 서버에 VPN (Virtual Private Network)을 구성해서 외부에서 집 안의 내부 네트워크에 접속한 다음에 SMB를 바로 사용하는 것이 간단하다. VPN을 구성하는 방법은 다른 글 VPN: IKEv2에서 다룬다.

    스냅샷 복원

    윈도우 OS에서 Btrfs 스냅샷이 적용된 볼륨에 SMB로 접근하면 개별 파일의 스냅샷을 쉽게 확인하고 복원할 수 있다.

    스냅샷이 적용된 파일을 오른쪽 클릭하고 속성이전 버전 탭을 열면 개별 파일의 스냅샷 목록이 나타난다.

    원하는 스냅샷을 선택하고 아래의 열기를 클릭하면 스냅샷으로 저장된 이전 파일 내용을 즉시 확인할 수 있고, 복원을 클릭하면 선택한 스냅샷으로 파일이 복원된다. 다만, 윈도우 OS는 파일명으로만 스냅샷을 찾기 때문에 파일명을 변경했다면 변경하기 이전의 스냅샷은 불러오지 못한다. 하지만 반대로, 심지어 파일이 삭제되고 없다고 하더라도 파일명만 정확히 알고 있으면, 그 파일이 있었던 폴더에 똑같은 파일명의 내용 없는 파일을 만들어 넣기만 하면 예전 스냅샷을 즉시 확인할 수 있고 바로 복원할 수 있다. 만일 파일명을 변경했는데 이전 파일명을 모르는 경우라면 앞선 글 파일 복원: Btrfs 스냅샷에서 살펴본 우분투 서버상에서 개별 파일을 복원하는 방법을 사용하거나 /home 디렉토리 전체 복원 방법을 사용한다.

     

    본 글의 저작권은 작성자 Varins에게 있습니다.
    Varins의 사전 서면 동의 없이는 본 글의 전부 또는 일부를 무단으로 전재, 게시, 배포하는 것을 금지합니다.
    

Leave a comment

댓글은 관리자의 승인 이후에 게시됩니다.