1. 程式人生 > >LINUX檔案伺服器之一:SAMBA伺服器

LINUX檔案伺服器之一:SAMBA伺服器

如果區域網中既有Windows也有Linux,並且想要共享檔案系統的話,我們該怎麼辦呢???

答案就是:使用SAMBA伺服器!!!!SAMBA可以讓Linux加入Windows的網路上的芳鄰支援,讓不同的平臺可以共享檔案,非常好用!!!

那麼,什麼是SAMBA呢????

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟體,由伺服器及客戶端程式構成,提供CIFS協議實現檔案共享通用internet檔案系統,也稱為SMB。

SMB(Server Messages Block,資訊服務塊)是一種在區域網上共享檔案和印表機的一種通訊協議, 它為區域網內的不同計算機之間提供檔案及印表機等資源的共享服務。

SMB協議是客戶機/伺服器型協議,客戶機通過該協議可以訪問伺服器上的共享檔案系統、 印表機及其他資源。通過設定“NetBIOS over TCP/IP”使得Samba不但能與區域網絡主機分享資源,還能與全世界的電腦分享資源。

 

 

如何在LINUX下搭建SAMBA服務,並模擬Windows客戶端訪問呢????

首先我們要先配置好我們的實驗環境:
我們用兩臺虛擬機器模擬搭建伺服器和客戶端,設定服務端ip=172.25.254.222,客戶端ip=172.25.254.122,並配置好yum源,方便我們接下來搭建服務時,安裝各種安裝包。

配置好實驗環境,接下來就開始搭建SAMBA服務吧!!

 

配置服務端


第一步:安裝samba服務,samba客戶端以及samba-common

yum install samba samba-common samba-client -y

##samba 這個軟體主要提供SMB伺服器所需要的各項服務程式
##samba-common 主要提供伺服器和客戶端都會用到的一些資料,比如說smb.conf以及語法檢測命令等。

注意:我們可以不在服務端安裝samba-client,但是為了方便作後面的實驗,我們最好把它也安裝上

 

第二步:啟動服務,並檢視服務狀態

systemctl start smb
systemctl status smb

 

第三步:將本地使用者新增到smb使用者,並檢視

useradd westos
smbpasswd -a westos    ##新增smb使用者
pdbedit -L    ##檢視smb使用者



第四步:設定selinux為警告模式並關閉火牆

getenforce       ##檢視selinux的模式
setenforce  0    ##設定為警告模式
systemctl status firewalld
systemctl stop firewalld
systemctl status firewalld


 


 

 

配置客戶端

第一步:安裝samba客戶端

yum install samba-client -y

 檢視伺服器提供的目錄資源

smbclient -L //172.25.254.222    ##匿名檢視伺服器鎖提供的共享的目錄資源
smbclient -L //172.25.254.222 -U westos     ##檢視SMB使用者能夠嘗試訪問的資源

 

第二步:登陸samba伺服器,實現共享共享目錄/home/westos
注意:  不能匿名登陸,會報錯

smbclient //172.25.254.222/westos 

 

如何實現檔案系統共享???

第一種方式:

smbclient //172.25.254.222/westos -U westos      ##登陸samba伺服器


 

第二種方式:

mount -o username=westos,password=lee //172.25.254.122/westos /mnt


 

 


測試:在客戶端的/mnt下建立檔案,在服務端檢視客戶端上傳的檔案

touch file{1..5}   ##上傳檔案,可以在samba服務端看到

 

 

 

到此,我們的samba服務就搭建完成了,但是現在的服務是步安全的,任何主機都能夠通過smb使用者登入上我們的服務,這是很不安全的,那麼問題來落,我們該怎樣設定samba服務的許可權,使我們的伺服器變得安全呢????

 

samba許可權設定

 

1.如何設定哪些主機能夠訪問服務?


服務端

1.許可權設定,編輯  /etc/samba/smb.conf  檔案   

;       interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
;       hosts allow = 127. 192.168.12. 192.168.13.
        hosts allow = 172.25.254.222      ##允許哪些ip訪問samba
;       hosts deny =172.25.254.222       ##不允許哪些ip訪問


重啟服務,進行測試:
1.172.25.254.222測試

在檔案中我們給172.25.254.222這個ip對應的主機設定的許可權是可以訪問,我們的實驗結果也符合我們的預想!!

[[email protected] yum.repos.d]# smbclient //172.25.254.222/westos -U westos
Enter westos's password:
Domain=[WESTOS] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
  .                                   D        0  Fri Nov 23 22:54:29 2018
  ..                                  D        0  Fri Nov 23 22:54:29 2018
  .bash_logout                        H       18  Wed Jan 29 07:45:18 2014
  .bash_profile                       H      193  Wed Jan 29 07:45:18 2014
  .bashrc                             H      231  Wed Jan 29 07:45:18 2014
  .mozilla                           DH        0  Thu Jul 10 18:29:32 2014
  .config                            DH        0  Thu Jul 10 19:06:52 2014

        40913 blocks of size 262144. 28459 blocks available
smb: \> quit

 

 

若我們在檔案中我們給172.25.254.222這個ip對應的主機設定的許可權是不可以訪問,我們的實驗中訪問將會被拒絕!!

[[email protected] yum.repos.d]# smbclient  //172.25.254.222/westos -U westos
Enter westos's password:
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE

 

 


2.如何使客戶端訪問服務端自己建立的目錄????

編輯/etc/samba/smb.conf檔案

 [linux]    []中的內容表示客戶端能看到的名稱
 comment = westos dir share
 path = /westos     ##客戶端訪問的絕對路徑

注意:要先建立這個/westos目錄,否則會出現報錯

此時測試,會出現訪問被拒絕的錯誤

 

 這個時候我們去檢視selinux,會發現selinux=enforcing 

在selinux=enforcing的情況下,修改安全上下文

semanage fcontext -a -t samba_share_t '/westos(/.*)?'
restorecon -RvvF /westos      ##逐層重新整理安全上下文

 

 

再次測試:登入成功!!

smbclient //172.25.254.222/linux -U westos

 

 

3.如何使客戶端訪問服務端的系統目錄?????


注意:如果設定的目錄為系統目錄,不能更改安全上下文
編輯/etc/samba/smb.conf檔案

[opt]
comment=opt directory
path = /mnt

 開啟samba_export_all_ro on

setsebool -P samba_export_all_ro on


測試:
smbclient //172.25.254.122/opt -U westos

[[email protected] yum.repos.d]# smbclient //172.25.254.222/opt -U westos
Enter westos's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
  .                                   D        0  Fri Nov 23 23:49:55 2018
  ..                                  D        0  Fri Nov 23 23:00:54 2018
  file1                               N        0  Fri Nov 23 23:49:55 2018

        40913 blocks of size 262144. 28459 blocks available

smb: \> quit

 

 

4.其他許可權設定

[linux]    []中的內容表示客戶能看到的名稱
comment = westos dir share
path = /westos     ##客戶端訪問的絕對路徑
writable = yes     ##允許所有人寫
       注意:put上傳時,只能上傳當前路徑下的
write list = westos    ##允許誰寫 ##+/@westos  對組可寫
valid users  = westos          ##允許誰訪問服務
browseable=yes         ##是否可以看見linux,no時不能看見
admin users = student  ##student上傳檔案,檔案的使用者是root
guest ok = yes     ##允許匿名登陸
還要設定map to guest = bad user   ##將不合法的使用者定義為guest

 

注意:一定要更改許可權,否則會出現報錯

chmod 777 /westos 

測試結果如下:

(一)writable = yes     ##允許所有人寫

322         [linux]
323         comment = westos dir share
324         path = /westos
325         writable = yes

 

 

 

注意:put上傳時,只能上傳當前路徑下的

 

(二)write list = westos    ##允許誰寫 ##+/@westos  對組可寫

322         [linux]
323         comment = westos dir share
324         path = /westos
325 ;       writable = yes
326         write list = westos

我們在檔案中設定允許以westos身份登入共享時可寫

以lee身份進行登入共享時,不可寫



(三)valid users  = westos        ##允許誰訪問服務

322         [linux]
323         comment = westos dir share
324         path = /westos
325 ;       writable = yes
326         write list = westos
327         valid users = westos

 

 

(四)browseable=yes         ##是否可以看見linux,no時不能看見

322         [linux]
323         comment = westos dir share
324         path = /westos
325 ;       writable = yes
326         write list = westos
327         valid users = westos
328         browseable = yes

 

 

[[email protected] ~]# vim /etc/samba/smb.conf    改為no 看不見

[[email protected] ~]# vim /etc/samba/smb.conf    ###改為no

322         [linux]
323         comment = westos dir share
324         path = /westos
325 ;       writable = yes
326         write list = westos
327         valid users = westos
328         browseable = no

 


(五)admin users = westos ##westos上傳檔案,檔案的使用者是root

322         [linux]
323         comment = westos dir share
324         path = /westos
325 ;       writable = yes
326         write list = westos
327         valid users = westos
328         browseable = no
329         admin users = westos


 

 上傳檔案,並檢視檔案的所屬使用者

 

 


客戶端的效能控制


在客戶端沒有進行多使用者認證之前,在root使用者下,以samba使用者westos的身份進行登陸,可以進行上傳下載,切換到student使用者時也可以進行建立檔案,雖然會出現被拒絕的報錯,這樣很顯然是不合理的,我們要在客戶端也能夠不通使用者的許可權。

[[email protected] yum.repos.d]# mount //172.25.254.122/linux /mnt/ -o username=westos,password=lee
[[email protected] yum.repos.d]# cd /mnt
[[email protected] mnt]# ls
anaconda-ks.cfg  file1  file2
[[email protected] mnt]# su - student
Last login: Thu May 11 20:23:54 EDT 2017 on pts/0
[[email protected] ~]$ cd /mnt
[[email protected] mnt]$ ls
anaconda-ks.cfg  file1  file2
[[email protected] mnt]$ touch file3
touch: cannot touch ‘file3’: Permission denied
[[email protected] mnt]$ ls
anaconda-ks.cfg  file1  file2  file3
[[email protected] mnt]$ ll          ##實際上看到的是服務端/westos下的檔案
total 1024
-rwxr--r-- 1 root student 8619 Nov 24 01:18 anaconda-ks.cfg
-rw-r--r-- 1 root root       0 Nov 23 23:00 file1
-rw-r--r-- 1 root root       0 Nov 23 23:00 file2
-rw-r--r-- 1 1001    1001    0 Nov 24 02:05 file3

切換到student使用者下,

 

在服務端允許客戶端訪問samba服務後,客戶端並不想讓所有的使用者都可以訪問共享下來的目錄中的檔案,這個時候就需要在客戶端進行效能控制,即增加安全鎖,
samba安全鎖,限制沒有通過認證的客戶對samba服務的許可權,使得通過認證的使用者才能訪問共享目錄


注意:實驗之前先把匿名登入遮蔽掉,關閉匿名可訪問

第一步:安裝CIFS,模擬windows場景

yum install cifs-utils -y

CIFS 是一個新提出的協議,它使程式可以訪問遠端Internet計算機上的檔案並要求此計算機提供服務。CIFS 使用客戶/伺服器模式。客戶程式請求遠在伺服器上的伺服器程式為它提供服務。伺服器獲得請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議在區域網上用於伺服器檔案訪問和列印的協議。像SMB協議一樣,CIFS在高層執行,而不像TCP/IP協議那樣執行在底層。CIFS可以看做是應用程式協議如檔案傳輸協議超文字傳輸協議的一個實現。

 

第二步:解掛載

[[email protected] mnt]# df
Filesystem             1K-blocks    Used Available Use% Mounted on
/dev/vda1               10473900 3216184   7257716  31% /
devtmpfs                  469344       0    469344   0% /dev
tmpfs                     484932     140    484792   1% /dev/shm
tmpfs                     484932   12796    472136   3% /run
tmpfs                     484932       0    484932   0% /sys/fs/cgroup
/dev/mapper/vg0-vo        483670    2340    451839   1% /home
/dev/sr0                 3947824 3947824         0 100% /run/media/root/RHEL-7.2 Server.x86_64
//172.25.254.122/linux  10473900 3188616   7285284  31% /mnt

[[email protected] mnt]# cd ..
[[email protected] /]# umount /mnt
[[email protected] /]# df
Filesystem         1K-blocks    Used Available Use% Mounted on
/dev/vda1           10473900 3215924   7257976  31% /
devtmpfs              469344       0    469344   0% /dev
tmpfs                 484932     140    484792   1% /dev/shm
tmpfs                 484932   12796    472136   3% /run
tmpfs                 484932       0    484932   0% /sys/fs/cgroup
/dev/mapper/vg0-vo    483670    2340    451839   1% /home
/dev/sr0             3947824 3947824         0 100% /run/media/root/RHEL-7.2 Server.x86_64

第三步:編輯認證檔案/root/smbpass

[[email protected] /]# vim /root/smbpass
username=westos
password=lee

 

更改檔案許可權為600,只有超級使用者具有讀寫許可權

[[email protected] /]# chmod 600 /root/smbpass

掛載服務端samba使用者westos到客戶端root使用者/mnt上

[[email protected] /]# mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.254.122/linux /mnt

credentials=/root/smbpass/   ##指定本次root使用者掛載時候的認證檔案
sec=ntlmssp                  ##其他使用者做認證用到的認證策略程式
multiuser                    ##多使用者掛載模式

注意:root掛載的samba使用者westos

 

切換到student使用者下,掛載被拒絕,因為student使用者沒有經過認證,不能訪問共享目錄

認證使用者,student掛載amba使用者lee

 

注意:
如果想更換samba使用者,則解掛之後重新掛載