FTP服務基礎

網絡文件共享

本章內容

FTP服務
NFS服務
SAMBA服務mysql

DAS、NAS、SAN(文件)

DAS:開放系統的直連式存儲(Direct-Attached Storage)
磁盤鏈接到本機的電腦上,應用程序訪問磁盤空間的數據時,直接經過本機的文件系統去訪問
直連式存儲與服務器主機之間的鏈接通道一般採用SCSI鏈接,隨着服務器CPU的處理能力愈來愈強,存儲硬盤空間愈來愈大,陣列的硬盤數量愈來愈多,SCSI通道將會成爲IO瓶頸;服務器主機SCSI ID資源有限,可以創建的SCSI通道鏈接有限。linux

NAS:(Network Attached Storage:網絡附屬存儲)按字面簡單說就是鏈接在網絡上,具有資料存儲功能的裝置,所以也稱爲「網絡存儲器」(數據由遠端數據存儲服務器的文件系統進行管理,本地的服務器主機只具備訪問數據的權限)。它是一種專用數據存儲服務器。它以數據爲中心,將存儲設備與服務器完全分離,集中管理數據,從而釋放帶寬、提升性能、下降總擁有成本、保護投資。其成本遠遠低於使用服務器存儲,而效率卻遠遠高於後者。sql

SAN:存儲區域網絡(Storage Area Network)採用網狀通道(Fibre Channel ,簡稱FC,區別與Fiber Channel光纖通道)技術,經過FC交換機鏈接存儲陣列和服務器主機(存儲區域網絡只提供存儲空間,本地的服務器主機把網絡網絡存儲做爲塊設備映射到本身的主機上,利用本機的文件系統管理數據。),創建專用於數據存儲的區域網絡。SAN通過十多年曆史的發展,已經至關成熟,成爲業界的事實標準(但各個廠商的光纖交換技術不徹底相同,其服務器和SAN存儲有兼容性的要求)。
shell

文件傳輸協議(FTP)

File Transfer Protocol 早期的三個應用級協議之一
http協議,ftp協議,郵件協議(smtp,pop)最先的三個應用級協議數據庫

基於C/S結構apache

FTP服務與客戶端鏈接採用雙通道鏈接協議,一個通道負責傳輸指令鏈接以及協商數據傳輸的隨機端口,一個通道負責傳輸數據鏈接
數據傳輸格式:二進制(默認)和文本 (asicc),以文本格式傳輸數據時linux的文本格式與windows文本格式存在差別,數據傳輸時系統會作自動轉換形成數據破壞。建議使用二進制(binary)形式傳輸文件。vim

兩種模式:主動與被動都是在服務器數據傳輸的角度來定義的,FTP服務的數據傳輸能夠有兩種模式,主動與被動模式。
主動模式是指服務器固定的數據傳輸tcp20端口主動去鏈接客戶端,客戶端的數據鏈接端口爲隨機端口,服務器與客戶端會事先在命令傳輸通道協商好該隨機端口的端口號。主動鏈接模式下每每會由於客戶端有防火牆而鏈接失敗。windows

通常狀況下,FTP服務的數據傳輸通道都採用被動鏈接模式。被動模式是指在數據傳輸通道中客戶端向FTP服務器發起鏈接請求,而FTP服務端通常會設置企業級的防火牆,該防火牆具備數據的跟蹤功能,FTP服務器的防火牆會記錄客戶端的與服務端在命令傳輸通道協商出的數據傳輸通道端口,從而設置防火牆策略開放該端口的鏈接。centos

主動(PORT style):對於數據端口來講服務器主動鏈接客戶端,經過命令端口協商出來客戶端的隨機數據端口,服務器使用固定的tcp20數據端口去鏈接客戶端的隨機數據端口。
命令(控制):客戶端:隨機port --->服務器:tcp21
數據:客戶端:隨機port+1 <---服務器:tcp20瀏覽器

被動(PASV style):客戶端鏈接服務器的固定tcp21命令傳輸端口,協商出服務器數據端口的隨機端口號,並使用客戶端的隨機端口去鏈接服務器的協商出來的數據隨機端口。
命令(控制):客戶端:隨機port ---> 服務器:tcp21
數據:客戶端:隨機port+1 --->服務器:隨機port

服務器被動模式數據端口示例:
227 Entering Passive Mode (192,168,175,138,224,59)
服務器數據端口爲:224*256+59

通常狀況下FTP服務器會兼容兩種數據傳輸通道的鏈接模式,數據傳輸時究竟使用被動模式仍是使用主動模式,每每取決與客戶端。客戶端在訪問FTP服務器時,能夠根據自身的狀況選擇使用被動模式仍是主動模式去鏈接FTP服務器。在通常的FTP命令行客戶端工具中都會由passive命令去控制主動被動模式鏈接開關。

FTP服務的實現使用主動模式仍是被動模式,通常有客戶端設置。

FTP軟件介紹

FTP服務器:
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器 高速,穩定,下載速度是WU-FTP的兩倍 ftp,redhat.com數據:單機最多可支持15000個併發

客戶端軟件: ftp,lftp,lftpget,wget,curl
ftp -A ftpserver port -A主動模式 –p 被動模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file
gftp: GUI centos5 最新版2.0.19 (11/30/2008)
filezilla(開源免費的linuxftp客戶端軟件,支持ssh協議),CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver

FTP服務介紹

狀態碼:

1XX:信息 125:數據鏈接打開
2XX:成功類狀態 200:命令OK 230:登陸成功
3XX:補充類 331:用戶名OK
4XX:客戶端錯誤 425:不能打開數據鏈接
5XX:服務器錯誤 530:不能登陸

用戶認證:

http服務訪問服務時通常不用進行身份驗證以匿名用戶身份進行訪問,可是ftp服務通常須要用戶驗證,當使用圖形界面的瀏覽器去訪問ftp服務時系統會自動進行用戶認證,以ftp用戶或者anonymous用戶進行訪問,與匿名用戶概念類似。
匿名用戶:ftp,anonymous,對應Linux用戶ftp
系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
nsswitch:network service switch名稱解析框架
pam:pluggable authentication module 用戶認證
/lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服務

vsftp相關文件

由vsftpd包提供

[root@CentOS7 ~]#rpm -qf `which vsftpd`
vsftpd-3.0.2-22.el7.x86_64

再也不由xinetd管理
用戶認證配置文件:/etc/pam.d/vsftpd

服務腳本:
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd #服務名vsftpd

配置文件:/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value(鍵值對形式)
注意:=先後不要有空格

匿名用戶(映射爲系統用戶ftp )共享文件位置:/var/ftp
系統用戶共享文件位置:用戶家目錄
虛擬用戶共享文件位置:爲其映射的系統用戶的家目錄

對於http服務來講系統會以apache用戶身份運行服務,可是vsftpd服務運行的身份是root

vsftpd服務配置

端口配置

命令端口 listen_port=21

主動模式端口
connect_from_port_20=YES 主動模式端口爲20
ftp_data_port=20 指定主動模式的端口

被動模式端口範圍
定義被動模式端口範圍在於當企業的防火牆不支持追蹤模式的狀況下, 經過定義有限的ftp服務的被動模式端口範圍,便於防火牆設置訪問限制策略。
linux客戶端默認使用被動模式
windows 客戶端默認使用主動模式
pasv_min_port=6000 0爲隨機分配
pasv_max_port=6010

時間設置

使用當地時間
use_localtime=YES 使用當地時間(默認爲NO,使用GMT)

匿名用戶

anonymous_enable=YES 支持匿名用戶
no_anon_password=YES(默認NO) 匿名用戶略過口令檢查
anon_world_readable_only (默認YES)只能下載所有讀的文件
anon_upload_enable=YES 匿名上傳,注意:文件系統權限
anon_mkdir_write_enable=YES anon_other_write_enable=YES 可刪除和修改上傳的文件
anon_umask=077 指定匿名上傳umask
指定上傳文件的默認的全部者和權限
chown_uploads=YES(默認NO)
chown_username=wang
chown_upload_mode=0644

linux系統用戶

guest_enable=YES 全部系統用戶都映射成guest用戶
guest_username=ftp 配合上面選項才生效,指定guest用戶
local_enable=YES 是否容許linux用戶登陸
write_enable-YES 容許linux用戶上傳文件
local_umask=022 指定系統用戶上傳文件的默認權限
local_root=/ftproot 非匿名用戶登陸所在目錄

禁錮全部系統用戶在家目錄中

chroot_local_user=YES(默認NO,不由錮)禁錮系統用戶

禁錮或不由錮特定的系統用戶在家目錄中

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
當chroot_local_user=YES時,則chroot_list中用戶不由錮
當chroot_local_user=NO時,則chroot_list中用戶禁錮

wu-ftp日誌:

默認啓用
xferlog_enable=YES (默認)啓用記錄上傳下載日誌
xferlog_std_format=YES (默認)使用wu-ftp日誌格式
xferlog_file=/var/log/xferlog (默認)可自動生成

vsftpd日誌:

默認不啓用
dual_log_enable=YES 使用vsftpd日誌格式,默認不啓用
vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成

登陸提示信息

ftpd_banner=「welcome to ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 獨立文件優先生效
文件加顏色:同時按ctrl、v、[ 鍵再加配色

[root@CentOS7 ~]#vim color
^[[32mThis is Green ^[[0m

目錄訪問提示信息

dirmessage_enable=YES (默認)
message_file=.message(默認)信息存放在指定目錄下.message

使用pam實現用戶認證

主配置文件中定義了vsftpd服務調用了pam模塊:
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd #設置pam策略

[root@CentOS7 ~]#vim /etc/pam.d/vsftpd 
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth
#定義了基於用戶身份的驗證,在/etc/vsftpd/ftpuser文件中的用戶拒絕訪問

/etc/vsftpd/ftpusers 默認文件中用戶拒絕登陸

是否啓用控制用戶登陸的列表文件

userlist_enable=YES 默認有此設置
userlist_deny=YES(默認值)黑名單,不提示口令,NO爲白名單
userlist_file=/etc/vsftpd/users_list 此爲默認值

鏈接限制

max_clients=0 最大併發鏈接數
max_per_ip=0 每一個IP同時發起的最大鏈接數

vsftpd指定用戶身份運行

nopriv_user=nobody

傳輸速率:字節/秒

anon_max_rate=0 匿名用戶的最大傳輸速率
local_max_rate=0 本地用戶的最大傳輸速率

鏈接時間:秒爲單位

connect_timeout=60 主動模式數據鏈接超時時長
accept_timeout=60 被動模式數據鏈接超時時長
data_connection_timeout=300 數據鏈接無數據輸超時時長
idle_session_timeout=60 無命令操做超時時長

優先以文本方式傳輸

ascii_upload_enable=YES
ascii_download_enable=YES

非獨立方式運行

更改主配置文件中監聽方式:
listen=NO,FTP服務默認爲獨立方式
而後編輯xinetd服務腳本,能夠參考其餘非獨立服務的腳本好比telnet服務複製一份稍加修改便可。

cat  /etc/xinetd.d/vsftpd 
service ftp 
{ 
    flags           = REUSE 
    socket_type     = stream 
    wait            = no 
    user            = root 
    server          = /usr/sbin/vsftpd #程序路徑
    log_on_failure  += USERID 
    disable         = no 
}

實現基於SSL的FTPS

查看是否支持SSL
ldd which vsftpd 查看到libssl.so

建立自簽名證書
cd /etc/pki/tls/certs/
make vsftpd.pem openssl x509 -in vsftpd.pem -noout –text

配置vsftpd服務支持SSL:/etc/vsftpd/vsftpd.conf
ssl_enable=YES 啓用SSL
allow_anon_ssl=NO 匿名不支持SSL
force_local_logins_ssl=YES 本地用戶登陸加密
force_local_data_ssl=YES 本地用戶數據傳輸加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem #證書路徑

用filezilla等工具測試,命令行界面下的ftp客戶端工具好比lftp不支持加密模式訪問vsftpd服務。

vsftpd虛擬用戶概念

虛擬用戶:
全部虛擬用戶會統一映射爲一個指定的系統賬號:訪問共享位置,即爲此係統賬號的家目錄
各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定

虛擬用戶賬號的存儲方式:
一、文件:編輯文本文件,此文件須要被編碼爲hash
格式奇數行爲用戶名,偶數行爲密碼
db_load -T -t hash -f vusers.txt vusers.db #使用該工具將文本轉化爲hash格式

二、關係型數據庫中的表中:
實時查詢數據庫完成用戶認證
mysql庫:pam要依賴於pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README

實現基於文件驗證的vsftpd虛擬用戶

1、建立用戶數據庫文件
• 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、建立用戶和訪問FTP目錄
• useradd -d /var/ftproot -s /sbin/nologin vuser
• chmod +rx /var/ftproot/
#虛擬用戶不能訪問磁盤數據,因此須要建立一個系統用戶去代替虛擬用戶去訪問磁盤數據

• centos7 還須要執行如下操做:
• chmod -w /var/ftproot/
• mkdir /var/ftproot/upload
• setfacl -m u:vuser:rwx /var/ftproot/upload
3、建立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
4、指定pam配置文件
• vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
5、SELinux設置:
禁用SELinux 或者 setsebool -P ftpd_full_access 1
6、虛擬用戶創建獨立的配置文件
mdkir /etc/vsftpd/vusers.d/ 建立配置文件存放的路徑
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/ 進入此目錄
容許wang用戶可讀寫,其它用戶只讀
vim wang 建立各用戶自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim mage 建立各用戶自已的配置文件
local_root=/ftproot 登陸目錄改變至指定的目錄

實現基於MYSQL驗證的vsftpd虛擬用戶

說明:本實驗在兩臺CentOS主機上實現,一臺作爲FTP服務 器,一臺作數據庫服務器

1、安裝所須要包和包組:
在數據庫服務器上安裝包:
• Centos7:在數據庫服務器上安裝
yum –y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb
• Centos6:在數據庫服務器上安裝
yum –y install mysql-server

在FTP服務器上安裝vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
yum install vsftpd pam_mysql

centos7:無對應rpm包,需手動編譯安裝
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下載pam_mysql-0.7RC1.tar.gz ftp://172.16.0.1/pub/Sources/sources/pam/
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
make
make install

2、在數據庫服務器上建立虛擬用戶帳號
1.創建存儲虛擬用戶數據庫和鏈接的數據庫用戶
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;

ftp服務和mysql不在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.%.%' IDENTIFIED BY '0315';

ftp服務和mysql在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY '0315';
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY '0315';
mysql> FLUSH PRIVILEGES;

2.準備相關表
mysql> USE vsftpd;
Mysql> SHOW TABLES;
mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL );
mysql>DESC users;
測試鏈接 mysql -uvsftpd -h 172.16.200.200 -pmagedu
mysql> SHOW DATABASES;

3.添加虛擬用戶
根據須要添加所須要的用戶,爲了安全應該使用PASSWORD 函數加密其密碼後存儲
mysql>DESC users;
mysql> INSERT INTO users(name,password) values(‘wang',password('0315'));
mysql> INSERT INTO users(name,password) values(‘mage',password('0315'));
mysql> SELECT * FROM users;

3、在FTP服務器上配置vsftpd服務
1.在FTP服務器上創建pam認證所需文件
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()函數加密,3表示md5加密,4表示 sha1加密
配置字段說明:
• auth 表示認證
• account 驗證帳號密碼正常使用
• required 表示認證要經過
• pam_mysql.so模塊是默認的相對路徑,是相對/lib64/security/路 徑而言,也能夠寫絕對路徑;後面爲給此模塊傳遞的參數
• user=vsftpd爲登陸mysql的用戶
• passwd=magedu 登陸mysql的的密碼
• host=mysqlserver mysql服務器的主機名或ip地址
• db=vsftpd 指定鏈接msyql的數據庫名稱
• table=users 指定鏈接數據庫中的表名
• usercolumn=name 當作用戶名的字段
• passwdcolumn=password 當作用戶名字段的密碼
• crypt=2 密碼的加密方式爲mysql password()函數加密

2.創建相應用戶和修改vsftpd配置文件,使其適應mysql認證
創建虛擬用戶映射的系統用戶及對應的目錄
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去ftp根目錄的寫權限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
確保/etc/vsftpd.conf中已經啓用瞭如下選項
anonymous_enable=YES
添加下面兩項
guest_enable=YES #全部系統用戶都映射成guest用戶
guest_username=vuser #指定gust用戶爲vuser
修改下面一項,原系統用戶沒法登陸
pam_service_name=vsftpd.mysql

4、啓動vsftpd服務
service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口開啓狀況 netstat -tnlp |grep :21

5、Selinux相關設置:在FTP服務器上執行
• restorecon -R /lib64/security
• setsebool -P ftpd_connect_db 1
• setsebool -P ftp_home_dir 1
• chcon -R -t public_content_rw_t /var/ftproot/

6、測試:利用FTP客戶端工具,以虛擬用戶登陸驗證結果
• tail /var/log/secure

7、在FTP服務器上配置虛擬用戶具備不一樣的訪問權限
vsftpd能夠在配置文件目錄中爲每一個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每一個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄能夠是任意未使用目錄,只須要在 vsftpd.conf指定其路徑及名稱便可
一、配置vsftpd爲虛擬用戶使用配置文件目錄
vim /etc/vsftpd/vsftpd.conf
添加以下選項
user_config_dir=/etc/vsftpd/vusers_config

二、建立所須要目錄,併爲虛擬用戶提供配置文件
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang mage

三、配置虛擬用戶的訪問權限
虛擬用戶對vsftpd服務的訪問權限是經過匿名用戶的相關指令進行的。若是須要讓用戶wang具備上傳文件的權限,能夠修改/etc/vsftpd/vusers_config/wang文件,在裏面添加以下 選項並設置爲YES便可,只讀則設爲NO
注意:需確保對應的映射用戶對於文件系統有寫權限 anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO}

FTP工具

Axel:網絡客戶端工具
下載安裝axel
ftp://172.16.0.1/pub/Sources/6.x86_64/axel/axel2.4-1.el6.rf.x86_64.rpm

axel -n 3 -o /root ftp://172.16.0.1/pub/ISOs/CentOS-7-x86_64Everything-1511.iso

相關文章
相關標籤/搜索