FTP服務介紹及相關實驗

FTP是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用于Internet上的控制文件的雙向傳輸。FTP協議是早期的三個應用級協議之一。

本節索引:

一、文件傳輸協議(FTP)

二、vsftpd服務

三、實驗:實現基于SSL的FTPS

四、實驗:實現基于文件驗證的vsftpd虛擬用戶

五、實驗:實現基于MySQL驗證的vsftpd虛擬用戶

 

FTPFile Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。

用于Internet上的控制文件的雙向傳輸。FTP協議是早期的三個應用級協議之一。

 

基于C/S結構

雙通道協議:數據和命令連接

數據傳輸格式:二進制(默認)和文本

 

兩種模式:

服務器角度

主動(PORT style):服務器主動連接

命令(控制):客戶端:隨機port — 服務器:tcp21

數據: ? ? ? ? ? ? ? ?客戶端:隨機port — 服務器:tcp20

被動(PASV style):客戶端主動連接

命令(控制):客戶端:隨機port — 服務器:tcp21

數據: ? ? ? ? ? ? ? ?客戶端:隨機port — 服務器:隨機port

服務器被動模式數據端口示例:

227 Entering Passive Mode (192,168,175,138,224,59)

服務器數據端口為:224*256+59

 

 

注:Linux客戶端默認使用被動模式

Windows客戶端默認使用主動模式

Linux系統客戶端若要切換主動模式,可使用:

ftp -A ServerIP Port

 

主動連接與被動連接的優缺點:

1.主動連接對FTP服務器的管理有利,但對客戶端的管理不利。因為FTP服務器企圖與客戶端

的高位隨機端口建立連接,而這個端口很有可能被客戶端的防火墻阻塞掉。

2.被動連接對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,CuteFtp,FlashFXP,LeapFtp

IE ftp://username:password@ftpserver

 

狀態碼:

1XX:信息類???? 125:數據連接打開

2XX:成功類狀態 200:命令OK 230:登錄成功

3XX:補充類???? 331:用戶名OK

4XX:客戶端錯誤 425:不能打開數據連接

5XX:服務器錯誤 530:不能登錄

 

用戶認證:

匿名用戶: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服務

vsftpd全稱為”Very Secure FTP Daemon“,意為非常安全的FTP守護進程,vsftpd最初發展理念

就是建構一個以安全為重心的FTP服務器。

 

由vsftpd包提供,CentOS 7之后不再由xinetd管理

用戶認證配置文件:

/etc/pam.d/vsftpd

 

服務腳本:

/usr/lib/systemd/system/vsftpd.service

/etc/rc.d/init.d/vsftpd

 

配置文件:

/etc/vsftpd/vsftpd.conf

格式:option=value

注意:= 前后不要有空格

 

匿名用戶(映射為系統用戶ftp )登錄的根目錄位置:/var/ftp

系統用戶共享文件位置:用戶家目錄

虛擬用戶共享文件位置:為其映射的系統用戶的家目錄

 

vsftpd虛擬用戶

虛擬用戶:

所有虛擬用戶會統一映射為一個指定的系統帳號:訪問共享位置,即為此系統帳號

的家目錄

各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定

虛擬用戶帳號的存儲方式:

文件:編輯文本文件,此文件需要被編碼為hash格式

奇數行為用戶名,偶數行為密碼

db_load -T -t hash -f vusers.txt vusers.db

關系型數據庫中的表中:

實時查詢數據庫完成用戶認證

mysql庫:pam要依賴于pam-mysql

/lib64/security/pam_mysql.so

/usr/share/doc/pam_mysql-0.7/README

 

vsftpd.conf常用配置

幫助查詢:

man 5 vsftpd.conf

 

重設命令端口

listen_port=21

 

主動模式端口

connect_from_port_20=YES???? 主動模式端口為20

ftp_data_port=20???????????? 指定主動模式的端口

 

被動模式端口范圍

Linux客戶端默認使用被動模式

Windows客戶端默認使用主動模式

pasv_min_port=6000?????????? 0為隨機分配

pasv_max_port=6010

可以通過為FTP服務器指定一個有限的端口范圍來減小服務器端口暴露的風險

 

使用當地時間

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_umask=077??????????????? 指定匿名上傳文件的umask

anon_other_write_enable=YES?? 可刪除和修改上傳的文件

 

指定上傳文件的默認的所有者和權限

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中用戶禁錮

 

ftp日志

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 mage ftp server”

banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效

目錄訪問提示信息

dirmessage_enable=YES (默認)

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

 

使用PAM完成用戶認證

pam_service_name=vsftpd

pam配置文件:/etc/pam.d/vsftpd

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

/etc/vsftpd/users_list???????? 默認文件中用戶拒絕登錄,不提示口令輸入

是否啟用控制用戶登錄的列表文件

userlist_enable=YES??????????? 默認有此設置

userlist_deny=YES(默認值)????? 黑名單,不提示口令,NO為白名單

userlist_file=/etc/vsftpd/users_list 此為默認值

 

連接限制

max_clients=0????????????????? 最大并發連接數

max_per_ip=0?????????????????? 每個IP同時發起的最大連接數

生成環境一般會將最大并發連接數按需設置;單個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

 

配置FTP服務以非獨立服務方運行:listen=NO,默認為獨立方式

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

前期準備:

FTP服務器:CentOS7.4

IP地址:192.168.30.10

具體步驟:

查看是否支持SSL

ldd `which vsftpd` 查看到libssl.so

1

創建自簽名證書

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 指定證書位置

2

用filezilla工具測試

點擊文件–>站點管理器–>新站點,協議選擇SFTP,登錄類型選擇一般

3

是否信任主機并繼續,點確定

4

連接成功

5

 

四、實驗:基于文件驗證的vsftpd虛擬用戶

前期準備:

Ftp服務器: CentOS 7.4????? 192.168.30.10

訪問端:CentOS7.5 ???????192.168.30.17

 

具體步驟:

1.創建用戶數據庫文件

vim /etc/vsftpd/vusers.txt

vuse1

centos

vuse2

wxlinux

cd /etc/vsftpd/

轉換為db型文件

db_load -T -t hash -f vusers.txt vusers.db

chmod 600 vusers.db

 

2.創建用戶和訪問FTP目錄

useradd -d /data/ftp -s /sbin/nologin vuser

chmod +rx /data/ftp/

centos7 還需要執行以下操作:

chmod -w /data/ftp/

mkdir /data/ftp/upload

setfacl -m u:vuser:rwx /data/ftp/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

user_config_dir=/etc/vsftpd/vusers.d/

1

找到此行,將vsftpd模塊替換為vsftpd.db

pam_service_name=vsftpd==>pam_service_name=vsftpd.db

2

5.虛擬用戶建立獨立的配置文件

mdkir /etc/vsftpd/vusers.d/

cd /etc/vsftpd/vusers.d/

創建個用戶自己的配置文件

允許vuser1用戶可讀寫,其他用戶只讀

vim vuser1

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

指定vuse2用戶登錄的根目錄

vim vuser2

local_root=/data/ftp

 

6.測試

切換到另外一臺主機ftp連接,虛擬用戶vuser1,vuser2登錄成功

3

 

五、實驗:實現基于MySQL驗證的vsftpd虛擬用戶

前期準備:

虛擬機2臺

FTP服務器:? CentOS 7.4???? IP:192.168.30.10

MySQL服務器:CentOS 7.5???? IP:192.168.30.17

具體步驟:

一、安裝所需要包和包組:

在數據庫服務器上安裝包:

Centos7:在數據庫服務器上安裝

yum –y install mariadb-server

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

tar xvf pam_mysql-0.7RC1.tar.gz

cd pam_mysql-0.7RC1/

./configure –with-pam-mods-dir=/lib64/security

make

make install

 

二、在數據庫服務器上創建虛擬用戶賬號

1.建立存儲虛擬用戶數據庫和連接的數據庫用戶

mysql> CREATE DATABASE vsftpd;

mysql> SHOW DATABASES;

ftp服務和mysql不在同一主機:

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@’172.16.%.%’ IDENTIFIED BY ‘magedu’;

 

ftp服務和mysql在同一主機:

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@localhost IDENTIFIED BY ‘magedu’;

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@’127.0.0.1′ IDENTIFIED BY ‘magedu’;

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;

1

測試連接

mysql -uvsftpd –h192.168.30.17 -pmagedu

mysql> SHOW DATABASES;

 

3.添加虛擬用戶

根據需要添加所需要的用戶,為了安全應該使用PASSWORD函數加密其密碼后

存儲

mysql> insert into users(name,password) values(‘wang’,password(‘centos’));

mysql> insert into users(name,password) values(‘liu’,password(‘wxlinux’));

mysql> select * from users;

2

 

三、在FTP服務器上配置vsftpd服務

1.在FTP服務器上建立pam認證所需文件

vim /etc/pam.d/vsftpd.mysql 添加如下兩行

auth required pam_mysql.so user=vsftpd passwd=magedu

host=192.168.30.17 db=vsftpd table=users usercolumn=name

passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=magedu

host=192.168.30.17 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_username=vuser

3

修改下面一項,原系統用戶無法登錄

pam_service_name=vsftpd.mysql

4

 

四、啟動vsftpd服務

service vsftpd start;systemctl start vsftpd

chkconfig vsftpd on;systemctl enable vsftpd

查看端口開啟情況

netstat -tnlp |grep :21

 

五、測試:利用FTP客戶端工具,以虛擬用戶登錄驗證結果

5

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101796

(1)
wangxczwangxcz
上一篇 2018-06-26 18:13
下一篇 2018-06-26 18:26

相關推薦

欧美性久久久久