大家都知道ftp是跨平臺的服務,但是不能在線修改,編輯,只能上傳、下載。而nfs是unix網絡文件系統,它可以將目錄遠程掛載到服務器上,但是不能跨平臺。而samba彌補這兩種服務的不足,它不僅實現了linux與windows 跨平臺文件共享,而且也可以實現掛載。
一、samba服務簡介
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。
二、samb服務基礎
軟件包:samba
Samba-client 客戶端軟件
samba-common 通用軟件
cifs-utils smb客戶端工具
協議:SMP(TCP139)CIFS(445)
配置文件路徑:/etc/samba/smb.conf
所需服務器:centos7 (172.18.254.254)
三、samba服務器的配置步驟
1、安裝軟件
[root@localhost ~]# yum -y install samba
2、起服務
[root@localhost ~]# systemctl restart smb
3、samba帳號的管理
samba用戶:a、提前建立同名的系統用戶(可不設置密碼)
b、採用獨立於系統的密碼
管理工具:pdbedit
添加用戶:-a
查詢用戶:-L
刪除用戶:-x
[root@localhost ~]# systemctl restart smb [root@localhost ~]# useradd -s /sbin/nologin smb1 [root@localhost ~]# smbpasswd -a smb1 New SMB password: Retype new SMB password: Added user smb1. [root@localhost ~]# pdbedit -L //查看系統中所有的smb賬戶 smb1:2002:
4、配置文件及參數
[root@svr7 ~]# vim /etc/samba/smb.conf [global] //全局配置 workgroup = MYGROUP [homes] //家目錄共享 [printers] //打印機共享 [samba] path = /smb/ //共享目錄路徑 public = yes|no //默認no;公用的 browseable = yes|no //默認yes;是否可以瀏覽 read only = yes|no //默認yes;只讀 writable = yes|no //默認yes;可寫 write list = user //默認無;可寫入的用戶列表 valid users = user,user1//默認所有用戶;有效的用戶列表 hosts allow = 客戶地址 //允許的客戶機地址 hosts deny = 客戶地址 //禁止的客戶機地址 comment = 註釋 //說明
5、修改用戶對目錄的讀寫執行權限
[root@localhost ~]# mkdir /smb [root@localhost ~]# setfacl -m u:smb1:rwx /smb
6、SELinux對samba共享的保護
a、用getseboolbool查看selinux開關
[root@localhost ~]# getsebool -a|grep samba_export samba_export_all_ro --> off samba_export_all_rw --> off
b、用setsebool控制SELinux開關
[root@localhost ~]# setsebool -P samba_export_all_ro=on [root@localhost ~]# setsebool -P samba_export_all_rw=on
四、客戶端訪問共享目錄
所需軟件包:samba-client
1、列出共享資源:smbclient -L 服務器地址
[root@centos6 ~]#smbclient -L 172.18.254.254 Enter root's password: //匿名登錄,可以不輸密碼,直接回車 Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.7.1) Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Server Comment --------- ------- Workgroup Master --------- -------
注意:在沒有配置主配置文件的情況下,用用戶登錄時,會登錄到用戶的家目錄。
[root@localhost ~]# smbclient -L //172.18.254.254 -U smb1%centos Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.7.1) smb1 Disk Home Directories Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- -------
2、連接到目標主機的共享目錄
[root@centos6 ~]#smbclient //172.18.250.55/leifengta -U xuxian Enter xuxian's password: Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.7.1] smb: \> ls . D 0 Mon Oct 8 20:52:38 2018 .. D 0 Mon Oct 8 20:14:25 2018 xuxian.txt A 3 Mon Oct 8 20:45:52 2018 lost+found D 0 Mon Oct 8 19:16:01 2018 suzhen.txt A 12 Mon Oct 8 20:45:19 2018 aquota.user 7168 Mon Oct 8 20:11:47 2018 2.samba.avi A 396617646 Mon Oct 8 18:45:48 2018 51200 blocks of size 4096. 51199 blocks available smb: \>
五、配置過程中可能遇到的問題
1、客戶端登錄samba時出現以下提示:
session setup failed: NT_STATUS_LOGON_FAILURE
該錯誤提示表示用戶有誤,可能是用戶不存在,也可能是密碼錯誤,或者只是在samba用戶和系統用戶及密碼出現錯誤,總之就是用戶和密碼的問題。
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
該錯誤表示壞的網絡名,表示共享目錄不存在,或共享目錄權限問題
可用setfacl -m給用戶加權限
Connection to 192.168.4.7 failed (Error NT_STATUS_HOST_UNREACHABLE)
2、客戶端連接到samba共享目錄時出現以下提示:
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*
文件權限不足,或者存在selinux限制
調整文件的權限,並打開selinux開關
3、執行setsebool -P 操作啓用SElinux開關參數時失敗,提示:Killed
內存不足,而且交換空間也不足
添加交換分區(1GB)在重試
六、多用戶SMB掛載
SAMBA共享默認只支持同時用一個用戶掛載SMB共享 ,但CentOS7中可啓用多用戶掛載功能 ,客戶端掛載samba共享目錄後,在客戶端登錄的不同用戶訪問同一個 samba的掛載點,可獲得不同權限 。
實驗:多用戶smb掛載
服務端:
1.新建兩個smb用戶,修改其密碼
[root@localhost ~]# useradd -s /sbin/nologin xiaoma [root@localhost ~]# useradd -s /sbin/nologin xiaomao [root@localhost ~]# smbpasswd -a xiaoma New SMB password: Retype new SMB password: Added user xiaoma. [root@localhost ~]# smbpasswd -a xiaomao New SMB password: Retype new SMB password: Added user xiaomao.
2.新建一個共享目錄,並修改它的contect值及設置acl權限
[root@localhost ~]# mkdir /app/smbshared [root@localhost ~]# chcon -t samba_share_t /app/smbshared/ [root@localhost ~]# setfacl -m u:xiaoma:rwx /app/smbshared/ [root@localhost ~]# setfacl -m u:xiaomao:rwx /app/smbshared/
3.修改samba主配置文件
[root@localhost ~]# vim /etc/samba/smb.conf [gongxiang] comment = My Gongxiang path = /app/smbshared browseable = yes writeable = no write list = xiaoma,xiaomao public = yes
4.重啓服務
[root@localhost ~]# systemctl restart smb
客戶端:
1、新建兩個用戶
[root@localhost ~]# useradd xiaoma [root@localhost ~]# useradd xiaomao
2、編輯身份認證文件
[root@localhost ~]# vim /etc/multiuser username=smb1 password=centos
3、開機自動掛載到服務器上
[root@localhost ~]# vim /etc/fstab //172.18.250.55/gongxiang /mnt/ cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0 [root@localhost ~]# mount -a
credentials=/etc/multiuser 指定掛載時用到的用戶身份認證文件
multiuser 支持多用戶認證
sec=ntlmssp 認證方式爲smb認證
4、切換用戶,進入到掛載的目錄下,
[root@localhost ~]# su - xiaoma [xiaoma@localhost ~]$ cd /mnt [xiaoma@localhost mnt]$ ls ls: reading directory .: Permission denied //因爲沒有做smb的認證所以無法訪問smb共享 [xiaoma@localhost mnt]$ cifscreds add 172.18.250.55 //對用戶進行smb的認證 Password:
5、測試
[xiaoma@localhost mnt]$ ls [xiaoma@localhost mnt]$ touch masai [xiaoma@localhost mnt]$ ll total 0 -rw-r--r--. 1 1009 1010 0 Oct 11 09:56 masai [xiaoma@localhost mnt]$ exit logout
七、一個samba的綜合性實驗
實驗:創建baisuzhen,xuxian,fahai,xiaoqing,xushilin,guanyin 六個用戶
1.要求以上六個用戶都可以瀏覽並訪問目標主機的共享目錄leifengta,匿名用戶可訪問但不可瀏覽。大小2GB。未來可自動擴展
2.baisuzhen,xuxian,xushilin 可以在該共享目錄下創建及刪除文件,且彼此之間創建的文件,可以相互修改,其他用戶不可創建文件。
3.xuxian,xushilin最多能各自創建200M的數據,且不能刪除其他人創建的文件,baisuzhen不受限制.
4.六個用戶各自都 有一個以自己名字爲名的共享目錄,僅自己可見可訪問可創建,他人不可見,guanyin對所有目錄均有完整權限。
1、創建六個用戶,並設置密碼
[root@localhost ~]# for username in baisuzhen xuxian fahai xiaoqing xushilin guanyin ;do useradd -s /sbin/nologin $username ; (echo redhat;echo redhat) |smbpasswd -a $username ;done
2、創建共享目錄,建議用邏輯卷掛載
[root@localhost ~]# mkdir /app/baishezhuan [root@localhost ~]# fdisk /dev/sda [root@localhost ~]# partprobe /dev/sda [root@localhost ~]# pvcreate /dev/sda6 [root@localhost ~]# vgcreate vgbaishe /dev/sda6 [root@localhost ~]# lvcreate -l +100%FREE -n lvbaishe vgbaishe [root@localhost ~]# mkfs.ext4 /dev/vgbaishe/lvbaishe [root@localhost ~]# vim /etc/fstab /dev/vgbaishe/lvbaishe /app/baishezhuan ext4 defaults,usrquota 0 0 [root@localhost ~]# mount -a
3、爲baisuzhen,xuxian,xushilin三個用戶設置acl權限,使其可以在共享目錄下創建刪除文件
[root@localhost ~]# setfacl -m u:baisuzhen:rwx /app/baishezhuan/ [root@localhost ~]# setfacl -m u:xuxian:rwx /app/baishezhuan/ [root@localhost ~]# setfacl -m u:xushilin:rwx /app/baishezhuan/
4、配置samba的主配置文件
[root@localhost ~]#vim /etc/samba/smb.conf [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw config file = /etc/samba/conf.d/%U.conf //子配置文件 [leifengta] comment = xi hu leifengta path = /app/baishezhuan public = yes //可訪問 browseable = no //不能瀏覽 writeable = no //不可寫
5、將baisuzhen,xuxian,xushilin三個用戶加入到同一個組中,使彼此之間創建的文件,可以相互修改,其他用戶不可創建文件
[root@localhost conf.d]# groupadd baishezhuan [root@localhost conf.d]# usermod -aG baishezhuan baisuzhen [root@localhost conf.d]# usermod -aG baishezhuan xuxian [root@localhost conf.d]# usermod -aG baishezhuan xushilin [root@localhost conf.d]# chgrp baishezhuan /app/baishezhuan [root@localhost conf.d]# chmod g+s /app/baishezhuan/ //對一個目錄作用了sgid權限後,任何人在該目錄下創建的文件的所屬組,均與該目錄的所屬組相同。 [root@localhost conf.d]# chown baisuzhen /app/baishezhuan/ [root@localhost conf.d]# chmod o+t /app/baishezhuan/ //對一個目錄作用了stickey權限後,該目錄下文件僅其所屬人和目錄所屬人及root可刪除
6、創建與六個用戶名字相同的目錄,並編輯子配置文件
[root@localhost samba]# mkdir conf.d [root@localhost samba]# cd conf.d/ [root@localhost conf.d]# vim baisuzhen.conf [leifengta] comment = xi hu leifengta path = /app/baishezhuan browseable = yes writeable = yes force create mode = 0664 [baisuzhen] comment = baisuzhen path = /app/common/baisuzhen browseable = yes writeable = yes [root@localhost conf.d]# vim xiaoqing.conf [leifengta] comment = xi hu leifengta path = /app/baishezhuan browseable = yes writeable = no [xiaoqing] comment = xiaoqing path = /app/common/xiaoqing browseable = yes writeable = yes [root@localhost conf.d]# cat guanyin.conf [leifengta] comment = xi hu leifengta path = /app/baishezhuan browseable = yes writeable = no [baisuzhen] comment = baisuzhen path = /app/common/baisuzhen browseable = yes writeable = yes [fahai] comment = fahai path = /app/common/fahai browseable = yes writeable = yes [xiaoqing] comment = xiaoqing path = /app/common/xiaoqing browseable = yes writeable = yes [xushilin] path = /app/common/xushilin browseable = yes writeable = yes [xuxian] comment = xuxian path = /app/common/xuxian browseable = yes writeable = yes [guanyin] comment = guanyin path = /app/common/guanyin browseable = yes writeable = yes
7、 爲xuxian,xushilin設置quota
[root@localhost ~]# quotacheck -cum /app/baishezhuan/ //生成quota數據庫 [root@localhost ~]# quotaon /app/baishezhuan/ //開啓quota [root@localhost ~]# edquota -u xuxian Filesystem blocks soft hard inodes soft hard /dev/mapper/vgbaishe-lvbaishe 4 0 200M 1 0 0 [root@localhost ~]# edquota -p xuxian xushilin [root@localhost common]# mkdir baisuzhen xiaoqing fahai xuxian xushilin guanyin
8、設置共享目錄所屬人,使其僅自己可見可訪問可創建,他人不可見,guanyin對所有目錄均有完整權限
[root@localhost common]# chown baisuzhen baisuzhen/ [root@localhost common]# chown fahai fahai/ [root@localhost common]# chown guanyin guanyin/ [root@localhost common]# chown xiaoqing xiaoqing/ [root@localhost common]# chown xushilin xushilin/ [root@localhost common]# chown xuxian xuxian/ [root@localhost common]# chmod 700 * [root@localhost common]# setfacl -m u:guanyin:rwx *
9、測試