본문 바로가기

공부/리눅스

samba 서비스

반응형
마이크로소프트와 인텔은 윈도우시스템이 다른 시스템의 디스크나 프린터 자원을 공유할 수 있도록
 SMB(Server Message Block) 프로토콜을 개발하였는데 삼바란 이 SMB 를 이용하여 윈도우와 다른 시스템간의 프린터및 자료를 공유할 수 있도록 해주는 서비스

현재 마이크로소프트에서는 SMB 라는 이름대신 좀 더 범위가 큰 CIFS(Common Internet Filesystem)
이라는 프로토콜로 부른다. 이프로토콜은 SMB 프로토콜에 LanManager 와 NetBios 프로토콜까지
포함한다.

삼바구성
samba 서비스는 두개의 데몬을 구성된다.
1. smbd : 파일 및 프린터 공유, 사용자 확인 및 권한부여
2. nmbd : 클라이언트를 위해 NetBios nameserver를 지원하고 서비스를 알린다.

서비스구동

/etc/init.d/smb start 또는 service smb start

삼바서비스를 위한 패키지
[root@centos2 samba]# rpm -qa | grep samba
samba-swat-3.0.33-3.28.el5    ; GUI 환경에서의 삼바설정툴
system-config-samba-1.2.41-3.el5 ; GUI 환경에서의 삼바 설정툴
samba-common-3.0.33-3.28.el5  ; 삼바 설정파일, 유틸리티, 메뉴얼 페이지
samba-3.0.33-3.28.el5  ; 삼바 서버
samba-client-3.0.33-3.28.el5 ; 삼바 클라이언트
[root@centos1 samba]#


samba 설정파일
[root@centos1 samba]# ls
lmhosts  passdb.tdb  secrets.tdb  smb.conf  smb.conf_orig  smbusers
[root@centos1 samba

삼바서비스 주요설정

주석은 '#' 또는 ';' 이다.


[global]

# ----------------------- Network Related Options -------------------------
#
    workgroup = MYGROUP
    server string = Samba Server Version %v

;  netbios name = MYSERVER

;  interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
;  hosts allow = 127. 192.168.12. 192.168.13.

# --------------------------- Logging Options -----------------------------
#
# Log File let you specify where to put logs and how to split them up.
#
# Max Log Size let you specify the max size log files should reach

    # logs split per machine
;  log file = /var/log/samba/%m.log
    # max 50KB per log file, then rotate
;  max log size = 50

# ----------------------- Standalone Server Options ------------------------
#
# Security can be set to user, share(deprecated) or server(deprecated)
#
# Backend to store user information in. New installations should
# use either tdbsam or ldapsam. smbpasswd is available for backwards
# compatibility. tdbsam requires no further configuration.

    security = user  ( user 대신 사용할 수 있는것은 share/server/domain/ads 가 있다)
    passdb backend = tdbsam

*. 과거버전의 smbpasswd 를 사용하는 경우에는
passdb backend = smbpasswd:/etc/samba/smbpasswd 로 설정.

#============================ Share Definitions ==============================

[homes]
    comment = Home Directories
    browseable = no
    writable = yes
;  valid users = %S
;  valid users = MYDOMAIN\%S
                                                                                 
[homes]는 공유이름.
browseable : 공유자원을 보이게 하거나 숨길 수 있다.
writable : 공유자원에 대한 쓰기권한 설정
valid users : 공유자원에 대해서 access 가능한 사용자
                두명이상이면 스페이스문자를 구분자로 하고 계정을 적는다.




[printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    guest ok = no
    writable = no
    printable = yes

# A publicly accessible directory, but read only, except for people in
# the "staff" group
    [public]
    comment = Public Stuff
    path = /home/samba
    public = yes
    writable = yes
;  printable = no
    write list = +staff
[public] 공유이름
public : yes 로 설정될 경우 모든 사용자에게 공유자원 access를 허용
write list : 쓰기 가능한 사용자 리스트. +staff 는 그룹사용자를 의미한다.




    [public22]
    comment = Public Stuff
    path = /home/samba1
    public = yes
    writable = yes
;  printable = no
    write list = +staff

    [share2]
    comment = Public Stuff
    path = /home/samba2
    public = yes
    writable = yes
;  printable = no
    write list = +staff

*. magic cookies: 삼바의 smb.conf에서도 아래의 magic cookies를 사용할 수 있다.
      %u : 현재 사용중인 유저
      %g : 현재 사용중인 유저 그룹
      %m : 클라이언트의 NetBIOS이름
      %v : 버전
      %h : 호스트이름
      %p : 서버의 홈디렉토리 경로
      %d : 서버의 프로세서ID
      %S : 현재 사용되는 서비스 이름
      %P : 현재 사용되는 서비스의 루트 디렉토리
      %U : 세션의 유저
      %G : 셔션의 유저그룹
      %H : %u로 주어진 유저의 홈디렉토리
      %L : 서버의 NetBIOS이름
      %M : 클라이언트 머신 이름
      %N : NIS 홈디렉토리 서버의 이름
      %I : 클라이언트 머신 IP
      %T : 날짜와 시간


TDB (Trivial DB)

passdb.tdb 파일에 삼바 사용자 계정과 패스워드가 기록된다.
이 파일을 보거나 설정하기위해서는 pdbedit 툴이 필요하다.

계정생성
[root@centos1 samba]# pdbedit -a -u sysuser2
new password:
retype new password:
Unix username:        sysuser2
NT username:
Account Flags:        [U          ]
User SID:            S-1-5-21-1841115434-4086067128-1488843553-1000
Primary Group SID:    S-1-5-21-1841115434-4086067128-1488843553-513
Full Name:
Home Directory:      \\centos1\sysuser2
HomeDir Drive:
Logon Script:
Profile Path:        \\centos1\sysuser2\profile
Domain:              CENTOS1
Account desc:
Workstations:
Munged dial:
Logon time:          0
Logoff time:          never
Kickoff time:        never
Password last set:    토, 26  6월 2010 13:56:54 KST
Password can change:  토, 26  6월 2010 13:56:54 KST
Password must change: never
Last bad password  : 0
Bad password count  : 0
Logon hours        : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@centos1 samba]#

*. 삼바 계정을 추가할 경우 /etc/passwd 에 등록되어 있는 계정이라야 한다.

[root@centos1 samba]# pdbedit -L  ; 계정정보보기
user2:1012:
suser1:1009:
user1:500:
smuser1:1011:
sysuser2:1016:
[root@centos1 samba]#
[root@centos1 samba]# pdbedit -x sysuser2    ; 삼바계정 삭제
[root@centos1 samba]# pdbedit -L sysuser2
Username not found!
[root@centos1 samba]#

암호를 변경하는 경우에는 smbpasswd 명령어로 한다.
계정 생성 및 삭제 변경은 smbpasswd 로도 할수 있다.
[root@centos1 samba]# smbpasswd -a sysuser4
New SMB password:
Retype new SMB password:
Added user sysuser4.
[root@centos1 samba]#

삼바계정 삭제하기.
[root@centos1 samba]# smbpasswd -x sysuser4
Deleted user sysuser4.
[root@centos1 samba]#

삼바계정 disable 하기
[root@centos1 samba]# smbpasswd -d sysuser3
Disabled user sysuser3.
[root@centos1 samba]#

disable 상태의 삼바계정 enable 상태로 설정하기
[root@centos1 samba]# smbpasswd -e sysuser3
Enabled user sysuser3.
[root@centos1 samba]#

mswindows 공유자원 보기

[root@centos1 ~]# smbclient -L //192.168.203.1/ms_share -U lee
Password:
Domain=[UNIXUNIX-LEE] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

        Sharename      Type      Comment
        ---------      ----      -------
        ms_share        Disk
        E$              Disk      Default share
        IPC$            IPC      Remote IPC
        D$              Disk      Default share
        I$              Disk      Default share
        G$              Disk      Default share
        F$              Disk      Default share
        ADMIN$          Disk      Remote Admin
        H$              Disk      Default share
        C$              Disk      Default share
        J$              Disk      Default share
session request to 192.168.203.1 failed (Called name not present)
session request to 192 failed (Called name not present)
Domain=[UNIXUNIX-LEE] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

        Server              Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
[root@centos1 ~]#


[root@centos1 ~]# smbclient //192.168.203.1/ms_share -U lee
Password:
Domain=[UNIXUNIX-LEE] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \>

명령어 리스트는 help 로 볼수 있다.
smb: \> help
?              altname        archive        blocksize      cancel
case_sensitive cd            chmod          chown          close
del            dir            du            exit          get
getfacl        hardlink      help          history        lcd
link          lock          lowercase      ls            mask
md            mget          mkdir          more          mput
newer          open          posix          posix_open    posix_mkdir
posix_rmdir    posix_unlink  print          prompt        put
pwd            q              queue          quit          rd
recurse        reget          rename        reput          rm
rmdir          showacls      setmode        stat          symlink
tar            tarmode        translate      unlock        volume
vuid          wdel          logon          listconnect    showconnect
!
smb: \> help pwd
HELP pwd:
        show current remote directory (same as 'cd' with no args)

smb: \>

* ftp 명령어와 비슷한것이 많다.
cd ; remote 디렉토리 이동
lcd : local 디렉토리 이동
put,mput : 파일 upload
get,mget : 파일 download
prompt : 파일전송시 interactive mode on/off

/tmp 디렉토리에 파일을 다운 받는 예.
smb: \> ! pwd
/root
smb: \> lcd /tmp
smb: \> ! pwd
/tmp
smb: \> get abc.txt
getting file \abc.txt of size 7 as abc.txt (0.6 kb/s) (average 0.6 kb/s)
smb: \>

삼바공유자원 mount

mount.cifs

[root@centos1 ~]# mount.cifs //192.168.203.1/ms_share /mnt/mswin1 -o user=lee
Password:
[root@centos1 ~]# df
Filesystem          1K-blocks      Used Available Use% Mounted on
/dev/sda1              4956284  4394240    306212  94% /
/dev/sda5              497829    10544    461583  3% /data
/dev/sda2              1649488    684620    879724  44% /home
tmpfs                  257720        0    257720  0% /dev/shm
//192.168.203.1/ms_share
                      81923432  78173908  3749524  96% /mnt/mswin1
[root@centos1 ~]#

부팅할때 자동으로 마운트되게 하거나 마운트할때 마다 옵션을 사용하기 싫으면
/etc/fstab 파일에 아래처럼 등록한다.

[root@centos1 mswin1]# tail -1 /etc/fstab
//192.168.203.1/ms_share /mnt/mswin1 cifs noauto,user=lee,pass=1234,dir_mode=0755,file_mode=0644,noexec 0 0
[root@centos1 mswin1]#
noauto 옵션은 부팅할때 자동 마운트 하지 않는다.
dir_mode 및 file_mode 는 윈도우 자원을 마운트 했을때 퍼미션이 비정상적으로 표시될 수 있는데
그것을 제대로 설정하기 위한것이다.
ex)
[root@centos1 mswin1]# ls -l
합계 2
-rwxrwSrwx 1 root root  5  6월 26 11:23 2.txt
-rwxrwSrwx 1 root root  7  6월 26 12:26 abc.txt
-rwxrwSrwx 1 root root 26  6월 26 11:07 testfile.txt

*. 연결 상태는 linux 에서는 smbstatus 그리고 mswindows cmd 에서는 net use 로 확인할 수 있다.

[root@centos1 home]#
[root@centos1 mswin1]# mount.cifs //192.168.203.1/d$/ms_share /mnt/mswin1 -o user=lee,pass=xxxx
[root@centos1 mswin1]# df
Filesystem          1K-blocks      Used Available Use% Mounted on
/dev/sda1              4956284  4530284    170168  97% /
/dev/sda5              497829    10544    461583  3% /data
/dev/sda2              1649488    684416    879928  44% /home
tmpfs                  257720        0    257720  0% /dev/shm
//192.168.203.1/d$/ms_share
                      81923432  73597756  8325676  90% /mnt/mswin1
[root@centos1 mswin1]#

[root@centos1 mnt]# mount.cifs //192.168.203.1/d$/ms_share /mnt/mswin1 -o user=lee
Password:

root@centos1 home]# smbstatus
[root@centos1 samba]# smbstatus

Samba version 3.0.33-3.28.el5
PID    Username      Group        Machine
-------------------------------------------------------------------

Service      pid    machine      Connected at
-------------------------------------------------------
share2      3522  unixunix-lee  Fri Jun 25 20:24:30 2010
public      3522  unixunix-lee  Fri Jun 25 20:11:42 2010
public22    3522  unixunix-lee  Fri Jun 25 20:24:31 2010
IPC$        3522  unixunix-lee  Fri Jun 25 20:12:40 2010

Locked files:
Pid          Uid        DenyMode  Access      R/W        Oplock          SharePath  Name  Time
------------------------------------------------------------------------------------------------------------------------------------
3522        99        DENY_NONE  0x100001    RDONLY    NONE            /home/samba  .  Fri Jun 25 20:16:18 2010


C:\Documents and Settings\lee>net use
새 연결 정보가 저장됩니다.

상태        로컬      원격                      네트워크

-------------------------------------------------------------------------------
OK                    \\Centos1\public          Microsoft Windows 네트워크
OK                    \\CENTOS1\PUBLIC22        Microsoft Windows 네트워크
OK                    \\CENTOS1\SHARE2          Microsoft Windows 네트워크
명령을 잘 실행했습니다.


C:\Documents and Settings\lee>
C:\Documents and Settings\lee>net use \\Centos1\public22
로컬 이름
원격 이름      \\Centos1\public22
리소스 유형    Disk
상태            OK
열린 수        1
연결 수        12
명령을 잘 실행했습니다.


C:\Documents and Settings\lee>net use \\Centos1\public
로컬 이름
원격 이름      \\Centos1\public
리소스 유형    Disk
상태            OK
열린 수        1
연결 수        12
명령을 잘 실행했습니다.

* 연결을 끊는경우
C:\Documents and Settings\lee>net use \\Centos1\public /del

* 연결을 전부 끊는경우
C:\Documents and Settings\lee>net use * /del
새 연결 정보가 저장됩니다.

*. pdbedit 로 삼바 계정을 관리할 수 있다.
[root@centos1 mswin1]# pdbedit -L
user2:1012:
suser1:1009:
user1:500:
smuser1:1011:
[root@centos1 mswin1]#

*. windows 에서 삼바서버 접속시 한글파일명이 깨져서 보이는 경우에는
다음과 같이 smb.conf 파일에 문자셋 설정을 하여야 한다.
 # ----------------------- Network Related Options -------------------------
dos charset=euckr
unix charset=UTF-8

*. MSwindos 에서 웹페이지를 작성하여 /usr/local/apache/htdocs 디렉토리에 저장하는 경우
에는 아래처럼 하면 된다.
htdocs 에 파일을 저장할 수 있는 권한을 smbuser1 이라는 삼바계정으로 하고자 한다면
[root /etc/samba]# chown -R smbuser1 /usr/local/apache/htdocs
그리고 smbuser1의 계정으로 자신의 홈디렉토리에 htodcs 디렉토리를 심볼릭 링크 걸면된다.
[smbuser1@centos1 ~]$ ln -s /usr/local/apache/htdocs htdocs
여기까지 작업이 끝나면 mswindows 에서 쉽게 리눅스의 htdocs 에 파일을 저장할 수 있다.

*. iptables 을 사용하는 경우 remote에서 삼바서버에 접속하기 위해서 삼바서버포트를
열어둬야 한다.
[root@centhost ~]# vi /etc/sysconfig/iptables
아래 내용 추가

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 137:139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137:139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

반응형