鄭州鄭州網(wǎng)站建設(shè)河南做網(wǎng)站公司哪家好seo建站還有市場(chǎng)嗎
一.常見的存儲(chǔ)類型
目前常見的存儲(chǔ)類型有 DAS,NAS,SAN 等,最主要的區(qū)別是硬盤存儲(chǔ)媒介是如何
于處理器連接的,以及處理器使用何種方式來(lái)訪問(wèn)磁盤,以及訪問(wèn)磁盤使用
的協(xié)議(網(wǎng)絡(luò)協(xié)議、I/O 協(xié)議)。
- 三種存儲(chǔ)類型如下
- 直連式存儲(chǔ):Direct-Attached Storage,簡(jiǎn)稱 DAS
- 網(wǎng)絡(luò)附加存儲(chǔ):Network-Attached Storage,簡(jiǎn)稱 NAS
- 存儲(chǔ)區(qū)域網(wǎng)絡(luò):Storage Area Network,簡(jiǎn)稱 SAN
1.1 DAS 類型的存儲(chǔ)
- DAS 存儲(chǔ)是最常見的一種存儲(chǔ)方式,尤其是在中小企業(yè)應(yīng)用中。PC 中的硬盤或只
有一個(gè)外部 SCSI 接口的 JBOD 都屬于 DAS 架構(gòu)。DAS 是指存儲(chǔ)設(shè)備直接連接到
服務(wù)器總線上,存儲(chǔ)設(shè)備只與一臺(tái)獨(dú)立的主機(jī)連接,其他主機(jī)不能使用這個(gè)存儲(chǔ)
設(shè)備。DAS 存儲(chǔ)設(shè)備與服務(wù)器主機(jī)之間的連接通道通常采用 SCSI 連接,DAS 存儲(chǔ)
設(shè)備主要是磁盤陣列(RAID: Redundant Arrays of Independent Disks)、磁盤簇
(JBOD:Just a Bunch Of Disks)等。
1.2 NAS 類型的存儲(chǔ)
- NAS 存儲(chǔ)就是存儲(chǔ)設(shè)備通過(guò)標(biāo)準(zhǔn)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)(比如以太網(wǎng))添加到一群計(jì)算
機(jī)上。與 DAS 以及 SAN 不同,NAS 是文件級(jí)的存儲(chǔ)方法。采用 NAS 較多的
功能是用來(lái)進(jìn)行文件共享。 - NAS 存儲(chǔ)也通常被稱為附加存儲(chǔ),顧名思義,就是存儲(chǔ)設(shè)備通過(guò)標(biāo)準(zhǔn)的網(wǎng)絡(luò)拓
撲結(jié)構(gòu)(例如以太網(wǎng))添加到一群計(jì)算機(jī)上。NAS 是文件級(jí)的存儲(chǔ)方法,它的重
點(diǎn)在于幫助工作組和部門級(jí)機(jī)構(gòu)解決迅速增加存儲(chǔ)容量的需求。如今更多的人
們采用 NAS 較多的功能是用來(lái)文檔共享、圖片共享、電影共享等等,而且隨著
云計(jì)算的發(fā)展,一些 NAS 廠商也推出了云存儲(chǔ)功能,大大方便了企業(yè)和人們等
個(gè)人用戶的使用。 - NAS 產(chǎn)品是真正即插即用的產(chǎn)品。NAS 設(shè)備一般支持多計(jì)算機(jī)平臺(tái),用戶通過(guò)
網(wǎng)絡(luò)支持協(xié)議可進(jìn)入相同的文檔,因而 NAS 設(shè)備無(wú)需改造即可用于混合
Unix/Windows NT 局域網(wǎng)內(nèi),同時(shí) NAS 的應(yīng)用非常靈活。但 NAS 有一個(gè)關(guān)
鍵性問(wèn)題,即備份過(guò)程中的帶寬消耗。與將備份數(shù)據(jù)流從 LAN 中轉(zhuǎn)移出去的
存儲(chǔ)區(qū)域網(wǎng)(SAN)不同,NAS 仍使用網(wǎng)絡(luò)進(jìn)行備份和恢復(fù)。NAS 的一個(gè)缺點(diǎn)
是它將存儲(chǔ)事務(wù)由并行 SCSI 連接轉(zhuǎn)移到了網(wǎng)絡(luò)上。這就是說(shuō) LAN 除了必須
處理正常的最終用戶傳輸流外,還必須處理包括備份操作的存儲(chǔ)磁盤請(qǐng)求。
1.3 SAN 類型的存儲(chǔ)
-
存儲(chǔ)區(qū)域網(wǎng)絡(luò),這個(gè)是通過(guò)光纖通道或以太網(wǎng)交換機(jī)連接存儲(chǔ)陣列和服務(wù)器主機(jī),
最后成為一個(gè)專用的存儲(chǔ)網(wǎng)絡(luò)。SAN 經(jīng)過(guò)十多年歷史的發(fā)展,已經(jīng)相當(dāng)成熟,成
為業(yè)界的事實(shí)標(biāo)準(zhǔn)(但各個(gè)廠商的光纖交換技術(shù)不完全相同,其服務(wù)器和 SAN
存儲(chǔ)有兼容性的要求)。 -
SAN 提供了一種與現(xiàn)有 LAN 連接的簡(jiǎn)易方法,并且通過(guò)同一物理通道支持廣
泛使用的 SCSI 和 IP 協(xié)議。SAN 不受現(xiàn)今主流的、基于 SCSI 存儲(chǔ)結(jié)構(gòu)的
布局限制。特別重要的是,隨著存儲(chǔ)容量的爆炸性增長(zhǎng),SAN 允許企業(yè)獨(dú)立地增
加它們的存儲(chǔ)容量。SAN 的結(jié)構(gòu)允許任何服務(wù)器連接到任何存儲(chǔ)陣列,這樣不管
數(shù)據(jù)置放在那里,服務(wù)器都可直接存取所需的數(shù)據(jù)。因?yàn)椴捎昧斯饫w接口,SAN
還具有更高的帶寬。 -
如今的 SAN 解決方案通常會(huì)采取以下兩種形式:光纖信道以及 iSCSI 或者基于
IP 的 SAN,也就是 FC SAN 和 IP SAN。光纖信道是 SAN 解決方案中大家最熟
悉的類型,但是,最近一段時(shí)間以來(lái),基于 iSCSI 的 SAN 解決方案開始大量出
現(xiàn)在市場(chǎng)上,與光纖通道技術(shù)相比較而言,這種技術(shù)具有良好的性能,而且價(jià)格低
廉。
- SAN 的優(yōu)勢(shì):
- 隨著存儲(chǔ)容量的增長(zhǎng),SAN 允許企業(yè)獨(dú)立地增加他們的存儲(chǔ)容量。SAN 允許任
何服務(wù)器連接到任何存儲(chǔ)陣列(好處是:不管數(shù)據(jù)放在哪里,服務(wù)器都可以直接
存取所需的數(shù)據(jù)) - 由于使用光纖接口,SAN 具有更高的帶寬。除了 FC 連接,SAN 連接還有
ISCSI(SCSI over IP)以及 SAS(Serial Attached SCSI)接口。 - 光纖接口可以提供 10 公里那么長(zhǎng)那么遠(yuǎn)的連接長(zhǎng)度,非常容易實(shí)現(xiàn)物理分離的存儲(chǔ)
1.4 三種存儲(chǔ)類型的比較
- 技術(shù)上
處理器----存儲(chǔ) 連接類型 | 有無(wú)網(wǎng)絡(luò) | 媒介 | I/O 協(xié)議 | 帶寬 | 是否容量共享 | 是否數(shù)據(jù)共享 |
---|---|---|---|---|---|---|
DAS | NO | 使用并行 SCSI,光纖通道 | SCSI | 40MBps-160MBps,取決于媒介 | 手動(dòng)配置,默認(rèn)不共享 | NO |
SNA | YES | 最常用光纖網(wǎng)絡(luò),后來(lái)也可基于以太網(wǎng) | SCSI | 100MBps or 200MBps | YES | 數(shù)據(jù)共享需要特定軟件配合,如 SANergy |
NAS | YES | 以太網(wǎng) | NFS,CIFS | 10Mbps–1Gbps | YES | YES |
- 優(yōu)缺點(diǎn)和使用場(chǎng)景
- 三種存儲(chǔ)架構(gòu)的應(yīng)用場(chǎng)景
- DAS 雖然比較古老了,但是還是很適用于那些數(shù)據(jù)量不大,對(duì)磁盤訪問(wèn)速度要求
較高的中小企業(yè) - NAS 多適用于文件服務(wù)器,用來(lái)存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),雖然受限于以太網(wǎng)的速度,
但是部署靈活,成本低 - SAN 則適用于大型應(yīng)用或數(shù)據(jù)庫(kù)系統(tǒng),缺點(diǎn)是成本高、較為復(fù)雜
二.文件傳輸協(xié)議 FTP
2.1 FTP 工作原理
File Transfer Protocol(FTP):文件傳輸協(xié)議,是用于在計(jì)算機(jī)網(wǎng)絡(luò)上的客戶機(jī)和服務(wù)器
之間傳輸文件的標(biāo)準(zhǔn)應(yīng)用層協(xié)議。FTP 是基于客戶端/服務(wù)器模型(C/S),并且使用不同的連
接來(lái)工作,將控制和數(shù)據(jù)傳輸分開,控制通道使用 TCP/21 端口,數(shù)據(jù)通道端口視情況而定。
FTP 用戶可以使用明文登錄協(xié)議進(jìn)行身份驗(yàn)證,通常是用戶名和密碼的形式,但如果服務(wù)器配
置允許,則可以匿名連接(此時(shí)連接的用戶名為 ftp 或者 anonymous)。對(duì)于保護(hù)用戶名和密
碼并對(duì)內(nèi)容進(jìn)行加密的安全傳輸,FTP 通常使用 SSL/TLS (FTPS)或 SSH 文件傳輸協(xié)議
(SFTP)進(jìn)行保護(hù)。
第一個(gè) FTP 客戶端應(yīng)用程序是在操作系統(tǒng)具有圖形用戶界面之前開發(fā)的命令行程序,并且到
目前仍然隨大多數(shù) Windows、Unix 和 Linux 操作系統(tǒng)一起提供。此后,許多 FTP 客戶端
和自動(dòng)化實(shí)用程序被開發(fā)用于桌面、服務(wù)器和移動(dòng)設(shè)備。
- FTP 工作時(shí)使用兩種模式:從服務(wù)器角度來(lái)說(shuō)
- 主動(dòng)模式(PORT style): 服務(wù)器主動(dòng)連接客戶端
控制通道:客戶端:隨機(jī) port —> 服務(wù)器:21/tcp
數(shù)據(jù)通道:客戶端:隨機(jī) port <—服務(wù)器:20/tcp - 被動(dòng)模式(PASV style): 客戶端主動(dòng)連接服務(wù)器
控制通道:客戶端:隨機(jī) port —> 服務(wù)器:21/tcp
數(shù)據(jù)通道:客戶端:隨機(jī) port —> 服務(wù)器:隨機(jī) port /tcp
例如:服務(wù)器被動(dòng)模式數(shù)據(jù)端口
227 Entering Passive Mode (172,16,0,1,224,59)
客服端主動(dòng)連接服務(wù)器
可以在客戶端看到該消息,服務(wù)器數(shù)據(jù)端口計(jì)算:224*256+59
- FTP 服務(wù)狀態(tài)碼
- 1XX:信息 125:數(shù)據(jù)連接打開
- 2XX:成功類狀態(tài) 200:命令 OK 230:登錄成功
- 3XX:補(bǔ)充類 331:用戶名 OK
- 4XX:客戶端錯(cuò)誤 425:不能打開數(shù)據(jù)連接
- 5XX:服務(wù)器錯(cuò)誤 530:不能登錄 用戶認(rèn)證:
- 匿名用戶:ftp,anonymous,對(duì)應(yīng) Linux 用戶 ftp
- 系統(tǒng)用戶:Linux 用戶,用戶/etc/passwd,密碼/etc/shadow
- 虛擬用戶:特定服務(wù)的專用用戶,獨(dú)立的用戶/密碼文件
2.2 常見的 FTP 軟件
- 常見的 FTP 服務(wù)端軟件
- Wu-ftpd,Proftpd,Pureftpd
- Filezilla Server,Serv-U,Wing FTP Server,IIS
- vsftpd:Very Secure FTP Daemon,CentOS 默認(rèn) FTP 服務(wù)器高速,穩(wěn)定,下載速度是
WU-FTP 的兩倍,據(jù) ftp.redhat.com 提供的數(shù)據(jù):FTP 單機(jī)最多可支持 15000 個(gè)并發(fā)連接。 常見的 FTP 客戶端軟件 - ftp
ftp -A ftpserver port -A 主動(dòng)模式 –p 被動(dòng)模式
- lftp
lftp –u username ftpserver
lftp username@ftpserver
- lftpget
lftpget ftp://ftpserver/pub/file
- gftp:GUI centos5 最新版 2.0.19 (11/30/2008)
- wget
- curl
- filezilla,FTP Rush,CuteFtp,FlashFXP,LeapFtp
2.2.1 vsftpd 軟件
vsftpd 由 vsftpd 包提供,不由 xinetd 管理
用戶認(rèn)證配置文件:/etc/pam.d/vsftpd
- 服務(wù)啟動(dòng)文件
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
- 配置文件
/etc/vsftpd/vsftpd.conf
幫助:man 5 vsftpd.conf
-
配置文件格式
option=value
等號(hào)兩端不能有空格 -
用戶和其共享目錄
匿名用戶(映射為系統(tǒng)用戶 ftp )共享文件位置:/var/ftp
系統(tǒng)用戶共享文件位置:用戶家目錄
虛擬用戶共享文件位置:為其映射的系統(tǒng)用戶的家目錄
2.2.2 vsftpd 服務(wù)常見配置
2.2.2.1 命令端口配置
listen_port=21
2.2.2.2 主動(dòng)模式端口
connect_from_port_20=YES 主動(dòng)模式端口為20ftp_data_port=20 (默認(rèn)) 指定主動(dòng)模式的端口
2.2.2.3 被動(dòng)模式端口范圍
linux 客戶端默認(rèn)使用被動(dòng)模式
windows 客戶端默認(rèn)使用主動(dòng)模式
pasv_min_port=6000 0為隨機(jī)分配
pasv_max_port=6010
2.2.2.4 使用當(dāng)?shù)貢r(shí)間
use_localtime=YES 默認(rèn)為NO,GMT時(shí)區(qū)
2.2.2.5 使用匿名用戶登錄
anonymous_enable=YES 支持匿名用戶
no_anon_password=YES 匿名用戶略過(guò)口令檢查 , 默認(rèn)NO
2.2.2.6 允許匿名上傳文件
anon_upload_enable=YES 匿名上傳,注意:文件系統(tǒng)權(quán)限
anon_mkdir_write_enable=YES 匿名建目錄
anon_world_readable_only 只能下載全部讀的文件, 默認(rèn)YES
anon_umask=0333 指定匿名上傳文件的umask,默認(rèn)077
anon_other_write_enable=YES 可刪除和修改上傳的文件, ,默認(rèn)NO
2.2.2.7 指定匿名用戶的上傳文件的默認(rèn)的所有者和權(quán)限
chown_uploads=YES 默認(rèn)NO
chown_username=wang
chown_upload_mode=0644
2.2.2.8 Linux 系統(tǒng)用戶
local_enable=YES 是否允許 linux 用戶登錄
write_enable=YES 允許 linux 用戶上傳文件
local_umask=022 指定系統(tǒng)用戶上傳文件的默認(rèn)權(quán)限
2.2.2.9 將系統(tǒng)用戶映射為指定的 guest 用戶
guest_enable=YES 所有系統(tǒng)用戶都映射成 guest 用戶
guest_username=ftp 配合上面選項(xiàng)才生效,指定 guest 用戶
local_root=/ftproot guest 用戶登錄所在目錄
2.2.2.10 限定系統(tǒng)用戶在指定目錄
- 禁錮所有系統(tǒng)在家目錄中
chroot_local_user=YES 禁錮系統(tǒng)用戶,默認(rèn)NO,即不禁錮
- 禁錮或不禁錮特定的系統(tǒng)用戶在家目錄中,與上面設(shè)置功能相反
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
當(dāng) chroot_local_user=YES 時(shí),則 chroot_list 中用戶不禁錮
當(dāng) chroot_local_user=NO 時(shí),則 chroot_list 中用戶禁錮
2.2.2.11 啟用日志
wu-ftp日志:默認(rèn)啟用
xferlog_enable=YES 啟用記錄上傳下載日志,此為默認(rèn)值
xferlog_std_format=YES 使用wu-ftp日志格式,此為默認(rèn)值
xferlog_file=/var/log/xferlog 可自動(dòng)生成, 此為默認(rèn)值vsftpd日志:默認(rèn)不啟用
dual_log_enable=YES 使用vsftpd日志格式,默認(rèn)不啟用
vsftpd_log_file=/var/log/vsftpd.log 可自動(dòng)生成, 此為默認(rèn)值
2.2.2.12 啟用提示信息
- 登錄提示信息
ftpd_banner="welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt
- 目錄訪問(wèn)提示信息
dirmessage_enable=YES 此為默認(rèn)值
message_file=.message 信息存放在指定目錄下.message ,此為默認(rèn)值
2.2.2.13 PAM 模塊實(shí)現(xiàn)用戶訪問(wèn)控制
pam_service_name=vsftpd pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默認(rèn)文件中用戶拒絕登錄
2.2.2.14 是否啟用控制用戶登錄的列表文件
userlist_enable=YES 此為默認(rèn)值
userlist_deny=YES(默認(rèn)值) 黑名單,不提示口令,NO為白名單
userlist_file=/etc/vsftpd/users_list 此為默認(rèn)值
2.2.2.15 vsftpd 服務(wù)指定用戶身份運(yùn)行
nopriv_user=nobody
此為默認(rèn)值
2.2.2.16 連接數(shù)限制
max_clients=0 最大并發(fā)連接數(shù)
max_per_ip=0 每個(gè) IP 同時(shí)發(fā)起的最大連接數(shù)
2.2.2.17 傳輸速率,字節(jié)/秒
anon_max_rate=0 匿名用戶的最大傳輸速率
local_max_rate=0 本地用戶的最大傳輸速率
2.2.2.18 連接時(shí)間:秒為單位
connect_timeout=60 主動(dòng)模式數(shù)據(jù)連接超時(shí)時(shí)長(zhǎng)
accept_timeout=60 被動(dòng)模式數(shù)據(jù)連接超時(shí)時(shí)長(zhǎng)
data_connection_timeout=300 數(shù)據(jù)連接無(wú)數(shù)據(jù)輸超時(shí)時(shí)長(zhǎng)
idle_session_timeout=60 無(wú)命令操作超時(shí)時(shí)長(zhǎng)
2.2.2.19 優(yōu)先以文本方式傳輸
ascii_upload_enable=YES
ascii_download_enable=YES
2.2.2.20 實(shí)現(xiàn)基于 SSL 的 FTPS
- 查看是否支持 SSL
[root@centos8 ~]#ldd `which vsftpd`|grep libssl
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f8878e2c000)
- 創(chuàng)建自簽名證書
# CentOS 7 上可以實(shí)現(xiàn)
cd /etc/pki/tls/certs/
make vsftpd.pem
openssl x509 -in vsftpd.pem -noout –text
# 或者分別生成一個(gè)證書和私鑰文件
mkdir /etc/vsftpd/ssl
cd /etc/vsftpd/ssl
openssl req -x509 -nodes -keyout vsftpd.key -out vsftpd.crt -days 365 -newkey rsa:2048
- 配置 vsftpd 服務(wù)支持 SSL
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES #啟用SSL
allow_anon_ssl=NO #匿名不支持SSL
force_local_logins_ssl=YES #本地用戶登錄加密
force_local_data_ssl=YES #本地用戶數(shù)據(jù)傳輸加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
#rsa_private_key_file /path/file #此項(xiàng)如果沒有指定,私鑰也在證書文件中
#ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
#require_ssl_reuse=NO
#ssl_ciphers=HIGH[root@centos7 ~]#systemctl restart vsftpd
[root@centos7 ~]#ftp 192.168.100.7
Connected to 192.168.100.7 (192.168.100.7).
220-welcome to magedu
220
Name (192.168.100.8:root): wang
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection# 用filezilla等工具測(cè)試
2.2.3 vsftpd 虛擬用戶概念
vsftpd 的虛擬用戶:
- 所有虛擬用戶會(huì)統(tǒng)一映射為一個(gè)指定的系統(tǒng)帳號(hào):訪問(wèn)共享位置,即為此系統(tǒng)帳號(hào)的家目錄
- 各虛擬用戶可被賦予不同的訪問(wèn)權(quán)限,通過(guò)匿名用戶的權(quán)限控制參數(shù)進(jìn)行指定
虛擬用戶帳號(hào)的存儲(chǔ)方式:
- 存儲(chǔ)于文件:編輯文本文件,此文件需要被編碼為 hash 格式。奇數(shù)行為用戶名,偶數(shù)行為密碼
使用命令db_load -T -t hash -f vusers.txt vusers.db
生成 vsftpd 可識(shí)別的.db
格式 - 存儲(chǔ)于關(guān)系型數(shù)據(jù)庫(kù)中的表中:實(shí)時(shí)查詢數(shù)據(jù)庫(kù)完成用戶認(rèn)證
vsftpd 支持 mysql 庫(kù):pam 要依賴于 pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
2.2.4 基于文件驗(yàn)證的虛擬用戶
2.2.4.1 創(chuàng)建用戶數(shù)據(jù)文件
vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db
chmod 600 vusers.db
2.2.4.2 創(chuàng)建用戶訪問(wèn) FTP 共享文件目錄
useradd -d /data/ftproot -s /sbin/nologin -r vuser
mkdir -pv /data/ftproot/upload
setfacl -m u:vuser:rwx /data/ftproot/upload
#chmod a=rx /data/ftproot/ 如果自動(dòng)創(chuàng)建家目錄,需修改權(quán)限
2.2.4.3 創(chuàng)建 pam 配置文件
vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
2.2.4.4 指定 pam 配置文件
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
2.2.4.4 每個(gè)虛擬用戶建立獨(dú)立的配置文件
# 指定各個(gè)用戶配置文件存放的路徑
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/# 創(chuàng)建各個(gè)用戶配置文件存放的路徑
mkdir /etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/# 創(chuàng)建各用戶自已的配置文件,允許wang用戶可讀寫,其它用戶只讀
vim wang
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES# 創(chuàng)建各用戶自已的配置文件
vim mage # 登錄目錄改變至指定的目錄
local_root=/data/ftproot2
2.2.5 基于 mysql 驗(yàn)證的虛擬用戶
2.2.5.1 環(huán)境準(zhǔn)備
本實(shí)驗(yàn)在兩臺(tái) CentOS 主機(jī)上實(shí)現(xiàn), CentOS 7 一臺(tái)做為 FTP 服務(wù)器,一臺(tái)做數(shù)據(jù)庫(kù)服務(wù)器
2.2.5.2 在數(shù)據(jù)庫(kù)服務(wù)器上安裝 mysql 數(shù)據(jù)庫(kù)
yum –y install mariadb-server
systemctl enable --now mariadb.service
2.2.5.3 在數(shù)據(jù)庫(kù)服務(wù)上配置數(shù)據(jù)庫(kù)支持 vsftpd 服務(wù)
# 建立存儲(chǔ)虛擬用戶數(shù)據(jù)庫(kù)和表
mysql> CREATE DATABASE vsftpd;
mysql> USE vsftpd;
mysql> CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);
# 添加虛擬用戶,為了安全應(yīng)該使用PASSWORD函數(shù)加密其密碼后存儲(chǔ)
mysql> INSERT INTO users(name,password) values('wang',password('magedu'));
mysql> INSERT INTO users(name,password) values('mage',password('magedu'));
# 創(chuàng)建連接的數(shù)據(jù)庫(kù)用戶
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.0.%' IDENTIFIED BY 'magedu';
mysql> FLUSH PRIVILEGES;
2.2.5.4 在 FTP 服務(wù)器上安裝 vsftpd 和 pam_mysql 包
yum install vsftpd -y
yum install pam_mysql -y
- 對(duì)于 centos 6:pam_mysql 由 EPEL 的源中提供
- 對(duì)于 centos7 和 8:無(wú)對(duì)應(yīng) rpm 包,需手動(dòng)編譯安裝
- pam-mysql 源碼進(jìn)行編譯
# 安裝相關(guān)包
yum install vsftpd gcc gcc-c++ make mariadb-devel pam-devel# 下載pam-mysql源碼進(jìn)行編譯
wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
# https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gztar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security
# 如果上面命令不指定 --with-pam-mods-dir=/lib64/security 會(huì)報(bào)以下錯(cuò)誤
# checking if the second argument of pam_conv.conv() takes const pointer... no
# configure: error: Your system doesn\'t appear to be configured to use PAM.
# Perhaps you need to specify the correct location where the PAM modules reside.make && make install
[root@vsftpd ~]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root 882 Dec 17 14:34 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so
2.2.5.5 在 FTP 服務(wù)器上建立 pam 認(rèn)證所需文件
vi /etc/pam.d/vsftpd.mysql# 添加如下兩行
auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
參考 README 可知
- crypt 加密方式:
0 表示不加密
1 表示 crypt(3)加密
2 表示使用 mysql password()函數(shù)加密
3 表示 md5 加密
4 表示 sha1 加密 - 配置字段說(shuō)明
auth 表示認(rèn)證
account 驗(yàn)證賬號(hào)密碼正常使用
required 表示認(rèn)證要通過(guò)
pam_mysql.so 模塊是默認(rèn)的相對(duì)路徑,是相對(duì)/lib64/security/路徑而言,也可以寫絕對(duì)路徑;后
面為給此模塊傳遞的參數(shù)
user=vsftpd 為登錄 mysql 的用戶
passwd=magedu 登錄 mysql 的的密碼
host=mysqlserver mysql 服務(wù)器的主機(jī)名或 ip 地址
db=vsftpd 指定連接 msyql 的數(shù)據(jù)庫(kù)名稱
table=users 指定連接數(shù)據(jù)庫(kù)中的表名
usercolumn=name 當(dāng)做用戶名的字段
passwdcolumn=password 當(dāng)做用戶名字段的密碼
crypt=2 密碼的加密方式為 mysql password()函數(shù)加密
2.2.5.6 建立相應(yīng)用戶和修改 vsftpd 配置文件
# 建立虛擬用戶映射的系統(tǒng)用戶及對(duì)應(yīng)的目錄
useradd -s /sbin/nologin -d /data/ftproot -r vuser
# centos7 需除去ftp根目錄的寫權(quán)限
chmod 555 /data/ftproot
mkdir -pv /data/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /data/ftproot/upload
# 確保/etc/vsftpd.conf中已經(jīng)啟用了以下選項(xiàng)
anonymous_enable=YES
# 添加下面兩項(xiàng)
guest_enable=YES
guest_username=vuser
# 修改下面一項(xiàng),原系統(tǒng)用戶無(wú)法登錄
pam_service_name=vsftpd.mysql# 啟動(dòng)vsftpd服務(wù)
systemctl enable --now vsftpd
2.2.5.7 在 FTP 服務(wù)器上配置虛擬用戶具有不同的訪問(wèn)權(quán)限
vsftpd 可以在配置文件目錄中為每個(gè)用戶提供單獨(dú)的配置文件以定義其 ftp 服務(wù)訪問(wèn)權(quán)限,
每個(gè)虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,
只需要在 vsftpd.conf 指定其路徑及名稱即可
# 配置vsftpd為虛擬用戶使用配置文件目錄
vim /etc/vsftpd/vsftpd.conf
# 添加如下選項(xiàng)
user_config_dir=/etc/vsftpd/vusers.d/
# 創(chuàng)建所需要目錄,并為虛擬用戶提供配置文件
mkdir /etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/
touch wang mage
# 配置虛擬用戶的訪問(wèn)權(quán)限
# 虛擬用戶對(duì)vsftpd服務(wù)的訪問(wèn)權(quán)限是通過(guò)匿名用戶的相關(guān)指令進(jìn)行的。如要讓用戶wang具有上傳文件的權(quán)
限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下選項(xiàng)并設(shè)置為YES即可,只讀則設(shè)為NO
# 注意:需確保對(duì)應(yīng)的映射用戶對(duì)于文件系統(tǒng)有寫權(quán)限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
# 登錄目錄改變至指定的目錄
local_root=/data/ftproot2
三.文件共享服務(wù)
3.1 NFS 分布式文件系統(tǒng)協(xié)議
Network File System(NFS):網(wǎng)絡(luò)文件系統(tǒng),是一個(gè)分布式文件系統(tǒng)協(xié)議,最初由
Sun Microsystems
(SUN)在 1984 年開發(fā),其允許用戶在客服端通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)
訪問(wèn)服務(wù)器的文件,就如同在客戶端本地訪問(wèn)一樣。和其他協(xié)議一樣,NFS 基于
Open Network Computing Remote Procedure Call(ONC RPC)
遠(yuǎn)程過(guò)程調(diào)用
系統(tǒng)。NFS 是一個(gè)開放的標(biāo)準(zhǔn),定義于一個(gè) RFC 中,允許任何人實(shí)現(xiàn)該協(xié)議。
3.2 NFS 工作原理
RPC 采用 C/S 模式,客戶機(jī)請(qǐng)求程序調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)
進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。
當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待
下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用
執(zhí)行繼續(xù)進(jìn)行。
NFS 優(yōu)勢(shì):節(jié)省本地存儲(chǔ)空間,將常用的數(shù)據(jù),如:/home 目錄,存放在 NFS 服務(wù)
器上且可以通過(guò)網(wǎng)絡(luò)訪問(wèn),本地終端將可減少自身存儲(chǔ)空間的使用
3.3 NFS 軟件
軟件包:nfs-utils
相關(guān)軟件包:rpcbind
(必須),tcp_wrappers
Kernel 支持:nfs.ko
端口:2049(nfsd), 其它端口由 portmap(111)分配
- 說(shuō)明:CentOS 6 開始 portmap 進(jìn)程由 rpcbind 代替
- NFS 服務(wù)主要進(jìn)程:
- rpc.nfsd 最主要的 NFS 進(jìn)程,管理客戶端是否可登錄
- rpc.mountd 掛載和卸載 NFS 文件系統(tǒng),包括權(quán)限管理
- rpc.lockd 非必要,管理文件鎖,避免同時(shí)寫出錯(cuò)
- rpc.statd 非必要,檢查文件一致性,可修復(fù)文件
日志位置:/var/lib/nfs/
NFS 配置文件:
/etc/exports
/etc/exports.d/\*.exports
3.4 NFS 配置
/dir 主機(jī)1(opt1,opt2) 主機(jī)2(opt1,opt2)...
格式
- #號(hào)開始為注釋
- 主機(jī)格式
單個(gè)主機(jī):ipv4,ipv6,FQDN IP networks:兩種掩碼格式均支持 172.18.0.0/255.255.0.0 172.18.0.0/16 wildcards:主機(jī)名通配,例如*.magedu.com,IP不可以 netgroups:NIS域的主機(jī)組,@group_name anonymous:表示使用*通配所有客戶端
- 每個(gè)條目指定目錄導(dǎo)出到的哪些主機(jī),及相關(guān)的權(quán)限和選項(xiàng)
默認(rèn)選項(xiàng):(ro,sync,root_squash,no_all_squash)
ro,rw 只讀和讀寫
async 異步,數(shù)據(jù)變化后不立即寫磁盤,性能高
sync (1.0.0后為默認(rèn))同步,數(shù)據(jù)在請(qǐng)求時(shí)立即寫入共享存儲(chǔ)磁盤
root_squash (默認(rèn))遠(yuǎn)程root映射為nfsnobody,UID為65534,CentOS8 為nobody,早期版本是4294967294 (nfsnobody)
no_root_squash 遠(yuǎn)程root映射成root用戶
all_squash 所有遠(yuǎn)程用戶(包括root)都變成nfsnobody,CentOS8 為nobody
no_all_squash (默認(rèn))保留共享文件的UID和GID
anonuid和anongid 指明匿名用戶映射為特定用戶UID和組GID,而非nfsnobody,可配合all_squash使用
- 配置示例
vim /etc/exports
/myshare server.example.com
/myshare *.example.com
/myshare server?.example.com
/myshare server[0-20].example.com
/myshare 172.25.11.10
/myshare 172.25.0.0/16
/myshare 2000:472:18:b51:c32:a21
/myshare 2000:472:18:b51::/64
/myshare *.example.com 172.25.0.0/16
/myshare desktop.example.com(ro)
/myshare desktop.example.com(ro) server[0-20].example.com(rw)
/myshare diskless.example.com(rw,no_root_squash)
3.5 NFS 相關(guān)工具
3.5.1 rpcinfo
rpcinfo 工具可以查看 RPC 相關(guān)信息,查看注冊(cè)在指定主機(jī)的 RPC 程序
rpcinfo -p hostname
查看 RPC 注冊(cè)程序
rpcinfo -s hostname
例子
[root@centos8 ~]#rpcinfo -pprogram vers proto port service100000 4 tcp 111 portmapper100000 3 tcp 111 portmapper100000 2 tcp 111 portmapper100000 4 udp 111 portmapper100000 3 udp 111 portmapper100000 2 udp 111 portmapper100024 1 udp 36310 status100024 1 tcp 45265 status
[root@centos8 ~]#rpcinfo -sprogram version(s) netid(s) service owner100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser100024 1 tcp6,udp6,tcp,udp status 29
3.5.2 exports
exportfs:可用于在 NFS 服務(wù)器管理 NFS 導(dǎo)出的文件系統(tǒng)
常用選項(xiàng):
- –v 查看本機(jī)所有 NFS 共享
- –r 重讀配置文件,并共享目錄
- –a 輸出本機(jī)所有共享
- –au 停止本機(jī)所有共享
3.5.3 showmount
showmount 用來(lái)查詢遠(yuǎn)程服務(wù)器上的 NFS 服務(wù)信息。
showmount -e hostname
3.5.4 mount.nfs
mount.nfs
工具用于在客戶端掛載網(wǎng)絡(luò)文件系統(tǒng)
掛載 NFS 時(shí),選項(xiàng)參數(shù)說(shuō)明
- fg(默認(rèn))前臺(tái)掛載
- bg 后臺(tái)掛載
- hard(默認(rèn))持續(xù)請(qǐng)求
- soft 非持續(xù)請(qǐng)求
- intr 和 hard 配合,請(qǐng)求可中斷
- rsize 和 wsize 一次讀和寫數(shù)據(jù)最大字節(jié)數(shù),rsize=32768
- netdev 無(wú)網(wǎng)絡(luò)不掛載
提示:基于安全考慮,建議使用 nosuid,nodev,noexec 掛載選項(xiàng)_
范例:臨時(shí)掛載 NFS 共享
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
范例:開機(jī)掛載
vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0
3.6 自動(dòng)掛載文件系統(tǒng)
可使用 autofs 服務(wù)按需要掛載外圍設(shè)備,NFS 共享等,并在空閑 5 分鐘后后自動(dòng)卸載
3.6.1 相關(guān)文件
軟件包: autofs
服務(wù)文件:/usr/lib/systemd/system/autofs.service
配置文件:/etc/auto.master
3.6.2 配置文件格式
參看幫助:man 5 autofs
所有導(dǎo)出到網(wǎng)絡(luò)中的 NFS 啟用特殊匹配 -host 至“browse”
范例:/net 目錄可以自動(dòng)掛載 NFS 共享
cat /etc/auto.master
/net -hosts
cd /net/192.168.8.100/
- 自動(dòng)掛載資源有兩種格式:
- 相對(duì)路徑法:將 mount point 路徑分成 dirname 和 basename 分別配置,
可能會(huì)影響現(xiàn)有的目錄結(jié)構(gòu) - 絕對(duì)路徑法:直接匹配全部絕對(duì)路徑名稱,不會(huì)影響本地目錄結(jié)構(gòu)
相對(duì)路徑法:
- /etc/auto.master 格式
掛載點(diǎn)的dirname 指定目錄的配置文件路徑
- 指定目錄的配置文件格式
掛載點(diǎn)的basename 掛載選項(xiàng) 選項(xiàng)設(shè)備
相對(duì)路徑例子
[root@centos8 ~]#vim /etc/auto.master
/misc /etc/auto.misc
[root@centos8 ~]#vim /etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
相對(duì)路徑法支持通配符
vim /etc/auto.master
/misc /etc/auto.misc
vim /etc/auto.misc
#表示/misc下面的子目錄和nfs共享/export目錄的子目錄同名
* server:/export/&
絕對(duì)路徑法
- /etc/auto.master 格式
/- 指定配置文件路徑
- 指定配置文件格式
絕對(duì)路徑 掛載選項(xiàng) 選項(xiàng)設(shè)備
絕對(duì)路徑例子
vim /etc/auto.master:
/- /etc/auto.direct
vim /etc/auto.direct:
/foo -fstype=nfs server1:/export/foo
/user/local/ -fstype=nfs,vers=3 server1:/usr/local
/mnt/cdrom -fstype=iso9660 :/dev/cdrom
3.7 案例
3.7.1 目標(biāo)
將 NFS 的共享目錄,通過(guò) autofs 發(fā)布出來(lái),做為遠(yuǎn)程主機(jī)用戶的家目錄
3.7.2 環(huán)境準(zhǔn)備
- 三臺(tái)主機(jī)
- 一臺(tái)主機(jī) nfs server,IP:192.168.8.100
- 另兩臺(tái)當(dāng) nfs client,IP:192.168.8.101 和 192.168.8.102
3.7.3 步驟
# NFS服務(wù)器創(chuàng)建用戶和相應(yīng)的家目錄,將用戶wang的家目錄共享
useradd -d /data/wang wang
Vim /etc/exports.d/test.exports
/data/wang *(rw,anonuid=1000,anongid=1000,all_sqush)
# 在第一臺(tái)NFS客戶端主機(jī)192.168.8.101上實(shí)現(xiàn)相對(duì)路徑法的autofs
vim /etc/auto.master
/home /etc/homeauto
vim /etc/homeauto
* -fstype=nfs,vers=3 192.168.8.100:/data/wang/&
# 注意:home目錄下其它用戶家目錄無(wú)法訪問(wèn)
# 在第二臺(tái)NFS客戶端主機(jī)192.168.8.102上實(shí)現(xiàn)絕對(duì)路徑法的autofs
vim /etc/auto.master
/- /etc/homeauto
vim e/etc/homeauto
/home/wang -fstype=nfs,vers=3 nfsserver:/data/wang
四.SAMBA 服務(wù)
Samba 是基于SMB
網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的自由軟件,最初由Andrew Tridgell
。Samba 為各種
Microsoft Windows 客戶端提供文件和打印服務(wù),可以作為域控制器(DC)或域成員與
Microsoft Windows 服務(wù)域集成。從版本 4 開始,它支持活動(dòng)目錄(Active Directory)
和 Microsoft Windows NT 域。
另外,Samba 也是巴西的一種最受歡迎的音樂(lè)和舞蹈形式。每年狂歡節(jié)的主角都是 Samba 舞。
4.1 SAMBA 服務(wù)介紹
SMB:Server Message Block 服務(wù)器消息塊,IBM 發(fā)布,最早是 DOS 網(wǎng)絡(luò)文件共享協(xié)議
CIFS:common internet file system,微軟于 1996 年將 SMB 改名并加入很多特性的協(xié)議
SAMBA:1991 年 Andrew Tridgell,實(shí)現(xiàn) windows 和 UNIX 相通
CIFS/SMB 和網(wǎng)絡(luò)文件系統(tǒng)(NFS) 是目前在 network-attached(NAS)存儲(chǔ)系統(tǒng)使用最為廣泛的協(xié)議。
SAMBA 官網(wǎng)
SAMBA 的功能:
- 共享文件和打印,實(shí)現(xiàn)在線編輯
- 實(shí)現(xiàn)登錄 SAMBA 用戶的身份認(rèn)證
- 可以進(jìn)行 NetBIOS 名稱解析
- 外圍設(shè)備共享
Windows 計(jì)算機(jī)網(wǎng)絡(luò)管理模式:
- 工作組 WORKGROUP:計(jì)算機(jī)對(duì)等關(guān)系,帳號(hào)信息各自管理
- 域 DOMAIN:C/S 結(jié)構(gòu),帳號(hào)信息集中管理,DC,AD
4.2 SAMBA 軟件介紹
相關(guān)包:
- samba 提供 smb 服務(wù)
- samba-client 客戶端軟件
- samba-common 通用軟件
- cifs-utils smb 客戶端工具
- samba-winbind 和 AD 相關(guān)
相關(guān)服務(wù)進(jìn)程:
- smbd 提供 smb(cifs)服務(wù) TCP:139,445
- nmbd NetBIOS 名稱解析 UDP:137,138
主配置文件:/etc/samba/smb.conf
幫助參看:man smb.conf
語(yǔ)法檢查: testparm [-v][/etc/samba/smb.conf]
客戶端工具:smbclient,mount.cifs
- 安裝和啟動(dòng)服務(wù)
yum/dnf install samba
systemctl start smb
systemctl start nmb
4.3 SAMBA 客戶端工具
訪問(wèn) SAMBA 服務(wù)器時(shí)使用 UNC 命名規(guī)范
UNC 路徑: Universal Naming Convention
通用命名規(guī)范,格式如下
\\sambaserver\sharename
4.3.1 使用 smbclient 訪問(wèn) SAMBA 服務(wù)器
smbclient -L instructor.example.com
smbclient -L instructor.example.com -U smb用戶%password
# 可以使用-U選項(xiàng)來(lái)指定用戶%密碼,或通過(guò)設(shè)置和導(dǎo)出USER和PASSWD環(huán)境變量來(lái)指定
smbclient //instructor.example.com/shared -U wang
>cd directory
>get file1
>put file2
4.3.2 掛載 CIFS 文件系統(tǒng)
范例:手動(dòng)掛載
mount -o user=wang,password=magedu //server//shared /mnt/smb
范例:開機(jī)自動(dòng)掛載
cat /etc/fstab
# 可以用文件代替用戶名和密碼的輸入
//server/homes /mnt cifs credentials或cred=/etc/smb.txt 0 0cat /etc/smb.txt
username=wang #或 user=wang
password=password #或 pass=password
chmod 600 /etc/smb.txt
4.4 管理 SAMBA 用戶
4.4.1 samba 用戶
相關(guān)包:samba-common-tools
相關(guān)工具:smbpasswd pdbedit
用戶數(shù)據(jù)庫(kù):/var/lib/samba/private/passdb.tdb
說(shuō)明:samba 用戶須是 Linux 用戶,建議使用/sbin/nologin
4.4.2 管理用戶命令
添加 samba 用戶:
smbpasswd -a <user>
pdbedit -a -u <user>
修改用戶密碼:
smbpasswd <user>
刪除用戶和密碼:
smbpasswd –x <user>
pdbedit –x –u <user>
查看 samba 用戶列表:
pdbedit –L –v
例
[root@centos8 ~]#pdbedit -L
No builtin backend found, trying to load plugin
smb1:1002:
smb2:1003:
smb3:1004:
[root@centos8 ~]#pdbedit -L -v
No builtin backend found, trying to load plugin
---------------
Unix username: smb1
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1476810783-3936299954-1329646792-1000
Primary Group SID: S-1-5-21-1476810783-3936299954-1329646792-513
Full Name:
Home Directory: \\linux39\smb1
HomeDir Drive:
Logon Script:
Profile Path: \\linux39\smb1\profile
Domain: CENTOS8
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Thu, 19 Dec 2019 10:02:31 CST
Password can change: Thu, 19 Dec 2019 10:02:31 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
---------------
Unix username: smb2
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1476810783-3936299954-1329646792-1001
Primary Group SID: S-1-5-21-1476810783-3936299954-1329646792-513
Full Name:
Home Directory: \\linux39\smb2
HomeDir Drive:
Logon Script:
Profile Path: \\linux39\smb2\profile
Domain: CENTOS8
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Thu, 19 Dec 2019 09:57:36 CST
Password can change: Thu, 19 Dec 2019 09:57:36 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
---------------
查看服務(wù)器狀態(tài)–smbstatus
[root@centos8 ~]#smbstatus
Samba version 4.9.1
PID Username Group Machine Protocol Version Encryption Signing
45299 smb1 smb1 192.168.39.6 (ipv4:192.168.39.6:55898) NT1 - -
Service pid Machine Connected at Encryption Signing
smb1 45299 192.168.39.6 Thu Dec 19 10:30:24 AM 2019 CST - -
No locked files
4.5 SAMBA 服務(wù)器配置
amba 配置文件 /etc/smb.conf 格式 ,使用.ini 文件的格式
全局設(shè)置:
- [global] 服務(wù)器通用或全局設(shè)置的部分
特定共享設(shè)置:
- [homes] 用戶的家目錄共享
- [printers] 定義打印機(jī)資源和服務(wù)
- [sharename] 自定義的共享目錄配置
- 其中:#和;開頭的語(yǔ)句為注釋,大小寫不敏感
samba 配置中的宏定義:
- %m 客戶端主機(jī)的 NetBIOS 名
- %M 客戶端主機(jī)的 FQDN
- %H 當(dāng)前用戶家目錄路徑
- %U 當(dāng)前用戶的用戶名
- %g 當(dāng)前用戶所屬組
- %h samba 服務(wù)器的主機(jī)名
- %L samba 服務(wù)器的 NetBIOS 名
- %I 客戶端主機(jī)的 IP
- %T 當(dāng)前日期和時(shí)間
- %S 可登錄的用戶名
4.5.1 SAMBA 服務(wù)器全局配置
workgroup
指定工作組名稱
server string
主機(jī)注釋信息
netbios name
指定 NetBIOS 名,注意:netbios name 需要啟動(dòng) nmb 服務(wù)
范例:
[global]workgroup = workgroupnetbios name = linux39
interfaces
指定服務(wù)偵聽接口和 IP
hosts allow
可用逗號(hào),空格,或 tab 分隔,默認(rèn)允許所有主機(jī)訪問(wèn),也可在每個(gè)共享獨(dú)立
配置,如:在[global]設(shè)置,將應(yīng)用并覆蓋所有共享設(shè)置,可以是以下格式:
IPv4 network/prefix: 172.16.0.0/24 IPv4 前綴: 172.16.0.
IPv4 network/netmask: 172.16.0.0/255.255.255.0
主機(jī)名: desktop.example.com
以example.com后綴的主機(jī)名: .example.com
例
hosts allow = 172.16. .example.com
hosts deny
拒絕指定主機(jī)訪問(wèn),格式和 hosts allow 相同
config file=/etc/samba/conf.d/%U
用戶獨(dú)立的配置文件
Log file=/var/log/samba/log.%I
不同客戶機(jī)采用不同日志
log level = 2
日志級(jí)別,默認(rèn)為 0,不記錄日志
例
[global]Log file=/var/log/samba/log.%Ilog level = 2
max log size=50
日志文件達(dá)到 50K,將輪循 rotate,單位 KB
Security 三種認(rèn)證方式:
- user:samba 用戶(采有 linux 用戶,samba 的獨(dú)立口令)
- share:匿名(CentOS7 不再支持),已不建議使用
- server:已不建議使用
passdb backend = tdbsam
密碼數(shù)據(jù)庫(kù)格式
4.5.2 配置特定目錄共享
每個(gè)共享目錄應(yīng)該有獨(dú)立的[ ]部分
[共享名稱] 遠(yuǎn)程網(wǎng)絡(luò)看到的共享名稱
comment
注釋信息
path
所共享的目錄路徑
public
能否被 guest 訪問(wèn)的共享,默認(rèn) no,和 guest ok 類似
browsable
是否允許所有用戶瀏覽此共享,默認(rèn)為 yes,no 為隱藏
writable=yes
可以被所有用戶讀寫,默認(rèn)為 no
read only=no
和 writable=yes 等價(jià),如與以上設(shè)置沖突,放在后面的設(shè)置生效,默認(rèn)只讀
write list
用戶,@組名,+組名,用,分隔,如 writable=no,列表中用戶或組可讀寫,不在列表中用戶
valid users
特定用戶才能訪問(wèn)該共享,如為空,將允許所有用戶,用戶名之間用空格分隔
范例:基于特定用戶和組的共享
vim /etc/samba/smb.conf
[share]
path = /app/dir
valid users=wang,@admins
writeable = no
browseable = no
4.6 案例
4.6.1 利用 SAMBA 實(shí)現(xiàn)指定目錄共享
# 在samba服務(wù)器上安裝samba包
yum -y install samba
# 創(chuàng)建samba用戶和組
groupadd -r admins
useradd -s /sbin/nologin -G admins wang
smbpasswd -a wang
useradd -s /sbin/nologin mage
smbpasswd -a mage
# 創(chuàng)建samba共享目錄,并設(shè)置SElinux
mkdir /testdir/smbshare
chgrp admins /testdir/smbshare
chmod 2775 /testdir/smbshare
# samba服務(wù)器配置
vim /etc/samba/smb.conf
...省略...
[share]
path = /testdir/smbshare
write list = @admins
systemctl enable --now smb nmb
# samba客戶端訪問(wèn)
yum -y install cifs-utils
# 用wang用戶掛載smb共享并訪問(wèn)
mkdir /mnt/wang
mount -o username=wang //smbserver/share /mnt/wang
echo "Hello wang" >/mnt/wang/wangfile.txt
# 用mage用戶掛載smb共享并訪問(wèn)
mkdir /mnt/mage
mount -o username=mage //smbserver/share /mnt/mage
touch /mnt/mage/magefile.txt
4.6.2 實(shí)現(xiàn)不同 samba 用戶訪問(wèn)相同的 samba 共享,實(shí)現(xiàn)不同的配置
# 創(chuàng)建三個(gè)samba用戶,并指定密碼為magedu
useradd -s /sbin/nologin -r smb1
useradd -s /sbin/nologin -r smb2
useradd -s /sbin/nologin -r smb3
smbpasswd –a smb1
smbpasswd –a smb2
smbpasswd –a smb3
# 修改samba配置文件
Vim /etc/samba/smb.conf
# 在workgroup下加一行
config file= /etc/samba/conf.d/%U 說(shuō)明:%U表示用戶名
[share]
Path=/data/dir
Read only= NO
Guest ok = yes
write list=@wheel
# 針對(duì)smb1和smb2用戶創(chuàng)建單獨(dú)的配置文件
Vim /etc/samba/conf.d/smb1
[share]
Path=/data/dir1
Read only= NO 等價(jià)于writable = yes
Create mask=0644
# 說(shuō)明:默認(rèn)為744
Vim /etc/samba/conf.d/smb2
[share]
path=/data/dir2
systemctl restart smb nmb
# 用戶smb1,smb2,smb3訪問(wèn)share共享目錄,看到目錄是不同目錄
smbclient //sambaserver/share -U smb1%magedu
smbclient //sambaserver/share -U smb2%magedu
smbclient //sambaserver/share -U smb3%magedu
五.數(shù)據(jù)同步 rsync
在生產(chǎn)環(huán)境,有時(shí)會(huì)需要兩臺(tái)主機(jī)的特定目錄實(shí)現(xiàn)實(shí)時(shí)同步。比如,將 NFS 共享目錄的
數(shù)據(jù)文件,自動(dòng)實(shí)時(shí)同步到備份的服務(wù)器特定目錄中,這時(shí)就會(huì)用到 rsync
rsync 是一款輕量級(jí)的備份和遠(yuǎn)程拷貝軟件,其通過(guò)比較文件的修改時(shí)間和大小,在計(jì)算機(jī)
和外部硬盤驅(qū)動(dòng)器之間以及在聯(lián)網(wǎng)的計(jì)算機(jī)之間有效地傳輸和同步文件。它通常出現(xiàn)在類
unix 操作系統(tǒng)上。Rsync 是用 C 編寫的單線程應(yīng)用程序。rsync 使用的算法是一種增量編碼,
適用于用于最小化網(wǎng)絡(luò)使用。Zlib 可以用于額外的數(shù)據(jù)壓縮,也可以使用 SSH 或 stunnel
進(jìn)行安全加密。
5.1 數(shù)據(jù)實(shí)時(shí)同步技術(shù)
一般企業(yè)在使用 rsync 時(shí)會(huì)配合 inotify 使用,使用 inotify 監(jiān)聽文件修改情況,一旦文件某些
屬性改變,就通知 rsync 進(jìn)行備份
- inotify + rsync 方式實(shí)現(xiàn)數(shù)據(jù)同步
- sersync :金山公司周洋在 inotify 軟件基礎(chǔ)上進(jìn)行開發(fā)的,功能更加強(qiáng)大
- 工作原理:
- 要利用監(jiān)控服務(wù)(inotify),監(jiān)控同步數(shù)據(jù)服務(wù)器目錄中信息的變化
- 發(fā)現(xiàn)目錄中數(shù)據(jù)產(chǎn)生變化,就利用 rsync 服務(wù)推送到備份服務(wù)器上 inotify:
- 異步的文件系統(tǒng)事件監(jiān)控機(jī)制,利用事件驅(qū)動(dòng)機(jī)制,而無(wú)須通過(guò)諸如 cron 等的輪詢機(jī)制來(lái)獲取事件,
- linux 內(nèi)核從 2.6.13 起支持 inotify,通過(guò) inotify 可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動(dòng)等各種事件
[root@centos8 ~]#grep -i inotify /boot/config-4.18.0-80.el8.x86_64
CONFIG_INOTIFY_USER=y
5.2 notify
5.2.1 notify 需要內(nèi)核支持
Linux 支持 inotify 的內(nèi)核最小版本為 2.6.13,參看 man 7 inotify
ls -l /proc/sys/fs/inotify #列出下面的文件,說(shuō)明服務(wù)器內(nèi)核支持inotify
-rw-r--r-- 1 root root 0 Dec 7 10:10 max_queued_events
-rw-r--r-- 1 root root 0 Dec 7 10:10 max_user_instances
-rw-r--r-- 1 root root 0 Dec 6 05:54 max_user_watches
inotify 內(nèi)核參數(shù)說(shuō)明:
max_queued_events:inotify事件隊(duì)列最大長(zhǎng)度,如值太小會(huì)出現(xiàn) Event Queue Overflow 誤,默認(rèn)值:16384 max_user_instances:每個(gè)用戶創(chuàng)建inotify實(shí)例最大值,默認(rèn)值:128 max_user_watches:可以監(jiān)視的文件數(shù)量(單進(jìn)程),默認(rèn)值:8192
[root@centos8 ~]#vim /etc/sysctl.conf
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000
[root@centos8 ~]#sysctl -p
fs.inotify.max_queued_events = 66666
fs.inotify.max_user_watches = 100000
[root@centos8 ~]#cat /proc/sys/fs/inotify/*
66666
128
100000
5.2.2 inotify-tools 工具
inotify-tools 參考文檔:https://github.com/rvoicilas/inotify-tools/wiki
安裝 inotify-tools:基于 epel 源
yum install inotify-tools
inotify-tools 包主要工具:
- inotifywait: 在被監(jiān)控的文件或目錄上等待特定文件系統(tǒng)事件(open ,close,delete 等)
發(fā)生,常用于實(shí)時(shí)同步的目錄監(jiān)控 - inotifywatch:收集被監(jiān)控的文件系統(tǒng)使用的統(tǒng)計(jì)數(shù)據(jù),指文件系統(tǒng)事件發(fā)生的次數(shù)統(tǒng)計(jì)
inotifywait 命令常見選項(xiàng)
- -m, --monitor 始終保持事件監(jiān)聽
- -d, --daemon 以守護(hù)進(jìn)程方式執(zhí)行,和-m 相似,配合-o 使用
- -r, --recursive 遞歸監(jiān)控目錄數(shù)據(jù)信息變化
- -q, --quiet 輸出少量事件信息
- –exclude 指定排除文件或目錄,使用擴(kuò)展的正則表達(dá)式匹配的模式實(shí)現(xiàn)
- –excludei 和 exclude 相似,不區(qū)分大小寫
- -o, --outfile 打印事件到文件中,相當(dāng)于標(biāo)準(zhǔn)正確輸出,注意:使用絕對(duì)路徑
- -s, --syslogOutput 發(fā)送錯(cuò)誤到 syslog 相當(dāng)于標(biāo)準(zhǔn)錯(cuò)誤輸出
- –timefmt 指定時(shí)間輸出格式
- –format 指定的輸出格式;即實(shí)際監(jiān)控輸出內(nèi)容
- -e 指定監(jiān)聽指定的事件,如果省略,表示所有事件都進(jìn)行監(jiān)聽
inotifywait 的–timefmt 時(shí)間格式
參考 man 3 strftime
- %Y 年份信息,包含世紀(jì)信息
- %y 年份信息,不包括世紀(jì)信息
- %m 顯示月份,范圍 01-12
- %d 每月的第幾天,范圍是 01-31
- %H 小時(shí)信息,使用 24 小時(shí)制,范圍 00-23
- %M 分鐘,范圍 00-59
如
--timefmt "%Y-%m-%d %H:%M"
inotifywait 的 --format 格式定義
- %T 輸出時(shí)間格式中定義的時(shí)間格式信息,通過(guò) --timefmt option 語(yǔ)法格式指定時(shí)間信息
- %w 事件出現(xiàn)時(shí),監(jiān)控文件或目錄的名稱信息
- %f 事件出現(xiàn)時(shí),將顯示監(jiān)控目錄下觸發(fā)事件的文件或目錄信息,否則為空
- %e 顯示發(fā)生的事件信息,不同的事件默認(rèn)用逗號(hào)分隔
- %Xe 顯示發(fā)生的事件信息,不同的事件指定用 X 進(jìn)行分隔
例
--format "%T %w%f event: %;e"
--format '%T %w %f'
inotifywait -e 選項(xiàng)指定的事件類型
- create 文件或目錄創(chuàng)建
- delete 文件或目錄被刪除
- modify 文件或目錄內(nèi)容被寫入
- attrib 文件或目錄屬性改變
- close_write 文件或目錄關(guān)閉,在寫入模式打開之后關(guān)閉的
- close_nowrite 文件或目錄關(guān)閉,在只讀模式打開之后關(guān)閉的
- close 文件或目錄關(guān)閉,不管讀或是寫模式
- open 文件或目錄被打開
- moved_to 文件或目錄被移動(dòng)到監(jiān)控的目錄中
- moved_from 文件或目錄從監(jiān)控的目錄中被移動(dòng)
- move 文件或目錄不管移動(dòng)到或是移出監(jiān)控目錄都觸發(fā)事件
- access 文件或目錄內(nèi)容被讀取
- delete_self 文件或目錄被刪除,目錄本身被刪除
- unmount 取消掛載
inotifywait -e create,delete,moved_to,close_write, attrib
例:使用 inotifywait
#監(jiān)控一次性事件
inotifywait /data
#持續(xù)前臺(tái)監(jiān)控
inotifywait -mrq /data
#持續(xù)后臺(tái)監(jiān)控,并記錄日志
inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format
"%T %w%f event: %e"
#持續(xù)前臺(tái)監(jiān)控特定事件
inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e
create,delete,moved_to,close_write,attrib
5.3 rsync
rsync 常用于做為 linux 系統(tǒng)下的數(shù)據(jù)鏡像備份工具,實(shí)現(xiàn)實(shí)現(xiàn)遠(yuǎn)程同步,支持本地復(fù)制,
或者與其他 SSH、rsync 主機(jī)同步數(shù)據(jù),支持增量備份,配合任務(wù)計(jì)劃,rsync 能實(shí)現(xiàn)定時(shí)或
間隔同步,配合 inotify 或 sersync,可以實(shí)現(xiàn)觸發(fā)式的實(shí)時(shí)數(shù)據(jù)同步。
官方網(wǎng)站
軟件包:rsync,rsync-daemon(CentOS 8)
服務(wù)文件:/usr/lib/systemd/system/rsyncd.service
配置文件:/etc/rsyncd.conf
端口:873/tcp
5.3.1 rsync 命令
#Local:
rsync [OPTION...] SRC... [DEST]#Access via remote shell:
Pull:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST:DEST#Access via rsync daemon:
Pull:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync 有三種工作方式:
- 本地文件系統(tǒng)上實(shí)現(xiàn)同步。命令行語(yǔ)法格式為上述"Local"段的格式。
- 本地主機(jī)使用遠(yuǎn)程 shell 和遠(yuǎn)程主機(jī)通信。命令行語(yǔ)法格式為上述"Access via
remote shell"段的格式。 - 本地主機(jī)通過(guò)網(wǎng)絡(luò)套接字連接遠(yuǎn)程主機(jī)上的 rsync daemon。命令行語(yǔ)法格式為上述
"Access viarsync daemon"段的格式。
前兩者的本質(zhì)是通過(guò)本地或遠(yuǎn)程 shell,而第 3 種方式則是讓遠(yuǎn)程主機(jī)上運(yùn)行 rsyncd
服務(wù),使其監(jiān)聽在一個(gè)端口上,等待客戶端的連接
rsync 常見選項(xiàng)
-v:顯示rsync過(guò)程中詳細(xì)信息??梢允褂?span id="vxwlu0yf4" class="token string">"-vvvv"獲取更詳細(xì)信息。
-P:顯示文件傳輸?shù)倪M(jìn)度信息。(實(shí)際上"-P"="--partial --progress",其中的"--progress"才是顯
示進(jìn)度信息的)。
-n --dry-run :僅測(cè)試傳輸,而不實(shí)際傳輸。常和"-vvvv"配合使用來(lái)查看rsync是如何工作的。
-a --archive :歸檔模式,表示遞歸傳輸并保持文件屬性。等同于"-rtopgDl"。
-r --recursive:遞歸到目錄中去。
-t --times:保持mtime屬性。強(qiáng)烈建議任何時(shí)候都加上"-t",否則目標(biāo)文件mtime會(huì)設(shè)置為系統(tǒng)時(shí)間,
導(dǎo)致下次更新:檢查出mtime不同從而導(dǎo)致增量傳輸無(wú)效。
-o --owner:保持owner屬性(屬主)。
-g --group:保持group屬性(屬組)。
-p --perms:保持perms屬性(權(quán)限,不包括特殊權(quán)限)。
-D :是"--device --specials"選項(xiàng)的組合,即也拷貝設(shè)備文件和特殊文件。
-l --links:如果文件是軟鏈接文件,則拷貝軟鏈接本身而非軟鏈接所指向的對(duì)象
-z :傳輸時(shí)進(jìn)行壓縮提高效率
-R --relative:使用相對(duì)路徑。意味著將命令行中指定的全路徑而非路徑最尾部的文件名發(fā)送給服務(wù)端,
包括它們的屬性。用法見下文示例。
--size-only :默認(rèn)算法是檢查文件大小和mtime不同的文件,使用此選項(xiàng)將只檢查文件大小。
-u --update :僅在源mtime比目標(biāo)已存在文件的mtime新時(shí)才拷貝。注意,該選項(xiàng)是接收端判斷的,不會(huì)
影響刪除行為。
-d --dirs :以不遞歸的方式拷貝目錄本身。默認(rèn)遞歸時(shí),如果源為"dir1/file1",則不會(huì)拷貝dir1
目錄,使用該選項(xiàng)將拷貝dir1但不拷貝file1。
--max-size :限制rsync傳輸?shù)淖畲笪募笮???梢允褂脝挝缓缶Y,還可以是一個(gè)小數(shù)值(例如:"--
max-size=1.5m")
--min-size :限制rsync傳輸?shù)淖钚∥募笮?。這可以用于禁止傳輸小文件或那些垃圾文件。
--exclude :指定排除規(guī)則來(lái)排除不需要傳輸?shù)奈募?--delete :以SRC為主,對(duì)DEST進(jìn)行同步。多則刪之,少則補(bǔ)之。注意"--delete"是在接收端執(zhí)行
的,所以它是在:exclude/include規(guī)則生效之后才執(zhí)行的。
-b --backup :對(duì)目標(biāo)上已存在的文件做一個(gè)備份,備份的文件名后默認(rèn)使用"~"做后綴。
--backup-dir:指定備份文件的保存路徑。不指定時(shí)默認(rèn)和待備份文件保存在同一目錄下。
-e :指定所要使用的遠(yuǎn)程shell程序,默認(rèn)為ssh。
--port :連接daemon時(shí)使用的端口號(hào),默認(rèn)為873端口。
--password-file:daemon模式時(shí)的密碼文件,可以從中讀取密碼實(shí)現(xiàn)非交互式。注意,這不是遠(yuǎn)程
shell認(rèn)證的密碼,而是rsync模塊認(rèn)證的密碼。
-W --whole-file:rsync將不再使用增量傳輸,而是全量傳輸。在網(wǎng)絡(luò)帶寬高于磁盤帶寬時(shí),該選項(xiàng)比增
量傳輸更高效。
--existing :要求只更新目標(biāo)端已存在的文件,目標(biāo)端還不存在的文件不傳輸。注意,使用相對(duì)路徑時(shí)如
果上層目錄不存在也不會(huì)傳輸。
--ignore-existing:要求只更新目標(biāo)端不存在的文件。和"--existing"結(jié)合使用有特殊功能,見下文
示例。
--remove-source-files:要求刪除源端已經(jīng)成功傳輸?shù)奈募?
5.3.2 以獨(dú)立服務(wù)方式運(yùn)行 rsync
范例:以獨(dú)立服務(wù)方式運(yùn)行 rsync,該服務(wù)在備份服務(wù)器上運(yùn)行
#創(chuàng)建rsync服務(wù)器的配置文件
vi /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.8.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass
# 服務(wù)器端準(zhǔn)備目錄
mkdir /backup
# 服務(wù)器端生成驗(yàn)證文件
echo "rsyncuser:magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
# 服務(wù)器端啟動(dòng)rsync服務(wù)
rsync --daemon #可加入/etc/rc.d/rc.local實(shí)現(xiàn)開機(jī)啟動(dòng)
systemctl start rsyncd #CentOS 7 以上版本
# 客戶端配置密碼文件
echo "magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass #此為必要項(xiàng)
# 客戶端測(cè)試同步數(shù)據(jù)
rsync -avz --delete --password-file=/etc/rsync.pass /data/ \
rsyncuser@rsync服務(wù)器IP::backup
5.4 同步腳本示例
- 該同步腳本在需要備份的主機(jī)上(客戶端)運(yùn)行
#!/bin/bash
SRC='/data/htdocs/pics'
DEST='rsyncuser@rsync-setver-IP::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR
FILE;doFILEPATH=${DIR}${FILE}rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done
六.案例
實(shí)現(xiàn)基于分布式的 LAMP 架構(gòu),并將 NFS 實(shí)時(shí)同步到備份服務(wù)器