本節索引:
一、文件傳輸協議(FTP)
二、vsftpd服務
三、實驗:實現基于SSL的FTPS
四、實驗:實現基于文件驗證的vsftpd虛擬用戶
五、實驗:實現基于MySQL驗證的vsftpd虛擬用戶
FTP是File 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
創建自簽名證書
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工具測試
點擊文件–>站點管理器–>新站點,協議選擇SFTP,登錄類型選擇一般
是否信任主機并繼續,點確定
連接成功
四、實驗:基于文件驗證的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/
找到此行,將vsftpd模塊替換為vsftpd.db
pam_service_name=vsftpd==>pam_service_name=vsftpd.db
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登錄成功
五、實驗:實現基于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;
測試連接
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;
三、在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
修改下面一項,原系統用戶無法登錄
pam_service_name=vsftpd.mysql
四、啟動vsftpd服務
service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口開啟情況
netstat -tnlp |grep :21
五、測試:利用FTP客戶端工具,以虛擬用戶登錄驗證結果
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101796