1. 程式人生 > >網絡文件共享服務-Samba

網絡文件共享服務-Samba

當前 windows code The ios 介紹 小寫 cif backend

SAMBA服務簡介
SMB:
    Server Message Block服務器消息塊,IBM發布,最早是DOS網絡文件共享協議
Cifs:
    common internet file system,微軟基於SMB發布
SAMBA:
    1991年Andrew Tridgell,實現windows和UNIX相通   
SAMBA的功能:
    共享文件和打印,實現在線編輯
    實現登錄SAMBA用戶的身份認證
    可以進行NetBIOS名稱解析
    外圍設備共享
計算機網絡管理模式:
    工作組WORKGROUP:計算機對等關系,帳號信息各自管理
    域DOMAIN:C/S結構,帳號信息集中管理,DC,AD

SAMBA介紹

相關包:
    Samba 提供smb服務
    Samba-client 客戶端軟件
    samba-common 通用軟件
    cifs-utils smb客戶端工具
    samba-winbind 和AD相關
相關服務進程:
    smbd 提供smb(cifs)服務 TCP: 139,445
    nmbd NetBIOS名稱解析     UDP: 137,138
主配置文件:
    etc/samba/smb.conf
    幫助參看:man smb.conf
語法檢查: 
    testparm [-v] [/etc/samba/smb.conf]
客戶端工具:
    smbclient,mount.cifs

SAMBA服務器配置

smb.conf繼承了.ini文件的格式,用[ ] 分成不同的部分
全局設置:
    [global] 服務器通用或全局設置的部分
特定共享設置:
    [homes] 用戶的家目錄共享
    [printers] 定義打印機資源和服務
    [sharename] 自定義的共享目錄配置
其中:
    #和;開頭的語句為註釋,大小寫不敏感
宏定義:
    %m 客戶端主機的NetBIOS名 %M 客戶端主機的FQDN
    %H 當前用戶家目錄路徑%U 當前用戶用戶名
    %g 當前用戶所屬組%h samba服務器的主機名
    %L samba服務器的NetBIOS名%I 客戶端主機的IP
    %T 當前日期和時間 %S 可登錄的用戶名

SAMBA服務器全局配置

1、workgroup 指定工作組名稱
2、server string 主機註釋信息
3、netbios name 指定NetBIOS名
4、interfaces 指定服務偵聽接口和IP
5、hosts allow 可用“,” ,空格,或tab分隔,默認允許所有主機訪問,也可在每個共享獨立配置,如在[global]設置,將應用並覆蓋所有共享設置
    IPv4 network/prefix: 172.25.0.0/24 IPv4前綴: 172.25.0.
    IPv4 network/netmask: 172.25.0.0/255.255.255.0
    主機名: desktop.example.com
    以example.com後綴的主機名: .example.com
    示例:
        hosts allow = 172.25.
        hosts allow = 172.25. .example.com
6、hosts deny                            拒絕指定主機訪問
7、config file=/etc/samba/conf.d/%U  用戶獨立的配置文件
8、Log file=/var/log/samba/log.%m        不同客戶機采用不同日誌
9、log level = 2                         日誌級別,默認為0,不記錄日誌
10、max log size=50 日誌文件達到50K,將輪循rotate,單位KB
11、Security三種認證方式:
    share:匿名(CentOS7不再支持)
    user:samba用戶(采有linux用戶,samba的獨立口令)
    domain:使用DC(DOMAIN CONTROLLER)認證
12、passdb backend = tdbsam 密碼數據庫格式
13、實現samba用戶:
    包: samba-common-tools
    工具:smbpasswd pdbedit
        samba用戶須是Linux用戶,建議使用/sbin/nologin
14、nfs ftp smb都有一個共同法則,任何用戶通過網絡服務所訪問的權限取決於共享權限和文件系統權限的交集

管理SAMBA用戶

添加samba用戶
    smbpasswd -a <user>
    pdbedit -a -u <user>
修改用戶密碼
    smbpasswd <user>
刪除用戶和密碼:
    smbpasswd –x <user>
    pdbedit –x –u <user>
查看samba用戶列表:
    /var/lib/samba/private/passdb.tdb
    pdbedit –L –v
查看samba服務器狀態
    smbstatus

配置目錄共享

每個共享目錄應該有獨立的[ ]部分
    [共享名稱] 遠程網絡看到的共享名稱
    comment 註釋信息
    path 所共享的目錄路徑
    public 能否被guest訪問的共享,默認no,和guest ok 類似
    browsable 是否允許所有用戶瀏覽此共享,默認為yes,no為隱藏
    writable=yes 可以被所有用戶讀寫,默認為no
    read only=no 和writable=yes等價,如與以上設置沖突,放在後面的設置生效,默認只讀
    write list 三種形式:用戶,@組名,+組名,用,分隔
    如writable=no,列表中用戶或組可讀寫,不在列表中用戶只讀
    valid users 特定用戶才能訪問該共享,如為空,將允許所有用戶,用戶名之間用空格分隔

SMB客戶端訪問

UNC路徑: Universal Naming Convention,通用命名規範
    格式:\\sambaserver\sharename
終端下使用smbclient登錄服務器
    smbclient -L instructor.example.com
    smbclient -L instructor.example.com -U ilinux
    > cd directory
    > get file1
    > put file2
smbclient //instructor.example.com/shared -U ilinux
可以使用-U選項來指定用戶%密碼,或通過設置和導出USER和PASSWD環境變量來指定

掛載CIFS文件系統

需要安裝cifs-util
[root@node7 ~]#yum -y install cifs-utils
手動掛載
    mount -t cifs -o user=wang,password=magedu //server//shared /mnt/smb

    [root@node7 ~]# mount -t cifs -o user=ilinux,password=123456 //192.168.137.56/vol2 /media
開機自動掛載
    cat /etc/fstab 可以用文件代替用戶名和密碼的輸入
    //server/homes /mnt cifs credentials=/etc/smb.txt 0 0
cat /etc/smb.txt
username=ilinux
password=password
chmod 600 /etc/smb.txt

samba簡單示例

安裝Samba,本地測試需要客戶端 也得裝客戶端
    [root@node6 ~]#yum -y install samba samba-client
配置smb的配置文件定義相關的選項
    [root@node6 /etc/samba]#vim smb.conf
    [global]
            workgroup = WORKGROUP
            security = user

            passdb backend = tdbsam

            hosts allow = 127. 192.168.137.
            hosts deny = all

            log file = /var/log/samba/log.%m

            printing = cups
            printcap name = cups
            load printers = yes
            cups options = raw

    [homes]
檢測配置文件語法
[root@node6 /etc/samba]#testparm -h

創建Samba用戶,Samba用戶的話是用系統用戶來轉換成Samba用戶的
    [root@node6 /etc/samba]#pdbedit -a -u ilinux
    new password:
    retype new password:

列出Samba用戶
    [root@node6 /etc/samba]#pdbedit -L -v
啟動Samba服務
    [root@node6 /etc/samba]#systemctl start smb

客戶端測試,可以用win也可以用Linux 都行 Linux的話 需要裝Samba的客戶端
    [root@node7 /mnt]#yum -y install samba-client
Linux客戶端訪問:
    [root@node7 /mnt]#smbclient  -L ilinux -L 192.168.137.56
    Enter SAMBA\root‘‘s password: 
    Anonymous login successful

            Sharename       Type      Comment
            ---------       ----      -------
            print$          Disk      Printer Drivers
            IPC$            IPC       IPC Service (Samba 4.7.1)
    Reconnecting with SMB1 for workgroup listing.
    Anonymous login successful

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

            Workgroup            Master
            ---------            -------
另外一種方式登錄:
    [root@node7 /mnt]#smbclient -U ilinux //192.168.137.56/ilinux
    Enter SAMBA\ilinux‘s password: 
    Try "help" to get a list of possible commands.
    smb: \> ls
      .                                   D        0  Tue Oct 23 16:08:43 2018
      ..                                  D        0  Tue Oct 23 16:12:48 2018
      .bash_logout                        H       18  Wed Apr 11 08:53:01 2018
      .bash_profile                       H      193  Wed Apr 11 08:53:01 2018
      .bashrc                             H      231  Wed Apr 11 08:53:01 2018
      issue                               N       23  Mon Oct 22 21:19:01 2018
      .cache                             DH        0  Tue Oct 23 13:45:54 2018
      .config                            DH        0  Tue Oct 23 13:45:54 2018
      .bash_history                       H       41  Tue Oct 23 13:53:32 2018
      win.jpg                             A    48822  Tue Sep  4 21:40:09 2018

                    51175000 blocks of size 1024. 49355436 blocks available
    smb: \> 

自定義存儲路徑

修改配置文件,在最後添加一段
    [root@node6 /data]#vim /etc/samba/smb.conf
    [vol2]
            comment = shared volume 2
            path = /data/volume2
            writable = no
檢查語法,並重新加載服務
    [root@node6 /data]#testparm 
    [root@node6 /data]#systemctl reload smb

客戶端測試此目錄的權限
    [root@node7 /mnt]#smbclien -L ilinux -L 192.168.137.56ux        
    Enter SAMBA\root‘s password: 
    Anonymous login successful

            Sharename       Type      Comment
            ---------       ----      -------
            print$          Disk      Printer Drivers
            IPC$            IPC       IPC Service (Samba 4.7.1)
            vol2            Disk      shared volume 2
    Reconnecting with SMB1 for workgroup listing.
    Anonymous login successful

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

            Workgroup            Master
            ---------            -------
    [root@node7 /mnt]#smbclient -U tom //192.168.137.56/vol2
    Enter SAMBA\tom‘s password: 
    Try "help" to get a list of possible commands.
    smb: \> lcd /etc
    smb: \> put issue
    NT_STATUS_ACCESS_DENIED opening remote file \issue
    smb: \> 

在服務器端給共享目錄添加rwx權限,後續在客戶端測試能否可寫
    [root@node6 /data]#setfacl -m u:tom:rwx /data/volume2/

客戶端測試:
    [root@node7 /mnt]#smbclient -U tom //192.168.137.56/vol2
    Enter SAMBA\tom‘s password: 
    Try "help" to get a list of possible commands.
    smb: \> lcd /etc/
    smb: \> put issue
    NT_STATUS_ACCESS_DENIED opening remote file \issue
    smb: \>     

需要在服務器上修改配置文件加上寫權限,這次只給定tom用戶寫權限,其它用戶是照樣寫不進的
    [vol2]
            comment = shared volume 2
            path = /data/volume2
            writable = no
            write list = tom
重新加載服務
[root@node6 /datasystemctl reload smb 

在客戶端上測試tom用戶
[root@node7 /mnt]#smbclient -U tom //192.168.137.56/vol2
Enter SAMBA\tom‘‘s password: 
Try "help" to get a list of possible commands.
smb: \> lcd /etc/
smb: \> put issue
putting file issue as \issue (5.6 kb/s) (average 5.6 kb/s)
smb: \> rm issue 
smb: \> ls

基於組的測試
    1、創建組
    [root@node6 /data]#groupadd smbusers
    2、把用戶加進組
    [root@node6 /data]#usermod -a -G smbusers ilinux
    [root@node6 /data]#id ilinux
    uid=1001(ilinux) gid=1001(ilinux) groups=1001(ilinux),1006(smbusers)
    3、把共享目錄的權限也賦給這個組
    [root@node6 /data]#setfacl -m g:smbusers:rwx /data/volume2
    [root@node6 /data]#getfacl !$
    getfacl /data/volume2
    getfacl: Removing leading ‘/‘ from absolute path names
    # file: data/volume2
    # owner: root
    # group: root
    user::rwx
    user:tom:rwx
    group::r-x
    group:smbusers:rwx
    mask::rwx
    other::r-x
    4、配置smb文件   
    [vol2]
            comment = shared volume 2
            path = /data/volume2
            write list = tom @smbusers

    5、重新加載服務
    [root@node6 /data]#systemctl reload smb

    6、測試smbusers組中的ilinux用戶是否有寫功能
    [root@node7 /mnt]#smbclient -U ilinux //192.168.137.56/vol2
    Enter SAMBA\ilinux‘‘s password: 
    Try "help" to get a list of possible commands.
    smb: \> lcd /etc/
    smb: \> put fstab 
    putting file fstab as \fstab (290.5 kb/s) (average 290.5 kb/s)
    smb: \> 

網絡文件共享服務-Samba