0. 증상
samba를 운영 중,
Windows OS와 Mac OS X 클라이언트에서 smb.conf 권한설정과는 다르게 파일 업로드가 되는 경우가 발생 하였다.
특히 Mac OS X 10.7 Lion 이상 버젼에서의 문제가 많다.
클라이언트의 권한 변경 요청을 무시하고 강제로 서버의 권한 설정을 유지하기 위해 아래와 같은 형식으로 된 100여개의 공유 설정을 바꿔야 할 상황이 발생되었다. 같은 패턴의 반복된 문자열 처리를 위해 sed를 이용하여 간단하게 바꿀 수 있다.
1. 설정
1) 원본 설정
[test]
comment = test
path = /home/sample/test
force user = test
force group = sample
Read only = no
browseable = yes
guest ok = yes
create mask = 0660
directory mask = 0770
vfs objects = recycle
recycle:repository = !#휴지통#!
recycle:directory_mode = 0770
recycle:keeptree = yes
recycle:touch = yes
recycle:touch_mtime = yes
#recycle:exclude = *.tmp,*.TMP,*.temp,~$*,?~$*,~lock.*,*.mp3,*.MP3,*.ogg,*.OGG,*.avi,*.AVI,*.mp4,*.MP4,*.mkv,*.MKV,*.wmv,*.WMV
recycle:versions = yes
2) 변경 설정
아래와 같이 파란색 부분의 라인을 추가하려고 한다.
[test]
comment = test
path = /home/sample/test
force user = test
force group = sample
Read only = no
browseable = yes
guest ok = yes
create mask = 0660
security mask = 0660
force security mode = 0660
directory mask = 0770
directory security mask = 0770
force directory security mode = 0770
vfs objects = recycle
recycle:repository = !#휴지통#!
recycle:directory_mode = 0770
recycle:keeptree = yes
recycle:touch = yes
recycle:touch_mtime = yes
#recycle:exclude = *.tmp,*.TMP,*.temp,~$*,?~$*,~lock.*,*.mp3,*.MP3,*.ogg,*.OGG,*.avi,*.AVI,*.mp4,*.MP4,*.mkv,*.MKV,*.wmv,*.WMV
recycle:versions = yes
2. sed로 수정하기
먼저 smb.conf 파일을 /tmp에 복사한다.
만약을 위해 복사한 파일로 먼저 테스트를 해보고 실제 파일에 적용을 한다. 아니면 sed의 -i 옵션을 빼서 화면출력만 먼저해보고 적용.
[root@Sample-local ~]# cp /etc/samba/smb.conf /tmp
[root@Sample-local ~]# sed -i 's,\(create\ mask.*\),\1\nsecurity\ mask\ =\ 0660\nforce\ security\ mode\ =\ 0660,g;s,\(directory\ mask.*\),\1\ndirectory\ security\ mask\ =\ 0770\nforce\ directory\ security\ mode\ =\ 0770,g' /tmp/smb.conf
-> 설명하자면
1) 'create mask' 패턴이 포함된 라인을 찾는다.
2) 일치되는 패턴이 있으면 그 줄의 아래에 security mask = 0660 와 force security mode = 0660 줄을 삽입한다.
3) 'directory mask' 패턴이 포함된 라인을 찾는다.
2) 일치되는 패턴이 있으면 그 줄의 아래에 directory security mask = 0770 와 force directory security mode = 0770 줄을 삽입한다.
해당 옵션은 [global] 옵션 부분이 아니기 때문에 설정 후 smb 데몬을 restart 하지 않고도 바로 적용이 된다.
만약 바로 적용되지 않는다면 smb 데몬을 restart 할 것.
3. 참고자료(삼바 최종 권한)
samba 에서는 최종 권한을 적용할때 다음과 같은 로직으로 설정된다.
create permission =
( create mask OR force create mode ) AND (security mask OR force security mode)
즉 security mask 에서 허가되지 않은 부분은 create mask 로 설정이 되어있더라도 적용이 안된다.
만일 create mask에서 설정하는데로 되게 하고 싶으면 security mask를 0777로 해두면 된다.
더 자세한 내용은 해당 블로그의 'Samba 최종 권한 설정' 글을 참고