FTP服務(wù)器
一、FTP工作模式
1、主動(dòng)模式
- 客戶(hù)端連接到服務(wù)器的21端口
- 當(dāng)客戶(hù)端請(qǐng)求數(shù)據(jù)時(shí),客戶(hù)端連接到服務(wù)器的20端口

2、被動(dòng)模式
- 客戶(hù)端連接到服務(wù)器的21端口
- 當(dāng)客戶(hù)端請(qǐng)求數(shù)據(jù)時(shí),服務(wù)器隨機(jī)開(kāi)啟一個(gè)端口
- 客戶(hù)端連接到服務(wù)端的隨機(jī)端口,獲取數(shù)據(jù)

綜上所述,公司使用FTP服務(wù)器,若采用主動(dòng)模式,因?yàn)榭蛻?hù)端位于防火墻后面,防火墻策略一般不允許入站,也就說(shuō)20端口連接不上客戶(hù)端,這樣FTP服務(wù)器將無(wú)法正常工作;所以采取被動(dòng)模式。(注:特殊情況,防火墻可以配置識(shí)別FTP協(xié)議,允許其入站,這樣的情況下使用主動(dòng)模式也是可以的。)
二、安裝vsftpd
1、安裝
apt install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
2、vsftpd核心文件與目錄列表說(shuō)明
/etc/logrotate.d/vsftpd -- 日志輪轉(zhuǎn)備份配置文件
/etc/pam.d/vsftpd -- 基于PAM的vsftpd驗(yàn)證配置文件
/etc/vsftpd -- vsftpd軟件主目錄
/etc/vsftpd/vsftpd.conf -- vsftpd主配置文件
/etc/vsftpd/ftpusers -- 默認(rèn)的vsftpd黑名單
/etc/vsftpd/user_list -- 可以通過(guò)主配置文件設(shè)置該文件為黑名單或白名單
/var/ftp -- 默認(rèn)vsftpd共享目錄
三、配置文件(配置虛擬用戶(hù))
1、主配置文件設(shè)置
################## Global Setting ############
listen=no
listen_ipv6=YES
write_enable=YES
local_umask=022
anon_umask=022
max_login_fails=5
xferlog_enable=YES
xferlog_std_format=YES
chroot_local_user=YES
pam_service_name=vsftpd.pam
userlist_enable=YES
tcp_wrappers=YES
connect_from_port_20=YES
pasv_enable=YES
pasv_max_port=24600
pasv_min_port=24500
ftpd_banner=Welcome to FTP Server
#### User Setting ########################
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=vsftp
#### Permission ####################
anonymous_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#### Guest Setting ############
user_config_dir=/etc/vsftpd/vsftpd_user_conf
user_sub_token=$USER
allow_writeable_chroot=YES
四、配置虛擬用戶(hù)
1、創(chuàng)建虛擬用戶(hù)數(shù)據(jù)庫(kù)
? 創(chuàng)建明文密碼文件vlogin,明文文件奇數(shù)行為用戶(hù),偶數(shù)行為密碼;然后使用db_load工具將vlogin文件轉(zhuǎn)化為數(shù)據(jù)庫(kù)文件。
#安裝db_load工具
apt install libdb_utils
#將vlogin文件轉(zhuǎn)化為數(shù)據(jù)庫(kù)文件
db_load -T -t hash -f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db
#修改文件權(quán)限以增強(qiáng)數(shù)據(jù)安全性
chmod 600 /etc/vsftpd/{vlogin,vlogin.db}
2、創(chuàng)建pam文件,用于虛擬賬戶(hù)驗(yàn)證
? PAM文件中的db選項(xiàng)用于指定并驗(yàn)證賬戶(hù)和密碼的數(shù)據(jù)庫(kù)文件,數(shù)據(jù)庫(kù)文件無(wú)需添加.db后綴。
[root@ubuntu ~]#cat /etc/pam.d/vsftpd.pam
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
3、設(shè)置虛擬用戶(hù)目錄
? 所有的虛擬用戶(hù)最終都映射到一個(gè)真實(shí)的系統(tǒng)賬戶(hù),需添加一個(gè)系統(tǒng)賬戶(hù)
adduser -s /sbin/nologin vsftp
4、設(shè)置每個(gè)虛擬用戶(hù)的獨(dú)立共享路徑
#主配置文件添加
user_config_dir=/etc/vsftpd/vsftpd_user_conf
user_sub_token=$USER
allow_writeable_chroot=YES
#創(chuàng)建一個(gè)基于賬戶(hù)的配置目錄,在該目錄下可創(chuàng)建若干個(gè)與賬戶(hù)名稱(chēng)同名的文件,并在此文件為此賬戶(hù)設(shè)置獨(dú)立的配置選項(xiàng)
mkdir /etc/vsftpd/vsftpd_user_conf
#單獨(dú)設(shè)置tomcat001賬戶(hù)的共享路徑
[root@ubuntu ~]#cat /etc/vsftpd/vsftpd_user_conf/tomcat001
local_user=/home/vsftp/$USER
5、重啟服務(wù)
systemctl restart vsftpd
至此,F(xiàn)TP服務(wù)器基于多用戶(hù)的操作已完成,用戶(hù)可創(chuàng)建和刪除目錄,創(chuàng)建和刪除文件。
附件1:user.sh
通過(guò)腳本的方式,創(chuàng)建和刪除虛擬用戶(hù)
- 創(chuàng)建用戶(hù)
./user.sh -c tomcat-001
- 刪除用戶(hù)
./user.sh -d tomcat-001
#!/bin/bash
#set -x
PASSWD=/etc/vsftpd/vlogin
HOME=/home/vsftp
CONFIG=/etc/vsftpd/vsftpd_user_conf
function create(){
#create user and passwd
cat ${PASSWD} |grep -w $1 && echo "User is already exists!" && exit 1
passwd=$(openssl rand -base64 8)
echo "$1" >> ${PASSWD}
echo "${passwd}" >> ${PASSWD}
db_load -T -t hash -f ${PASSWD} ${PASSWD}.db
#create home diretory
mkdir ${HOME}/$1
chown -R vsftp:vsftp ${HOME}/$1
#create config file
echo "local_root=${HOME}/$1" > ${CONFIG}/$1
echo -e "用戶(hù)名:$1 \n密碼:${passwd}"
}
function delete(){
cat ${PASSWD} |grep -w $1 || echo "User does not exist!" && exit 1
sed -i '/^'$1'$/,+1d' ${PASSWD}
rm -f ${PASSWD}.db
db_load -T -t hash -f ${PASSWD} ${PASSWD}.db
rm -rf ${HOME}/$1
rm -f ${CONFIG}/$1
echo "$1 is delete!"
}
case $1 in
-c)
create $2
;;
-d)
delete $2
;;
*)
echo "Usage:$0 [-c [username]] | [-d [username]]"
;;
esac