FTP

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章