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使用者,則解掛之後重新掛載