상세 컨텐츠

본문 제목

삼바설정자료

프로그래밍/시스템, 서버구축

by 라제폰 2008. 12. 30. 13:08

본문

Samba 공유자원의 사용자별 접권 권한 콘트롤


유성태

2000년 6월 15일


리눅스 머신에서 samba를 이용하여 임의의 디렉터리를 공유하고자 할 때
이 디렉터리에 대한 사용자 별 접권 권한을 어떻게 조절할 수 있는지
그 방법을 알아보고자 합니다.

데비안 2.2 POTATO, samba 2.0.5, 2.0.6, 2.0.7에서 시험하였습니다.


samba를 설치한 후에 smb.conf 예를 살펴보면 아래와 같은 설정이 있습니다.

[public]
  
comment = Public Stuff
  
path = /usr/somewhere/public
  
public = yes
  
writable = no
  
printable = no
  
write list = @staff

위 설정의 의미는 다음과 같습니다.

  
"/usr/somewhere/public 이라는 디렉터리의 공유 이름을 public 으로 하여
  
누구나 접근 할 수는 있지만 (public = yes), 파일을 쓸 수는 없도록
  
(writable = no) 설정한다. 다만, staff 그룹에 속하는 사용자는 읽기와
  
쓰기가 모두 가능하다."

그러나 위의 설정은 제대로 작동하지 않음을 확인하였습니다. 위의 설정을
크게 바꾸지 않는 범위에서 할 수 있는 짓은 다 해 보았으나 통하지를
않았습니다. samba 메일링 리스트는 현재 온라인 서치가 작동하지 않아서

그 쪽의 도움은 받을 수가 없었습니다.

NOTE: 위의 설정이 제대로 작동하는 것을 확인하신 분은 저에게 알려 주시면
      감사하겠습니다.

writable
  = no 라는 설정의 위력은 대단합니다. 비록 공유하고자 하는
디렉터리를 777 모드로 설정해 놓아도 전혀 쓰기를 할 수가 없었습니다.
심지어 그 디렉터리의 소유자 ID로도 읽기 만을 할 수 있을 뿐 이었습니다.

writable = yes 라고 설정해 놓고 디렉터리를 777 모드로 설정해 놓으면
모든 사용자가 읽고 쓸 수 있는 권한을 가지게 됩니다. 전혀 원하는 바가
아니지요. 775로 설정해 놓으며 읽기 만이 가능합니다.

어쩔 수 없이 public = yes를 포기했습니다. 즉 누구나 비밀번호 입력 없이
읽을 수 있도록 하고 특정 사용자들에게만 쓰기 권한을 주는 설정은
불가능하다고 결론을 내렸습니다. 그래서 비밀 번호를 입력해서 접근 할 수
있도록 설정을 바꾸고 각 사용자 별로 접근 권한을 조절하는 방안을 찾기로
하였습니다.

우선 아래와 같이 설정을 바꾸었습니다.

[public]
  
comment = Public Stuff
  
browseable = yes
  
path = /usr/somewhere/public
  
writable = yes
  
read list = tiyo
  
write list = momo

위의 설정에서 tiyo와 momo는 리눅스 머신에 실제로 존재하는 user ID 입니다.
read list와 write list에 다른 사용자를 추가하려면 콤마로써 구분해 주면
됩니다.

위의 설정은 제대로 작동하는 것으로 확인 되었습니다. 윈도 머신에서 tiyo로
로그온 한다면 리눅스 쪽의 공유 디렉터리를 읽을 수 있습니다. 물론 쓸 수는
없지요. momo로 로그온 한다면 읽고 쓰기 모두 가능합니다. 남은 문제는 윈도
머신 사용자들의 로그온 ID를 리눅스 머신의 실제 user ID로 등록하지 않고도
그들이 접권 권한을 조절해야 한다는 것 입니다. 이를 해결하기 위한 방법은
user map 파일을 만드는 것 입니다.

[global] 섹션에 아래와 같은 설정을 넣어 줍니다.

username map = /etc/samba/users.map

그리고 users.map 파일을 작성합니다. 예를 들면 아래와 같습니다.

tiyo = jaff kei moss
momo = pei gress klee

위에서 tiyo와 momo는 리눅스 머신의 실제 사용자 ID 이며, jaff, kei,
pei등은 윈도 머신에서 사용하는 로그온 ID 입니다. 물론, 등호(=)의
오른쪽에 있는 사용자 목록에는 리눅스 머신의 사용자 ID도 올 수 있으며
그룹 ID(예, @staff)도 올 수 있습니다.

또한, global 섹션에 encrypt passwords = yes를 설정해 놓았다면 tiyo와
momo의 비밀번호가 /etc/samba/smbpasswd 파일에 등록되어 있어야 할
것입니다.

위와 같이 user map 파일을 만들어 사용할 때, 윈도 머신에서 pei라는 ID로
리눅스 머신에 접근한다면 momo 사용자의 홈 디렉터리에도 접근 할 수
있다는 문제점이 있습니다. 이 문제를 피하기 위해서는 [home] 섹션을
제거하는 것이 가장 좋을 것으로 생각됩니다.

[public] 섹션으로 돌아가서, valid users = tiyo momo 설정을 추가해 줄
필요는 없습니다. read list 와 write list 설정으로도 충분합니다.
그 다음, 중요한 것은 공유하고자 하는 디렉터리의 소유자가 누구냐하는
것 입니다. 두 말할 필요도 없이 쓰기 권한을 줄 tiyo가 그 소유자가
되어야 할 것입니다. 755 모드로 공유 디렉터리를 설정해 두면 되겠습니다.

정리를 해 보면,

1. 쓰기 권한과 읽기 권한을 줄 사용자 ID를 만든다

  
# adduser tiyo
  
# adduser momo

2. 쓰기 권한을 줄 사용자 명의로 공유할 디렉터리를 만든다.

  
# cd /
  
# mkdir pub
  
# chown tiyo.tiyo pub
  
# chmod 755 pub

3. users.map 파일을 만들어 /etc/samba/ 디렉터리에 저장한다. 파일 이름과
  
저장 위치는 원하는 대로.

4. smb.conf 파일의 global 섹션에 아래 한 줄을 추가

  
[global]
      
........
      
........
      
........
      
username map = /etc/samba/users.map
      
........
      
........

5. smb.conf 파일에 공유할 디렉터리를 정의한다.


  
[public]
      
comment = Public Stuff
      
browseable = yes
      
path = /pub
      
writable = yes
      
read list = tiyo 

      
write list = momo

6. encrypt password를 사용할 경우에는 read list와 write list에 열거된
  
사용자들의 ID와 패스워드를 smbpasswd 파일에 등록한다.

  
# smbpasswd -a tiyo
  
# smbpasswd -a momo

7. samba를 데몬으로 실행시키고 있다면 다시 실행시킨다.


여러 디렉터리를 사용자 접근 권한을 각각 달리하여 적용하고자 한다면
리눅스 머신의 사용자 ID를 여러개 만들어야 한다는 사소한 불편함이
있다는 것이 불만이라면 불만입니다.


관련글 더보기