FTP服务器
一、FTP工作模式
1、主动模式
- 客户端连接到服务器的21端口
- 当客户端请求数据时,客户端连接到服务器的20端口
![](https://img.haomeiwen.com/i14137403/b48be6c0bb2aa6f3.png)
2、被动模式
- 客户端连接到服务器的21端口
- 当客户端请求数据时,服务器随机开启一个端口
- 客户端连接到服务端的随机端口,获取数据
![](https://img.haomeiwen.com/i14137403/b5b054058740f03b.png)
综上所述,公司使用FTP服务器,若采用主动模式,因为客户端位于防火墙后面,防火墙策略一般不允许入站,也就说20端口连接不上客户端,这样FTP服务器将无法正常工作;所以采取被动模式。(注:特殊情况,防火墙可以配置识别FTP协议,允许其入站,这样的情况下使用主动模式也是可以的。)
二、安装vsftpd
1、安装
apt install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
2、vsftpd核心文件与目录列表说明
/etc/logrotate.d/vsftpd -- 日志轮转备份配置文件
/etc/pam.d/vsftpd -- 基于PAM的vsftpd验证配置文件
/etc/vsftpd -- vsftpd软件主目录
/etc/vsftpd/vsftpd.conf -- vsftpd主配置文件
/etc/vsftpd/ftpusers -- 默认的vsftpd黑名单
/etc/vsftpd/user_list -- 可以通过主配置文件设置该文件为黑名单或白名单
/var/ftp -- 默认vsftpd共享目录
三、配置文件(配置虚拟用户)
1、主配置文件设置
################## 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
四、配置虚拟用户
1、创建虚拟用户数据库
创建明文密码文件vlogin,明文文件奇数行为用户,偶数行为密码;然后使用db_load工具将vlogin文件转化为数据库文件。
#安装db_load工具
apt install libdb_utils
#将vlogin文件转化为数据库文件
db_load -T -t hash -f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db
#修改文件权限以增强数据安全性
chmod 600 /etc/vsftpd/{vlogin,vlogin.db}
2、创建pam文件,用于虚拟账户验证
PAM文件中的db选项用于指定并验证账户和密码的数据库文件,数据库文件无需添加.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、设置虚拟用户目录
所有的虚拟用户最终都映射到一个真实的系统账户,需添加一个系统账户
adduser -s /sbin/nologin vsftp
4、设置每个虚拟用户的独立共享路径
#主配置文件添加
user_config_dir=/etc/vsftpd/vsftpd_user_conf
user_sub_token=$USER
allow_writeable_chroot=YES
#创建一个基于账户的配置目录,在该目录下可创建若干个与账户名称同名的文件,并在此文件为此账户设置独立的配置选项
mkdir /etc/vsftpd/vsftpd_user_conf
#单独设置tomcat001账户的共享路径
[root@ubuntu ~]#cat /etc/vsftpd/vsftpd_user_conf/tomcat001
local_user=/home/vsftp/$USER
5、重启服务
systemctl restart vsftpd
至此,FTP服务器基于多用户的操作已完成,用户可创建和删除目录,创建和删除文件。
附件1:user.sh
通过脚本的方式,创建和删除虚拟用户
- 创建用户
./user.sh -c tomcat-001
- 删除用户
./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 "用户名:$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
网友评论