前言:Linux/Unix主機之間實現文件共享我們可以使用NFS,那么,Linux/Unix和Windows主機之間共享文件怎么實現呢,samba就是解決這個問題的。
Windows網上鄰居依賴的協議:
NetBIOS 通信協議,無法跨越路由器,samba和NetBIOS關系類似於NFS之於RPC;
CIFS 和NFS類似的文件系統,CIFS最常見的用途就是網上鄰居,SMB;
Winbindd 讓Linux主機加入Windows AD域,AD域使用的LDAP服務器
LDAP(Linux上使用Opneldap)
Windows上訪問共享文件使用UNC路徑:\\IP\共享名
如果在Linux上實現了上述協議,那么Linux就可以和Windows文件共享了,Linux上使用samba服務來實現。
實現windows訪問Linux共享文件:
(1)samba用戶控制:
它使用系統用戶,密碼由samba單獨控制。
(2)軟件安裝:
yum -y install samba.x86_64 samba-client.x86_64 samba-common.x86_64
默認會安裝winbind服務,這里我們不做配置。
執行事務
正在安裝 : libtalloc-2.1.5-1.el6_7.x86_64 1/7
正在安裝 : libtevent-0.9.26-2.el6_7.x86_64 2/7
正在安裝 : samba-common-3.6.23-36.el6_8.x86_64 3/7
正在安裝 : samba-winbind-3.6.23-36.el6_8.x86_64 4/7
正在安裝 : samba-winbind-clients-3.6.23-36.el6_8.x86_64 5/7
正在安裝 : samba-3.6.23-36.el6_8.x86_64 6/7
正在安裝 : samba-client-3.6.23-36.el6_8.x86_64 7/7
(3)samba進程:
nmbd:管理工作組,NetBIOS Name等解析,udp 137,138
smbd:管理samba主機共享目錄,文件與打印機等,tcp 139,445
如果加入winbind,會啟動winbind
服務控制腳本:/etc/rc.d/init.d/smb
(4)samba配置文件:
/etc/samba/
smb.conf 主
lmhosts windows上的特有的文件,用於名稱解析。host——wins——DNS——lmhosts
smbusers 把linux用戶映射成windows用戶
smb.conf #開頭是純注釋信息,;開頭的也是注釋,但他是可啟用的參數。 大致分為兩類: 全局配置:Global Settings 共享定義:Share Definitions Global Settings [global] ----Network Related Options workgroup = WORKGROUP server string = Samba Server Version %v 主機描述信息,一般不輸出 netbios name = MYSERVER 主機名 ----Logging Options log file = /var/log/samba/log.%m max log size = 50 ----Standalone Server Options 獨立服務進程 security = user 安全級別 passdb backend = tdbsam 用戶賬號和密碼存放格式,模擬的tdb格式存儲的sam文件 ----Browser Control Options 瀏覽控制信息,和domain相關 Share Definitions [homes] 用戶家目錄訪問控制 comment = Home Directories 注釋,說明信息 browseable = no 瀏覽權限 writable = yes [public] 共享名 comment = Network Logon Service path = /home/samba public = yes writable = yes read only = write list = user1,user2, @group,+group valid users = %S 白名單,限制那些用戶能訪問 invalid users = 例如:/share/test [tools] comment = Share Testing path = /share/test public = yes writable = yes 配置文件測試: testparm [root@myhost01 ~]# testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[printers]" Processing section "[tools]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 client signing = required idmap config * : backend = tdb cups options = raw [homes] comment = Home Directories read only = No browseable = No [printers] comment = All Printers path = /var/spool/samba printable = Yes print ok = Yes browseable = No [tools] comment = Share Testing path = /share/test read only = No guest ok = Yes
(5)啟動進程:
[root@myhost01 ~]# service smb start 啟動 SMB 服務: [確定] [root@myhost01 ~]# netstat -anp | grep smb tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1383/smbd tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1383/smbd tcp 0 0 :::139 :::* LISTEN 1383/smbd tcp 0 0 :::445 :::* LISTEN 1383/smbd unix 2 [ ] DGRAM 11487 1385/smbd unix 2 [ ] DGRAM 11470 1383/smbd
(6)添加用戶:
[root@myhost01 ~]# useradd samba_user [root@myhost01 ~]# id samba_user uid=501(samba_user) gid=501(samba_user) 組=501(samba_user) 把系統賬戶加入samba [root@myhost01 ~]# smbpasswd -a samba_user New SMB password: Retype new SMB password: Added user samba_user.
(7)共享文件權限:
訪問權限是由文件系統和samba服務共同控制。
修改文件系統權限:
[root@myhost01 ~]# ll -d /share/test/ drwxr-xr-x 2 root root 4096 3月 11 16:43 /share/test/ [root@myhost01 ~]# setfacl -m u:samba_user:rwx /share/test/
(8)Windows UNC訪問:
直接訪問主機:
\\192.168.31.168\ 輸入用戶名:samba_user 密碼:123456
顯示用戶家目錄及tools共享目錄,就像訪問本地目錄一樣,在家目錄和tools目錄創建文件:home_file.txt,tools.txt
在Linux驗證:可以看到在Windows創建的文件有執行權限,這個可以使用samba控制,具體用到時再來研究。
[root@myhost01 ~]# ll /home/samba_user/ 總用量 0 -rwxr--r-- 1 samba_user samba_user 0 3月 11 16:54 home_file.txt [root@myhost01 ~]# ll /share/test/ 總用量 0 -rwxr--r-- 1 samba_user samba_user 0 3月 11 16:57 tools.txt [root@myhost01 ~]#
單獨訪問tools: \\192.168.31.168\tools 可以在Windows中添加訪問位置。
到此,完成Windows訪問Linux/Unix文件功能。
實現Linux/Unix訪問Windows共享:
(1)Windows創建共享文件,添加win_user用戶
(2)Linux主機訪問共享:
smbclient //192.168.31.85/win_samba_share -U win_user
[samba_user@myhost01 ~]$ smbclient //192.168.31.85/win_samba_share -U win_user Enter win_user's password: Domain=[DESKTOP-VUBVLHE] OS=[Windows 10 Pro 14393] Server=[Windows 10 Pro 6.3] smb: \> ls . D 0 Sat Mar 11 18:29:23 2017 .. D 0 Sat Mar 11 18:29:23 2017 win_file.txt A 0 Sat Mar 11 18:25:51 2017 60603 blocks of size 524288. 33153 blocks available smb: \> mkdir myfile smb: \> ls . D 0 Sat Mar 11 18:43:55 2017 .. D 0 Sat Mar 11 18:43:55 2017 myfile D 0 Sat Mar 11 18:43:55 2017 win_file.txt A 0 Sat Mar 11 18:25:51 2017 60603 blocks of size 524288. 33153 blocks available smb: \> rmdir win_file.txt NT_STATUS_NOT_A_DIRECTORY removing remote directory file \win_file.txt smb: \> rm win_file.txt smb: \> ls . D 0 Sat Mar 11 18:44:30 2017 .. D 0 Sat Mar 11 18:44:30 2017 myfile D 0 Sat Mar 11 18:43:55 2017 60603 blocks of size 524288. 33153 blocks available smb: \>
(3)掛載至/mnt/win_dir:
確保安裝cifs-utils:yum install cifs-utils.x86_64 -y
[root@myhost01 ~]# mount -t cifs //192.168.31.85/win_samba_share /mnt/win_dir/ -o username=win_user Password: [root@myhost01 ~]# df -h 文件系統 容量 已用 可用 已用%% 掛載點 /dev/sda3 20G 2.0G 17G 11% / tmpfs 699M 0 699M 0% /dev/shm /dev/sda1 97M 28M 64M 31% /boot //192.168.31.85/win_samba_share 30G 14G 17G 46% /mnt/win_dir [root@myhost01 ~]# cd /mnt/win_dir/ [root@myhost01 win_dir]# ls myfile 新建文本文檔.txt [root@myhost01 win_dir]# touch abc [root@myhost01 win_dir]# ll 總用量 0 -rwxr-xr-x 1 root root 0 3月 11 18:51 abc drwxr-xr-x 1 root root 0 3月 11 18:43 myfile -rwxr-xr-x 1 root root 0 3月 11 18:48 新建文本文檔.txt 加入開機自動掛載: [root@myhost01 mnt]# vim /etc/samba/cred.passwd [root@myhost01 mnt]# chmod og=--- /etc/samba/cred.passwd [root@myhost01 mnt]# ll /etc/samba/cred.passwd -rw------- 1 root root 34 3月 11 18:56 /etc/samba/cred.passwd [root@myhost01 mnt]# cat /etc/samba/cred.passwd username=win_user password=123456 [root@myhost01 mnt]# umount /mnt/win_dir/ [root@myhost01 mnt]# df -h 文件系統 容量 已用 可用 已用%% 掛載點 /dev/sda3 20G 2.0G 17G 11% / tmpfs 699M 0 699M 0% /dev/shm /dev/sda1 97M 28M 64M 31% /boot [root@myhost01 mnt]# mount -a [root@myhost01 mnt]# df -h 文件系統 容量 已用 可用 已用%% 掛載點 /dev/sda3 20G 2.0G 17G 11% / tmpfs 699M 0 699M 0% /dev/shm /dev/sda1 97M 28M 64M 31% /boot //192.168.31.85/win_samba_share 30G 14G 17G 46% /mnt/win_dir
注意:開機自動掛載,編輯fstab,為了不讓密碼直接寫入fstab,添加密碼到:/etc/samba/cred.passwd,修改權限600
//192.168.31.85/win_samba_share /mnt/win_dir cifs credentials=/etc/samba/cred.passwd 0 0
到此,完成Linux對Windows文件共享的訪問。
Linux/Unix之間相互訪問:
和訪問Windows相似,掛載到文件系統也一樣,這里不再贅述。
[zdjiang@myhost01 ~]$ smbclient //192.168.31.168/tools -U samba_user Enter samba_user's password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8] smb: \> ls . D 0 Sat Mar 11 16:57:11 2017 .. D 0 Sat Mar 11 16:43:10 2017 tools.txt A 0 Sat Mar 11 16:57:04 2017 39109 blocks of size 524288. 33197 blocks available smb: \> mkdir jiang smb: \> ls . D 0 Sat Mar 11 16:57:11 2017 .. D 0 Sat Mar 11 16:43:10 2017 jiang D 0 Sat Mar 11 19:44:51 2017 tools.txt A 0 Sat Mar 11 16:57:04 2017 39109 blocks of size 524288. 33197 blocks available smb: \> rmdir jiang smb: \>
samba:基於IP的訪問控制
(1)iptables:
139,445 TCP
138,137 UDP
(2)samba本身:
----- Network Related Options ------
hosts allow = 127. 192.168.12. 192.168.13. 注意后面的"."
samba-swat:
使用web頁面來配置samba web GUI
(1)安裝:yum -y install samba-swat.x86_64
正在安裝:samba-swat是瞬時進程,依賴於超級守護進程xinetd samba-swat x86_64 3.6.23-36.el6_8 updates 7.4 M 為依賴而安裝: xinetd x86_64 2:2.3.14-40.el6 base 122 k ....... 基於 xinetd 的服務: chargen-dgram: 關閉 chargen-stream: 關閉 daytime-dgram: 關閉 daytime-stream: 關閉 discard-dgram: 關閉 discard-stream: 關閉 echo-dgram: 關閉 echo-stream: 關閉 rsync: 關閉 swat: 關閉 tcpmux-server: 關閉 time-dgram: 關閉 time-stream: 關閉 [root@myhost01 mnt]# chkconfig swat on [root@myhost01 mnt]# service xinetd restart 停止 xinetd: [確定] 正在啟動 xinetd: [確定] #每個瞬時進程在/etc/xinetd.d/下有配置文件 [root@myhost01 mnt]# cat /etc/xinetd.d/swat # default: off # description: SWAT is the Samba Web Admin Tool. Use swat \ # to configure your Samba server. To use SWAT, \ # connect to port 901 with your favorite web browser. service swat { disable = no port = 901 socket_type = stream #tcp wait = no #多用戶訪問,是否等待 only_from = 192.168.31.0/24 #主機訪問控制 user = root server = /usr/sbin/swat log_on_failure += USERID } [root@myhost01 mnt]# netstat -tlnp | grep xinetd tcp 0 0 :::901 :::* LISTEN 2255/xinetd
(2)瀏覽器訪問
瀏覽器訪問192.168.31.168:901即可,注意,第一次訪問需要使用系統管理員賬戶,注意安全防護,登陸之后更改管理員賬戶和密碼。
它控制進程的狀態,展示目前文件共享情況,訪問記錄等。
還記得上面windows訪問Linux創建文件后,文件權限問題么,這里可以進行修改:
其他保存后,系統會自動覆蓋/etc/samba/smb.conf文件,更多的使用方法,有興趣的可以去探索。
總結:Linux/Unix和windows主機之間文件共享,samba給我們提供很好的解決方案,配置時,注意權限控制,swat讓我們能夠使用WEB頁面配置,控制服務的開啟和關閉,使我們更好的去管理samba。