앞서 초급 섹션에서 기본적인 samba 서버 설치/설정 및 구동에 대해서 알아보았으며,
이제는 세부적인 설정을 통해 samba 서버를 좀 더 고급지게(?) 사용하는 방법에 대해 알아보겠습니다.
먼저 samba 설정파일인 smb.conf를 열어봅니다.
$ sudo vi /etc/samba/smb.conf
※ vi 에디터에 익숙치 않은 사용자라면, pluma 에디터를 추천합니다.
$ sudo pluma /etc/samba/smb.conf
※ 설정 내용에서 샾(#) 또는 세미콜론(;)으로 시작하는 문장은 "주석" 문장입니다.
서비스 구동 시 OS에서 해당 문장은 해석하지 않고 넘어 가기에, 메모나 설명 등을 정리하는 용도로 많이 사용됩니다.
samba는 크게 3개의 파트로 구성되어 있습니다. (대괄호로 묶여 있는 부분을 유심히 살펴보면 됩니다.)
+ [global] : 전반적인 samba 설정을 다룹니다. (접속 권한, 인증 방법, 로그 설정 등)
+ [homes] : 사용자 계정의 기본 공유 디렉터리 입니다. (접속 유저별 자신의 공유 공간)
+ [public] : 관리자가 별도로 정의해서 사용하는 공유 디렉터리 입니다. (명칭 및 권한 등 자유롭게 설정)
#################################################################
먼저 [global] 설정에 대해 알아봅니다.
① Browsing/Identification
# workgroup는 네트워크 공유 그룹 이름입니다.
# 기업이나 단체에서는 단일 네트워크 내에 여러 PC가 있기에 group을 지정합니다만,
# 개인용으로 사용하시는 거라면 group이 별 의미가 없습니다. 그냥 그대로 둡니다.
workgroup = WORKGROUP
# 서버 이름을 표시합니다. Windows에서 네트워크로 검색해보면 나오는 PC 이름에 해당합니다.
# 기본으로는 호스트명(%h)을 표시하도록 되어 있습니다. 본인이 원하는 이름으로 바꾸셔도 됩니다.
# (예) server string = HamoniKR Samba server
server string = %h server (Samba, Linux Mint)
# samba 서버에 접속할때, ID 계정을 확인하여 접속 유무를 허용한다면 "user"로 설정하고,
# ID 계정 없이 누구나 접속하게 하려면 "share"로 설정합니다.
# 여기서는 보안상 계정 확인이 안전하므로, user 상태 그대로 두겠습니다.
# 기본 설정 파일에는 아래 항목이 없을 수도 있습니다. default가 user 이므로 설정이 없어도 무방합니다.
security = user
# Windows 기반의 Name 서비스를 사용하는 경우...
# nmbd 데몬이 wins server 역할을 하고, 등록되지 않은 NetBIOS 이름을 찾아줄때,
# DNS server를 이용하여 NetBIOS 이름을 찾아줄 것인지를 지정하는 옵션입니다.
# wins server를 사용하지 않는 경우라면, 이 값들을 수정할 필요가 없습니다. (주석 그대로 유지)
# wins support = no
# wins server = w.x.y.z
# wins proxy = yes
dns proxy = no
② Networking
# 여러개의 네트워크 장치(랜카드)를 사용 중이면서, 특정 네트워크 장치로 samba 서비스를 제한해야 하는 경우
# 사용할 네트워크 장치를 정의할 수 있습니다.
# 일반적인 경우에는 수정할 필요가 없으므로 주석 그대로 남겨둡니다.
; interfaces = 127.0.0.0/8 eth0
; bind interfaces only = yes
# 특정 IP 또는 대역폭에서의 접근만을 허용하고 싶은 경우...
# 아래의 유형들 중 하나를 선택하여 내용을 추가합니다.
# 접속 IP 단위로 접근을 허용
hosts allow = 192.168.0.100 192.168.0.101
# 대역폭 단위로 지정. 마지막에 점(.)으로 끝남에 유의
hosts allow = 192.168.0. 10.10.10.
# 192.168.0.0 네트워크 대역에 속한 접속은 허용하되, 100번 101번은 제외
hosts allow = 192.168.0. except 192.168.0.100 192.168.0.101
# 호스트명 단위로 접근 설정
hosts allow = hamonikr01 hamonikr02 hamonikrweb hamonikrdb
③ Debugging/Accounting
# 로그 파일의 경로를 지정합니다.
# samba에 접속하는 호스트 별로 개별적인 로그 파일을 만들도록 설정되어 있습니다.
# 기본값 그대로 두어도 무방합니다.
log file = /var/log/samba/log.%m
# 로그 파일의 최대 사이즈를 지정합니다. (kb 단위)
# 로그 파일의 용량이 지정된 사이즈를 초과하는 경우,
# loglotate를 통해서 넘버링을 하고 새로운 로그파일로 저장됩니다.
max log size = 1000
# samba를 통한 파일 오퍼레이션(operation)에 있어 로그를 남기도록 하는 설정입니다.
# 파일 오퍼레이션 : read pread write pwrite chmod rmdir unlink mkdir rename 등
# syslog 서비스가 같이 구동되어야 합니다. 기본값은 no
# syslog only = no
syslog = 0
# samba 서버가 강제종료(crash)되는 등의 이슈 발생 시, admin 계정으로 메일 통지를 보내는 설정입니다.
# 기본 설정 그대로 둡니다.
panic action = /usr/share/samba/panic-action %d
④ Authentication
# samba의 역할을 정의합니다.
# samba를 도메인 컨트롤러로 사용하지 않는 이상 단일서버(standaloneserver)로 사용합니다.
server role = standalone server
# 사용자 패스워드를 어떻게 관리할지를 결정합니다.
# 일반적으로 smbpasswd를 사용합니다.
# 계정 수가 많아져도 부하가 적어 빠른 성능을 보여주는 tdbsam으로 변경할 수 있습니다. (기본값 smbpasswd)
; passdb backend = tdbsam
# PAM 인증 방식을 준수한다는 설정입니다. 기본값 그대로 둡니다.
obey pam restrictions = yes
# samba 계정의 패스워드 변경 시, 해당 리눅스 계정도 같이 동기화할 수 있도록하는 옵션입니다.
# 이를 위해 encrypt password, smb passwd file 두 옵션을 반드시 사용해야 합니다.
# passwd chat에서 패스워드 변경 시 사용자에게 보여지는 메세지 설정이 가능합니다.
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
# 패스워드 변경 요청 시 PAM을 사용하여 변경하도록하는 설정입니다. 기본값 그대로 둡니다.
pam password change = yes
# 클라이언트에서 samba 접근 시, 로그인에 실패한 사용자들을 어떻게 취급할지를 결정합니다.
# 기본값은 bad user는 guest로 취급하는 것입니다.
map to guest = bad user
⑤ 기타
# 사용자 공유에 guest 접근을 허용합니다.
usershare allow guests = yes
# samba 계정과 리눅스 계정을 다르게 사용할 경우 매칭 테이블 파일을 지정합니다.
username map = /etc/samba/smbusers
#################################################################
다음으로 [homes] 설정에 대해 알아봅니다.
여기서부터는 사용 형태에 따라 임의로 설정해주어야 합니다.
[homes] 설정은, 접속하는 samba 계정별로 가지는 자신만의 공유 경로로서,
본인만이 사용하고 읽기/쓰기 권한을 모두 가지는게 일반적입니다.
이점을 고려하여 아래와 같이 설정을 해보도록 합니다.
[homes]
comment = Home Directories # 설명 valid users = %S # 본인만 사용 writeable = yes # 쓰기 허용 browseable = no # 숨김 |
※ 자신의 경로로 자동 지정되므로, path 옵션을 사용할 필요가 없습니다.
#################################################################
다음은 프린터 설정입니다.
현재 시스템에 프린터가 설치되어 있다면, 자동으로 공유프린터로 보여지도록 설정되어 있습니다.
기본값 그대로 사용하면 됩니다.
[printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes ; guest ok = no ; read only = yes create mask = 0700
|
#################################################################
이제 필요한 공유 디렉터리를 입맛대로 만들어 보도록 합니다.
각 옵션별 의미를 파악하면 이들을 잘 조합하여 공유 폴더를 만들 수 있습니다.
먼저 공개(public) 항목을 만들어 보겠습니다.
공개 디렉터리이기에 누구나 접근할 수 있어야 하며, 보안상 읽기전용으로 설정하기도 합니다.
[public] comment = Public Directories path = /var/public # 시스템 상의 접속 경로 지정 public = yes # public 권한 writable = no # 쓰기 불가 (읽기 전용) write list = @staff # 읽기 전용이지만, staff 그룹 사용자는 쓰기 허용 force user = admin # 파일/폴더 생성 시, 지정되는 user 계정 force group = staff # 파일/폴더 생성 시, 지정되는 group 계정
|
#################################################################
특정 사용자들에 한해 읽기/쓰기가 가능한 공유 디렉터리를 만들어 보겠습니다.
[data] comment = Data Directories path = /var/data # 시스템 상의 접속 경로 지정 read only = no # 읽기만 가능하게 할지를 지정 writable = yes # 쓰기 허용 valid user = user1 user2 user3 # 사용 가능한 사용자를 지정 public = no # guest는 이용할 수 없고 개인 사용자만 사용 browseable = no create mask = 0777 # 파일 생성 mask directory mask = 0777 # 디렉터리 생성 mask follow symlinks = no # 심볼릭 링크로 이동 제한
|
※ 공유 디렉터리를 사용할 user가 많은 경우, 그룹으로 간단히 명시할 수도 있습니다.
그룹 표시문자(@)를 사용 (예: valid user = @groupname)
※ mask는 파일/디렉터리 생성시 적용되는 퍼미션(사용권한)을 말합니다.
첫째 자리는 시스템 구분 비트이므로 제외하고, 두번째 자리부터 "사용자(user), 그룹(group), 기타(other)" 입니다.
숫자값은 "읽기(read)/쓰기(write)/실행(exec)"을 뜻하며, 각 자리의 값은 읽기(4), 쓰기(2), 실행(1) 입니다.
즉, 숫자가 6이면 읽기/쓰기(r+w), 7이면 읽기/쓰기/실행(r+w+x), 5이면 읽기/실행(r+x) 입니다.
위 예에서와 같이 0777 이면, 사용자/그룹/기타 모두에게 읽기/쓰기/실행 권한을 주겠다는 뜻이 됩니다.
필요에 따라 0755, 0644 등과 같이 적절한 퍼미션 값을 지정하면 됩니다.
#################################################################
samba 설정에 대해 대략 살펴보았는데요.
설정 설명 위주다보니 제가 봐도 따분하게 느껴지네요.
초급편에서 samba 구동까지 마치셨다면, 중급편에서 필요한 부분만 뽑아 사용하면 무난히 설정할 수 있으리라 보여집니다.
다음 고급편에서는 samba 트러블 슈팅과 속도 튜닝에 대해서 짧게 다뤄보도록 하겠습니다.
그럼 즐거운 리눅스 하세요. ^^
알차게 핵심을 꼭 집어서 잘 정리해 주셨네요.
내용 잘 참고하겠습니다.
감사합니다.