1. 程式人生 > >通過Samba實現Linux與Windows間的文件共享

通過Samba實現Linux與Windows間的文件共享

一個 主機 是否 ios協議 har 資源共享 沒有 printer int

Samba

Samba,是用來讓Linux系列的操作系統與Windows操作系統的SMB/CIFS(Server Message Block/Common Internet File System)網絡協議做連結的自由軟件,最大的功能就是可以用於Linux與windows系統直接的文件共享和打印共享(Linux與Linux之間的資源共享更多用NFS實現)。
組成Samba運行的有兩個服務,一個是SMB,另一個是NetBIOS。SMB是Samba的核心啟動服務,主要負責建立Samba服務器與Samba客戶機之間的對話,驗證用戶身份並提供對文件和打印系統的訪問,監聽139 TCP端口(增強版SMB協議CIFS直接監聽445端口,CIFS不需要NetBIOS協議);而NetBIOS服務是負責解析,提供瀏覽網絡上的共享資源列表,監聽UDP端口137和138。

實現Samba

  • 安裝Samba:
[root@smaba ~]# lsb_release -r
Release:    7.2.1511
[root@smaba ~]# yum -y install samba
[root@smaba ~]# rpm -qi samba
Name        : samba
Epoch       : 0
Version     : 4.7.1
Release     : 6.el7
Architecture: x86_64
[root@smaba ~]# systemctl stop firewalld.service
[root@smaba ~]# setenforce 0
  • Samba相關配置:
  主配置文件:/etc/samba/smb.conf
  主程序:nmbd(NetBIOS Name Server Daemon)、smbd(SMB/CIFS Daemon)
  Unit文件:smb.service和nmb.service
其中
/etc/samba/smb.conf文件常見參數:   全局配置: [global] workgroup=MYGROUP #工作組名 server string=Samba Server Version %v #服務器信息介紹 netbios name=MYSERVER #用netbios名來指定服務 interfaces=[interface1 interface2...|address1 address2...] #用於讓samba服務監聽多個網絡接口或IP hosts allow=[address1 address2...] #指定允許訪問的主機IP log file=/var/log/samba/log.%m #指定日誌存放路徑,%m為來訪的主機名 max log size=50 #定義日誌文件最大容量為50K security=user #設置samba服務的安全認證方式為user passdb backend=tdbsam #定義用戶後臺的類型為tdbsam,其他類型還有smbpasswd、ldapsam load prints=yes #設置是否共享打印機 cups options=raw #打印機選項   其它配置: [homes]:為每個samba用戶定義其是否能夠通過samba服務訪問自己的家目錄 [printers]:定義打印服務 [自定義共享目錄]:定義共享的文件系統   常用指令: comment=STRING:註釋 path=/PATH/TO/FILENAME:當前共享所映射的文件系統路徑 browseable=YES:是否可瀏覽,指是否可被所有用戶查看 pulibc=YES:是否允許匿名訪問 browseable=No:是否公開目錄 writable=YES:是否可寫 read only=no|yes:是否為只讀 write list=/PATH/TO/user_list|USERNAME:擁有寫權限的用戶列表
directory mask=MASK:新建目錄的權限值
create mask=MASK:新建文件的權限值   更多參數可通過命令 man smb.conf
查看。
  • 自定義共享目錄:
[root@samba ~]# vim /etc/samba/smb.conf
[shared_dir]
        comment=shared dir through samba
        path=/samba_dir
        writable=yes
[root@samba ~]# mkdir /samba_dir  #創建共享文件
[root@samba ~]# testparm  #校驗/etc/samba/smb.conf文件的配置是否正確
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[shared_dir]"
Loaded services file OK.
Server role: ROLE_STANDALONE
  • samba服務默認的驗證模式為user,因此需要創建samba用戶數據庫:
samba帳號必須存在於Linux系統中(/etc/passwd),而其密碼卻需要單獨維護。創建samba用戶數據庫有專門的命令:pdbedit 和 smbpasswd。
  pdbedit [options] account
  options:
      -a USERNAME:創建samba用戶
      -x:刪除samba用戶
      -L:列出samba用戶列表
      -Lv:列出用戶詳細信息列表
  smbpasswd [options] USERNAME
  options:
      -a:添加賬號
      -x:刪除賬號
      -d:禁用賬號
      -e:啟用賬號
[root@samba ~]# useradd samba_user1
[root@samba ~]# pdbedit -a samba_user1
new password:
retype new password:
Unix username:        samba_user1
[root@samba ~]# useradd samba_user2
[root@samba ~]# smbpasswd -a samba_user2
New SMB password:
Retype new SMB password:
Added user samba_user2.
  • windows主機測試:
# 啟動服務
[root@samba ~]# systemctl start smb.service
[root@samba ~]# systemctl start nmb.service
# 客戶端測試
技術分享圖片 技術分享圖片
  • 可以看到,用戶登錄後無法在/samba_dir下創建目錄,明明已經設置了 writable=yes。這是因/samba_dir目錄的屬主和屬組均為root,其他用戶沒有寫權限。進行如下修改:
[root@samba ~]# groupadd samba
[root@samba ~]# usermod -G samba samba_user1
[root@samba ~]# usermod -G samba samba_user2
[root@samba ~]# id samba_user1
uid=1005(samba_user1) gid=1005(samba_user1) groups=1005(samba_user1),1007(samba)
[root@samba ~]# id samba_user2
uid=1006(samba_user2) gid=1006(samba_user2) groups=1006(samba_user2),1007(samba)
[root@samba ~]# ll -d /samba_dir
drwxr-xr-x. 2 root root 6 Jun 29 17:19 /samba_dir
[root@samba ~]# chown :samba /samba_dir
[root@samba ~]# chmod g+w /samba_dir
[root@samba ~]# ll -d /samba_dir
drwxrwxr-x. 2 root samba 6 Jun 29 17:19 /samba_dir
  • windows主機重新測試:

技術分享圖片

linux主機進行測試:

# 掛載訪問。註意,此處訪問的是/shared_dir,配置文件/etc/samba/smb.conf中 [] 定義的名稱。
[root@client ~]# mount -t cifs //192.168.4.119/shared_dir /mnt -o username=samba_user1
Password for samba_user1@//192.168.4.119/shared_dir:  ******
[root@client ~]# ls /mnt
hello.txt  test
[root@client ~]# touch /mnt/hello
[root@client ~]# ls /mnt
hello  hello.txt  test
# 使用smbclient客戶端訪問
[root@client ~]# yum install -y samba-client
[root@client ~]# smbclient //192.168.4.119/shared_dir -U samba_user2  #交互式訪問
Enter SAMBA\samba_user2‘s password: 
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jul  3 17:07:35 2018
  ..                                 DR        0  Fri Jun 29 17:19:56 2018
  test                                D        0  Tue Jul  3 15:42:01 2018
  hello.txt                           A        0  Tue Jul  3 17:07:31 2018
  hello                               N        0  Tue Jul  3 17:07:35 2018

        121055488 blocks of size 1024. 116173648 blocks available
smb: \> 
[root@client ~]# smbclient -L //192.168.4.119/shared_dir -U samba_user1  #查看共享情況
Enter SAMBA\samba_user1‘s password: 

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    shared_dir      Disk      shared dir through samba
    IPC$            IPC       IPC Service (Samba 4.7.1)
    samba_user1     Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

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

    Workgroup            Master
    ---------            -------
    SAMBA                HAPPINESS
    WORKGROUP            DESKTOP-L064DV0

通過Samba實現Linux與Windows間的文件共享