홈서버용 삼바 설정은 알고보면 매우 간단한데, 제게는 진입 장벽이 좀 있었습니다.

설정 파일 수정으로 끝나는 것이 아니라 명령어를 통해 삼바 서버에 접속할 수 있는 사용자를 별도로 등록해주어야 하는데, 설정파일만 건드리면서 왜 접속이 안되는지 고민하느라 시간을 많이 허비했네요.



1. 설치

Debian Stretch에서 Samba Server를 운용하기 위해서 필요한 패키지는 samba 딱 하나 뿐입니다. 클라이언트 모드 즉, 다른 Samba Server에 접속하고자 한다면 samba-client도 필요합니다만, 본 글에서는 서버 모드만 다룹니다.

1
$ sudo apt-get install samba
cs



2. 삼바 사용자 추가

1
2
3
4
$ sudo smbpasswd -a 계정명
 
New SMB password:
Retype new SMB password:
cs

여기서 -a는 해당 사용자에게 samba 접속 권한을 추가한다는 의미이며, 사용자 추가와 동시에 samba 접속 전용 암호를 설정하는 것입니다. 참고로 이 때 사용된 계정은 실제 debian server에 존재하는 사용자라야 합니다.

아래 처럼 해당 사용자가 비밀번호를 직접 바꿀 수도 있습니다.

1
2
3
$ smbpasswd
Old SMB password:
New SMB password:
cs

이 과정을 빼먹어서 저는 시간을 많이 허비했습니다. 그래서 서버 설정도 시작하기 전, 사용자 먼저 추가합니다. 다시는 똑같은 실수 다시 하지 말자구요...



3. 삼바 서버 기본 설정

설정파일 위치는 /etc/samba/smb.conf 이며, 주석이 매우 상세하게 잘 되어 있어서 메뉴얼이 필요 없을 정도입니다. 그러나, 영어로 되어 있는 것이 문제이지요. ^^


3.1 우선 들어다 볼 것은 [Global] 섹션

1
2
3
[Global]
workgroup = WORKGROUP
min protocol = SMB2
cs

여기서 WORKGROUP을 실제 사용하는 work group으로 변경합니다. work group이 뭐야? 싶으시면 분명히 WORKGROUP 입니다. 윈도우 명령 프롬프트에서 net config workstation 명령어로 확인할 수 있다고 하네요.

min protocol = SMB2는 삼바1 버전은 사용하지 않겠다는 것입니다. 최근 보안 문제로 윈도우도 삼바1 프로토콜을 금지했지요. 웹에는 되살리는 법이 팁이라고 넘쳐나고 있습니다만... 나쁘다는 것.. 저도 사용하지 않기로 합니다. 

Global 탭에서 나머지는 손 댈 것이 없습니다.


3.2 사용자 홈디렉토리 접근 [homes] 섹션

사용자 home 폴더에 대한 설정입니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[homes]
   comment = Home Directories
# comment는 옵션이고 중요하지는 않습니다. 
# 윈도우즈의 탐색기에서 볼 때 설명란에 나타나는 문구입니다.
 
   browseable = no
# browseable을 yes로 변경할 경우 network list에 드러납니다. 
# 즉, 접속권한이 없는 다른 사용자에게도 보인다는 것이지요.
# 정작 해당 디렉토리에 권한이 없기 때문에 들어올 수는 없습니다만, 귀찮지요.
# 여러모로 no가 좋습니다.
 
   read only = no
# 기본적으로 "읽기전용"으로 설정되어 있는데, no로 변경하면 쓰기도 허용합니다.
 
   create mask = 0700
# 파일 생성 시 기본 퍼미션은 0700입니다. 파일 소유자만 완전한 접근이 가능합니다.
 
   directory mask = 0700
# 새로 만드는 디렉토리 기본 퍼미션도 0700이구요.
 
   valid users = %S
# 기본적으로 \\server\username 디렉토리는 삼바 권한이 있는 모든 사람에게
# 열려있습니다. 소유자만 홈 디렉토리에 접근하도록 위와 같이 설정을 변경합니다.
# 만약 다른 외부 인증방법을 쓴다면 %s 가 아니라고 하네요.. 저는 관심이 없어요.
cs

사용자 입장에서 위 내용을 싹 정리하면 남들 눈에는 안보이고, 본인만 접속 가능하면서, 읽기/쓰기 모두 가능하고, 파일/디렉토리 생성 시 0700 퍼미션으로 만들어지는 공유 디렉토리가 됩니다.

학교나 사내 워크스테이션에서는 기본 설정이 더 적합하겠으나, 저는 공유 디렉토리는 따로 공용 공간에 만들고, 개인 디렉토리는 보호해주는 정책이 더 적합하다고 생각합니다. 물론... 관리자인 저는 다 보고있지요. ㅎㅎ

 

3.3 공용 공유 디렉토리 만들기

짧고 간결하게 정리하면, 디렉토리 당 섹션을 하나씩 더 만들면 됩니다.

예를들어, 동영상 파일을 모아두는 video 디렉토리를 videow 그룹의 유저에게만 허용할 경우는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[video]
    comment = movies folder
# comment는 필수는 아닙니다.
 
    path = /mnt/video
# 공유할 디렉토리 위치
 
    valid users = +videow
# 접근을 허용할 사용자 또는 그룹 설정합니다.
# 단일 사용자는 계정명을 그냥 적어주고, 그룹의 경우 +를 붙여서 적습니다.
# 그룹명 앞에 $을 붙이면 NIS 넷그룹이고, @은 NIS 검색 후 UNIX 그룹을 검색하라는
# 의미라고 합니다만.. 저는 무슨 뜻인지 모릅니다.
 
    force group = videow
# 새 디렉토리/파일을 만들 때 지정한 그룹의 소유권을 부여합니다.
 
    create mask = 0660
    directory mask = 0770
# 새로 만든 디렉토리/파일에 대한 권합입니다.
# 그룹에 대한 공유 디렉토리이므로, 그룹 권한에 6 또는 7을 주는 것이 맞겠지요.
# 다만 실행파일(윈도우용 포함)을 넣어야 할 경우엔 x 퍼미션도 추가해야 합니다.
# 즉, create mask = 0770이 되어야 실행 파일을 실행할 수 있습니다.
 
    writable = yes
# homes 섹션에서 사용한 read only와 정확히 반대 역할입니다.
# read only = no로 써도 됩니다.
cs



4. 삼바 서비스 재시작

1
$ sudo systemctl restart smbd.service
cs



5. 방화벽 예외 설정

혹시나 방화벽을 사용 중이라면 아래 포트를 예외 처리해주어야 합니다.

1
2
3
4
$ sudo ufw allow 139/tcp
$ sudo ufw allow 445/tcp
$ sudo ufw allow 137/udp
$ sudo ufw allow 138/udp
cs