samba實現跨平台文件共享


前言: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。

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM