FTP
(File Transfer Protocol) 文件传输协议,在互联网上进行文件传输的协议,用于在Internet上控制文件的双向传输,FTP服务端通常部署在企业内网,具有容易搭建,方便管理,安全稳定的特性。
TCP20端口 | FTP数据连接 | 用于数据传输:上传、下载数据 |
---|---|---|
TCP21端口 | FTP控制连接 | 用于接受客户端发出的相关FTP命令与参数 |
'网络文件共享服务主流:ftp、nfs、samba'
FTP登录用户
匿名用户--->系统用户
系统用户--->一般关闭
虚拟用户--->系统用户
FTP传输模式
'主动模式:服务端通过20端口主动向客户端连接,传输数据。主动模式防火墙需要打开21和20端口
被动模式:服务端启动随机端口,等待客户端发起连接,进行数据传输 防火墙只打开21和20端口,被动模式FTP不能下载数据'
总结:
FTP服务端启用防火墙,开启21/20端口,这时FTP只能工作在主动模式
FTP客户端开启防火墙,这时FTP只能选择工作在被动模式
FTP客户端和FTP服务端都有防火墙,那么将无法使用FTP主动和被动模式
FTP服务安装配置
'基础环境准备'
[root@yaoxiaorong ~]# uname -r
3.10.0-693.el7.x86_64
[root@yaoxiaorong ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
'关闭防火墙以及selinux'
[root@yaoxiaorong ~]# systemctl stop firewalld
[root@yaoxiaorong ~]# systemctl disable firewalld
[root@yaoxiaorong ~]# setenforce 0
'安装vsftpd服务并启动服务'
[root@yaoxiaorong ~]# yum install vsftpd db4-utils -y
[root@yaoxiaorong ~]# systemctl start vsftpd
[root@yaoxiaorong ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
'注意:默认使用匿名用户访问共享目录站点为/var/ftp仅拥有下载权限'
/etc/vsftpd/vsftpd.conf配置文件注释
[root@yaoxiaorong ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES '是否启用匿名用户'
local_enable=YES '是否启动本地用户'
write_enable=YES '开启全局上传文件'
local_umask=022 '控制本地用户上传文件默认权限,通过ftp上传文件的默认遮罩码'
anon_umask=022 '控制匿名用户上传文件的默认权限'
anon_upload_enable=YES '允许匿名用户上传'
anon_mkdir_write_enable=YES '允许创建目录'
dirmessage_enable=YES '配置用户目录显示信息'
xferlog_enable=YES '启动日志'
xferlog_file=/var/log/vsftpd.log '指定日志位置,配置xferlog_enable使用'
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES '是否作为一个独立守护进程运行'
chroot_local_user=YES '禁锢所有用户在用户目录下'
chroot_lost_enable=YES '配合chroot_list_file使用'
chroot_list_file=/etc/vsftpd/chroot_list '禁锢用户列表'
pam_service_name=vsftpd 'PAM认证文件'
userlist_enable=YES 'ftpusers文件下的用户都被拒绝登陆访问'
tcp_wrappers=YES
guest_enable=YES '开启虚拟用户'
guest_username=www 'FTP虚拟用户对应的系统用户'
user_config_dir=/etc/vsftpd/ftplogin '授权FTP虚拟用户所在目录'
权限控制
local_root=/data/ftp 指定本地用户访问目录站点
anon_root=/data/ftp 指定匿名用户访问目录站点
资源控制
anon_max_rate=500000 匿名用户限速
local_max_rate=800000 本地用户限速
max_clients=100 同时能接收多少请求
max_per_ip=2 一个IP同时能有多少连接
vsftpd虚拟用户配置
准备环境,关闭防火墙和selinux
[root@yaoxiaorong ~]# setenforce 0
[root@yaoxiaorong ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@yaoxiaorong ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@yaoxiaorong ~]# systemctl stop firewalld
[root@yaoxiaorong ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
vsftpd虚拟用户的配置步骤如下:
'安装依赖的程序'
[root@yaoxiaorong ~]# cd /etc/yum.repos.d/
[root@yaoxiaorong ~]# yum -y install wget
[root@yaoxiaorong ~]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@yaoxiaorong yum.repos.d]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@yaoxiaorong yum.repos.d]# sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@yaoxiaorong ~]# yum -y install epel-release
[root@yaoxiaorong ~]# yum -y install vsftpd
[root@yaoxiaorong ~]# yum -y install db4* '安装db4工具'
创建文本格式的用户名、密码列表,例如添加两个用户tom,yao,密码分别为123、456
[root@yaoxiaorong ~]# echo "tom" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# echo "123" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# echo "yao" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# echo "456" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# cat /etc/vsftpd/vu.list
456
tom
123
yao
456 '用户名和密码都是对应的,前面输入的是账户,后面是密码'
'将刚创建的文本格式用户名、密码文件使用db4工具转换成数据库文件'
-T表示转换,-t表示加密方式使用hash算法加密
[root@yaoxiaorong ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
'将文件权限设置为600,提高虚拟用户账户文件的安全性,避免数据外泄'
[root@yaoxiaorong ~]# chmod 600 /etc/vsftpd/vu.*
[root@yaoxiaorong ~]# ll /etc/vsftpd/vu.*
-rw-------. 1 root root 12288 Aug 8 17:26 /etc/vsftpd/vu.db
-rw-------. 1 root root 20 Aug 8 17:18 /etc/vsftpd/vu.list
添加虚拟用户的映射账户、创建ftp根目录。例如将使用的ftp根目录设置为/var/ftproot 映射账号的名称为vftp
[root@yaoxiaorong ~]# useradd -d /var/ftproot -s /sbin/nologin vftp
[root@yaoxiaorong ~]# chmod 755 /var/ftproot
[root@yaoxiaorong ~]# ll -d /var/ftproot
drwxr-xr-x. 3 vftp vftp 78 Aug 8 17:50 /var/ftproot
'为虚拟用户建立PAM认证'
[root@yaoxiaorong ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
[root@yaoxiaorong ~]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
添加虚拟用户支持,修改配置文件
[root@yaoxiaorong ~]# echo 'guest_enable=YES' >> /etc/vsftpd/vsftpd.conf '允许其他人可以登陆'
[root@yaoxiaorong ~]# echo 'guest_username=vftp' >> /etc/vsftpd/vsftpd.conf '添加其他用户名字为vftp'
[root@yaoxiaorong ~]# echo 'user_config_dir=/etc/vsftpd/vusers_dir' >> /etc/vsftpd/vsftpd.conf
[root@yaoxiaorong ~]# echo 'allow_writeable_chroot=YES' >>/etc/vsftpd/vsftpd.conf
'创建/etc/vsftpd/vusers_dir目录,使tom可以上传文件和创建目录,而yao只能默认的下载权限'
[root@yaoxiaorong ~]# mkdir /etc/vsftpd/vusers_dir
[root@yaoxiaorong ~]# ll /etc/vsftpd
total 36
-rw-------. 1 root root 125 Aug 3 2017 ftpusers
-rw-------. 1 root root 361 Aug 3 2017 user_list
-rw-------. 1 root root 5116 Aug 8 18:08 vsftpd.conf
-rwxr--r--. 1 root root 338 Aug 3 2017 vsftpd_conf_migrate.sh
-rw-------. 1 root root 12288 Aug 8 17:26 vu.db
-rw-------. 1 root root 20 Aug 8 17:18 vu.list
drwxr-xr-x. 2 root root 6 Aug 8 18:21 vusers_dir
'使tom用户可以上传文件,创建目录'
[root@yaoxiaorong ~]# echo 'anon_upload_enable=YES' >> /etc/vsftpd/vusers_dir/tom 允许匿名用户上传
[root@yaoxiaorong ~]# echo 'anon_mkdir_write_enable=YES' >>/etc/vsftpd/vusers_dir/tom 允许匿名用户创建目录,但是不能删除
[root@yaoxiaorong ~]# echo 'anon_umask=022' >> /etc/vsftpd/vusers_dir/tom 控制匿名用户上传文件文件的默认权限
[root@yaoxiaorong ~]# echo 'anon_other_write_enable=YES' >> /etc/vsftpd/vusers_dir/tom 允许匿名用户创建和删除目录
'使yao用户有默认的下载权限,创建一个名叫yao的空文件'
[root@yaoxiaorong ~]# touch /etc/vsftpd/vusers_dir/yao
'启动服务'
[root@yaoxiaorong ~]# systemctl start vsftpd
[root@yaoxiaorong ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
root@yaoxiaorong ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 32 :::21 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
使用脚本创建vsftpd虚拟用户配置
[root@yaoxiaorong ~]# vim ftp.sh
#!/bin/bash
yonghu=tom
yonghu2=jerry
STOREAGE=/etc/vsftpd/vusers_dir
setenforce 0
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
cd /etc/yum.repos.d/
mv * /tmp/
curl -o 163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/163.repo
sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/163.repo
yum -y install epel-release &>/dev/null
yum -y install vsftpd &>/dev/null
yum -y install db4* &>/dev/null
echo "$yonghu" > /etc/vsftpd/vu.list
echo '123' >> /etc/vsftpd/vu.list
echo "$yonghu2" >> /etc/vsftpd/vu.list
echo '456' >> /etc/vsftpd/vu.list
db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
chmod 600 /etc/vsftpd/vu.*
useradd -d /var/ftproot -s /sbin/nologin vftp
chmod 755 /var/ftproot/
mv /etc/pam.d/vsftpd{,.bak}
cat > /etc/pam.d/vsftpd <<EOF
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
EOF
echo 'guest_enable=YES' >> /etc/vsftpd/vsftpd.conf
echo 'guest_username=vftp' >> /etc/vsftpd/vsftpd.conf
echo 'user_config_dir=/etc/vsftpd/vusers_dir' >> /etc/vsftpd/vsftpd.conf
echo 'allow_writeable_chroot=YES' >>/etc/vsftpd/vsftpd.conf
if [ ! -d $STOREAGE ];then
mkdir -p $STOREAGE
fi
echo 'anon_upload_enable=YES' >> /etc/vsftpd/vusers_dir/$yonghu
echo 'anon_mkdir_write_enable=YES' >> /etc/vsftpd/vusers_dir/$yonghu
echo 'anon_umask=022' >> /etc/vsftpd/vusers_dir/$yonghu
echo 'anon_other_write_enable=YES' >> /etc/vsftpd/vusers_dir/$yonghu
touch /etc/vsftpd/vusers_dir/$yonghu1
systemctl start vsftpd
systemctl enable vsftpd
转载于:https://blog.51cto.com/13835001/2155908