공개SW리뷰 21편 제목 : 삼바(SAMBA) 서버사용법 ㅇ 제작 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아서버관리팀 ㅇ SULINUX 홈페이지 : www.sulinux.net ㅇ리눅스포털홈페이지 : www.superuser.co.kr
삼바는리눅스와윈도우간에파일및프린터를공유할수있게해주는프로그램이다. 삼바를통해리눅스서버를타운영체제와파일을공유할수있는파일서버로도사용할수있다. 이와같이삼바가공유할수있는이유는 SMB(Server Message Block)/CIFS(Common Internet File System) 라는프로토콜을이용함으로써가능해졌다. 참고 SMB 란? SMB(Server Message Block) 는마이크로소프트사와인텔이윈도우시스템이다른시스템의디스크나프린터와같은자원을공유할있도록하기위해개발된프로토콜이다. TCP/IP 기반하의 NetBIOS 프로토콜을이용하기때문에이프로토콜은 NFS, NIS, lpd 와같은유닉스의분산인증구조와유사하다. 따라서윈도우중심의네트워크환경에서는리눅스를이용한공유시스템에서는 SMB 가필수적이다. CIFS 란? CIFS(Common Internet File System) 는네트워크를위한 SMB 파일공유프로토콜의확장된버전이며, 윈도우와유닉스환경을동 시에지원하는인터넷의표준파일규약의프로토콜이다. CIFS는 이전의폐쇄적인 SMB 프로토콜과는달리 CIFS 규약정의는여러 유닉스업체의참여하여결정된내용이기때문에삼바도버전이올 라감에따라( 삼바버전 2.2 이상) CIFS 규약을잘준수하여안정성 이상당히향상되었다.. 네트워크에윈도우서버가있음에도불구하고삼바를사용하는이유를생각해보도록하자. 삼바는기존네트워크환경에존재하는이기종운영체제를하나로통합관리하며사용할수있도록도와준다. MS 사의윈도우계열뿐만아니라매킨토시, 리눅스, Unix 와같은다양한운영체제가같이존재할경우통합관리에서유일한대안은삼바일것이다. 삼바는파일서버뿐아니라프리트서버로서도중요한역할을하고있다. 윈도우그룹을하나로묶기위해주도메인서버를더이상윈도우즈서버가담당할필요없어졌다. 삼바를이용하여훌륭한주도메인관리기로동작시키면더이상윈도우즈서버에구애받을필요가없어졌다는말이다. 그럼지금부터이렇게강력한삼바을지원하는자. 삼바의기본구성목록은다음과같다. SULinux의삼바기본구성패키지를살펴보
samba-3.0.10-1.4e.2 samba-client-3.0.10-1.4e.2 samba-common-3.0.10-1.4e.2 samba-swat-3.0.10-1.4e.2 위의 4 개의패키지로삼바를구성할수있는모든준비는끝났다. 만약설치삭제하였다면 yum install samba* 라는명령어로삼바를다시설치하여이하의삼바서버를구축해보자! 삼버서버를구동하기위해서는먼저네트워크환경에맞게설정을해야한다. 파일은 /etc/samba 디렉토리아래에있으며, smb.conf 가기본설정파일이다. 삼바의설정 삼바의설정은매우복잡하며환경에따라서다양한설정방법등이존재하므로처음부터 모든것을설정하기보다는가장기본적인것부터설정해나가는것이효율적이다. SULinux에서제공하는기본 smb.conf 를간단히수정하는과정및파일의설정내용을살 펴보자. 참고 testparm : 삼바설정화일의구문을체크하여에러를표시해주는유틸리티 #cd/etc/samba #vismb.conf
[global] # 윈도우에서작업그룹과같다. 성한다. workgroup = MYGROUP 공유하고자하는작업그룹이름을작 # 컴퓨터설명필드와같다. server string = Samba Server # 삼바에접속하는호스트별로개별적인로그파일을만들도록한다. log file = /var/log/samba/%m.log # 사용자인증을거치지않고공유자원( 폴더) 에접근할수있게한다. security = user # 윈도우의기본패드워드모드는 encrypted 모드이다. encrypt passwords = yes # 삼바의암호모드가윈도우와호환되도록설정한다. smb passwd file = /etc/samba/smbpasswd # 한국어지원을위한설정 unix charset = cp949 dos charset = cp949 display charset = cp949 client code page = 949 # 대부분의경우아래옵션을주면성능향샹효과를볼수있다. socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 [homes] # 공유자원을찾을수없을때사용자데이터베이스를찾아서해당사용자에대한공유자원을만들어주는기본섹션이다. # 공유자원에대한설명필드와같다. comment = Home Directories # 윈도우네트워크브라이저에서디렉토리를보일것인지를결정한다. browseable = no # 사용자에게쓰기권한을줍니다. writable = yes [public] # 윈도우에서보이는공유자원( 폴더) 이름이다. # 공유자원에대한설명필드와같다. comment = Public Stuff # 삼바서버로공유할실제공유자원( 폴더) 이다. path = /home/public # 손님사용자에게접근을허용한다. public = yes # 사용자에게쓰기권한을줍니다. writable = yes 삼바서버구동은아래와같이한다. # /etc/init.d/smb start
삼바서버를중지는아래와같이한다. # /etc/init.d/smb stop 삼바서버에접속하기위해서는삼바사용자를추가해야한다. 삼바사용자는시스템계정에추가한사용자여야한다. 다시말해 /etc/passwd 파일에등록되사용자여야한다는말이다. 아래는서버에 admin 계정을추가하는과정이다. 만일사용자계정이추가되어있다면새롭게추가할필요는없다. 추가되어있는리눅스서버계정에삼바접근을위한사용자를추가한다. 삼바접근을위한사용자추가는 smbadduser 명령으로추가해야한다. 반드시 /etc/passwd 파일에추가되어있는시스템계정을새롭게삼바사용자계정으로추가해야한다. [root@localhost ~ ]# smbadduser admin:admin Adding: admin to /etc/samba/smbpasswd Added user admin. ---------------------------------------------------------- ENTER password for admin New SMB password: Retype new SMB password: Passwordchangedforuseradmin. Passwordchangedforuseradmin. [root@localhost ~ ]#
리눅스에서윈도우공유폴더에접근하려면먼저해당컴퓨터의공유폴더에어떤것들이있는지알아야한다. 이러한공유자원을알아보는명령이 smbclient 이다. 공유폴더의접근을종료하려면 exit 명령을입력하면된다. smbclient 형식 :smbclient-l컴퓨터이름외부네크워크일경우 : smbclient -L 컴퓨터이름 -I 컴퓨터의 IP주소 실제사용의예 [root@localhost ~ ]# smbclient -L Public Stuff -I 192.168.1.200 [root@localhost ~ ]# smbclient //Public Stuff -I 192.168.1.200 [root@localhost ~ ]# smbclient //Public Stuff/nemo -l 192.168.1.200 참고 Type 이 Disk 인것이공유폴더이고, Sharename 은공유이름이다. Comment 는자원에대한설명이다 삼바서버를통해윈도우공유폴더를마운트하여리눅스디렉토리처럼사용할수도있다. 윈도우의네트워크드라이브연결과같다고생각하면되겠습니다. smbmount 를사용하여할수도있고,mount 명령에서삼바파일시스템형식을지정하여할수도있다. smbmount 형식 :smbmount // 컴퓨터이름/ 공유이름마운트할디렉토리 mount 형식 :mount -t smbfs // 컴퓨터이름/ 공유이름마운트할디렉토리 실제사용의예 mount -t smbfs //Public Stuff/nemo /mnt/samba
지금까지간단히삼바서버를사용하는법을알아보았다. 이제는특정사용자만쓸수있는 공유자원( 폴더) 를설정하는방법을알아보자. 먼저 smb.conf 에다음과같이추가하고삼 바서버를재시작한다. [nemo_room] comment = NemoRoom path = /home/nemo valid users = nemo public = no writable = yes 위와같은설정은 nemo 라는사용자에게만 nemo_room 이라는공유자원( 폴더) 사용을허용하는설정이다. 실제의공유자원은리눅스서버의 /home/nemo/ 가된다. 여기에서한가지더알아보자면 [nemo_room] 공유자원을 nemo 와 nemo1 두사용자에게할당하려고한다면 'vaild users' 값을 'valid users = nemo nemo1' 과같이하면된다. 반대로 nemo 와 nemo1 사용자만제외하고나머지사용자들에게공유자원접근을허용하려고한다면'invalid users = nemo nemo1' 과같이하면된다. 사용자별로공유자원을할당하기위해서는사용자가특정공유자원을요청하면삼바는해당공유자원을소유하는사용자권한으로동작하기때문에어떤경우에있어서도유닉스머신에사용자계정이있어야한다. 이제그작업을해보도록하자. 만약 nemo 와 nemo1이라는사용자가서버에없다면 adduser 를이용하여계정을만든다. [root@localhost ~ ]# cd /etc/passwd mksmbpasswd.sh > /etc/samba/smbpasswd [root@localhost ~ ]# smbpasswd nemo