FTP服务部署
ftp传输的机制:
FTP通过21端口与Client端进行指令传输,通过20端口进行数据传输,根据工作模式的不同VSFTP分为主动模式和被动模式2种,大多是情况VSFTP是工作在被动模式下
主动模式:
1.Client端以一个大于1024的随机端口向FTP服务器的21号端口发出建立连接请求
2.Server端收到请求后,会以20端口主动去链接Client端的随机端口+1号端口,如果该端口被占用,则回去找随机端口+2号端口以此类推,直到找Client端空闲的端口
3.Client端与Server端通过20端口进行数据传输
被动模式:
1.Client端以一个大于1024的随机端口向FTP服务器的21号端口发出建立连接请求
2.Server端会通过21号端口给Client端发送一个类似(xyz,ab)的数值来告诉Client端打开的随机端口,同时打开xyz*256+ab端口
3.Client端再通过一个随机端口连接Server端的xyz*256+ab端口进行数据传输
而现实环境中无论是Client端还是Server端都是在防火墙后面,在主动模式下VSFTP会链接Client端的随机+1号端口,Client端显然不会将防火墙上所有随机端口开放;而在被动下问题同样的问题仍然会摆在Server端的防火墙面前,这就需要Server端的防火墙开启连接追踪功能,即放行与21号端口有关联的端口访问请求,这也就是为什么大部分情况下VSFTP是以被动模式工作。
vsftp部署:
环境描述:
服务端系统:CentOS7.5;内存2G;硬盘30G
客户端系统:Windows10 ; 软件:xftp客户端
注意:1)每一步的操作路径,不要混乱
2) 配置的详细介绍在本文章的最后部分展示
3)本次安装vsftpd以yum的形式进行部署
Vsftp的登陆类型:
VSFTP提供了系统用户、匿名用户、和虚拟用户三种不同的登陆方式。所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录;匿名用户也是虚拟用户,映射的系统用户为ftp,详细信息可以通过man vsftpd.conf查看
1.安装vsftp
[root@linuxMA ~]# yum -y install vsftpd*
2.使用rpm –qc 查看vsftpd的配置文件
[root@linuxMA ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
#配置文件详解
/etc/logrotate.d/vsftpd 滚动日志配置文件
/etc/pam.d/vsftpd 认证文件,pam全称为Plugable Authentication
/etc/vsftpd/ftpusers 控制登陆系统用户的机制,出现在该文件中的用户不允许使用ftp服务器,这是在/etc/pam.d/vsftpd中定义的
/etc/vsftpd/user_list 配合/etc/vsftpd/vsftpd.conf中的userlist_enable=YES和userlist_deny=YES|NO实现黑白名单此处需要注意的是:黑白名单的前提是/etc/vsftpd/vsftpd.conf配置文件中userlist_enable=YES,userlist_deny选项默认为YES(黑名单),即该文件中出现的用户不允许登陆VSFTP,就算手动添加userlist_deny=NO(白名单)即只允许该文件中出现的用户允许登陆VSFTP,在VSFTP启动时依然会去检查/etc/vsftpd/ftpusers文件并且禁止该文件中的用户登录
/etc/vsftpd/vsftpd.conf VSFTP主配置文件,所有的配置选项必须顶格写,配置文件中#后带空格的是说明,不带空格的是注释掉的配置选项
3.将cp命令将配置文件备份
[root@linuxMA ~]# cd /etc/vsftpd/
[root@linuxMA vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@linuxMA vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[root@linuxMA vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
1)配置匿名用户
[root@linuxMA vsftpd]# vim vsftpd.conf
write_enable=YES
anon_umask=022
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES (是否允许匿名用户有其他写入权(改名,删除,覆盖)
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#开启vsftp服务,并查看是否启动成功
[root@linuxMA vsftpd]# systemctl start vsftpd
[root@linuxMA vsftpd]# netstat -lnpt |grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 34531/vsftpd
#登陆验证:
#测试登陆成功:
#修改权限:
[root@linuxMA ~]# cd /var/ftp/
[root@linuxMA ftp]# ll
总用量 0
drwxr-xr-x 2 root root 6 8月 3 2017 pub
[root@linuxMA ftp]# chown ftp:ftp pub/
[root@linuxMA ftp]# ll
总用量 0
drwxr-xr-x 2 ftp ftp 21 9月 16 10:16 pub
重点:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效。因为我们是以ftp用户的身份访问的,而pub默认的属主属组是root。
注意:(1)修改完配置之后需要重启完服务才能生效
(2)还需要从新从客户端登陆,否则修改后的配置看不到效果。
2)配置系统用户
1.创建测试用户zhangsan、lisi 密码都为“123456”
[root@linuxMA ~]# useradd zhangsan
[root@linuxMA ~]# useradd lisi
[root@linuxMA ~]# echo "123456" |passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@linuxMA ~]# echo "123456" |passwd --stdin lisi
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
2.修改配置文件
[root@linuxMA ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
[root@linuxMA ~]# vim /etc/vsftpd/user_list //添加用户到白名单
zhangsan
lisi
[root@linuxMA ~]# systemctl restart vsftpd //重启服务
#登陆测试:
#登陆成功:
#添加并进行测试
[root@linuxMA ~]# cd /home/zhangsan/
[root@linuxMA zhangsan]# touch zhangsan.txt
3)配置虚拟用户
1.建立虚拟FTP用户的帐号
[root@linuxMA ~]# useradd -s /sbin/nologin vu
2.创建虚拟用户文件
[root@linuxMA ~]# cd /etc/vsftpd/
[root@linuxMA vsftpd]# vim user
wangwu
12345
maliu
12345
基数行代表用户名,偶数行代表密码
3. 通过db_load工具创建出Berkeley DB格式的数据库文件
[root@linuxMA vsftpd]# db_load -T -t hash -f user user.db
[root@linuxMA vsftpd]# ls
ftpusers user user.db user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
db_load -T -t hash -f user user.db
-f 指定数据原文件
-T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
-t hash 读取文件的基本方法
4. 建立支持虚拟用户的PAM认证文件
[root@linuxMA vsftpd]# vim /etc/pam.d/vsftpd.vu
加入以下两行
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
对应刚才生成user.db的文件
5.修改配置文件
[root@linuxMA vsftpd]# vim vsftpd.conf
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=vu
pam_service_name=vsftpd.vu
local_enable=YES
local_umask=077
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_dir
6. 为用户建立独立的配置目录及文件
[root@linuxMA vsftpd]# mkdir /etc/vsftpd/user_dir
[root@linuxMA vsftpd]# ls
ftpusers user user.db user_dir user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
[root@linuxMA vsftpd]# cd /etc/vsftpd/user_dir
[root@linuxMA user_dir]# vim wangwu
local_root=/etc/vsftpd/data //虚拟用户数据的存放路径
#创建虚拟用户数据存放目录
[root@linuxMA user_dir]# cd ..
[root@linuxMA vsftpd]# mkdir data
[root@linuxMA vsftpd]# chmod 777 data/
#重启服务
[root@linuxMA ]# systemctl restart vsftpd
登陆测试:
#登陆成功。添加文件进行测试
[root@linuxMA vsftpd]# cd data/
[root@linuxMA data]# touch wangwu.txt
重点:本地用户和虚拟用户不能同时登录、因为认证方式只有一种
本地是pam_service_name =vsftpd
虚拟是pam_service_name =vsftpd.vu
配置文件详解
#常用的匿名FTP配置项
anonymous_enable=YES 是否允许匿名用户访问
anon_umask=022 匿名用户所上传文件的权限掩码
anon_root=/var/ftp 设置匿名用户的FTP根目录
anon_upload_enable=YES 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES 是否允许匿名用户允许创建目录
anon_other_write_enable=YES 是否允许匿名用户有其他写入权(改名,删除,覆盖)
anon_max_rate=0 限制最大传输速率(字节/秒)0为无限制
#常用的本地用户FTP配置项
local_enable=YES 是否允许本地系统用户访问
local_umask=022 本地用户所上传文件的权限掩码
local_root=/var/ftp 设置本地用户的FTP根目录
chroot_list_enable=YES 表示是否开启chroot的环境,默认没有开启
chroot_list_file=/etc/vsftpd/chroot_list 表示写在/etc/vsftpd/chroot_list文件里面的用户是不可以出chroot环境的。默认是可以的。
Chroot_local_user=YES 表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。
local_max_rate=0 限制最大传输速率(字节/秒)0为无限制
#常用的全局配置项
listen=YES 是否以独立运行的方式监听服务
listen_address=192.168.4.1 设置监听FTP服务的IP地址
listen_port=21 设置监听FTP服务的端口号
write_enable=YES 是否启用写入权限(上传,删除文件)
download_enable=YES 是否允许下载文件
dirmessage_enable=YES 用户切换进入目录时显示.message文件
xferlog_enable=YES 启用日志文件,记录到/var/log/xferlog
xferlog_std_format=YES 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式
connect_from_port_20=YES 允许服务器主动模式(从20端口建立数据连接)
pasv_enable=YES 允许服务器被动模式
pasv_max_port=24600 设置被动模式服务器的最大端口号
pasv_min_port=24500 设置被动模式服务器的最小端口号
pam_service_name=vsftpd 用户认证的PAM文件位置
(/etc/pam.d/vsftpd.vu)
userlist_enable=YES 是否启用user_list列表文件
userlist_deny=YES 是否禁用user_list中的用户
max_clients=0 限制并发客户端连接数
max_per_ip=0 限制同一IP地址的并发连接数
tcp_wrappers=YES 是否启用tcp_wrappers主机访问控制
chown_username=root 表示匿名用户上传的文件的拥有人是root,默认关闭
ascii_upload_enable=YES 表示是否允许用户可以上传一个二进制文件,默认是不允许的
ascii_download_enable=YES 这个是代表是否允许用户可以下载一个二进制文件,默认是不允许的
nopriv_user=vsftpd 设置支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户
async_abor_enable=YES 设定支持异步传输功能
ftpd_banner=Welcome to Awei FTP servers 设定Vsftpd的登陆标语
guest_enable=YES 设置启用虚拟用户功能
guest_username=ftpuser 指定虚拟用户的宿主用户
virtual_use_local_privs=YES 设定虚拟用户的权限符合他们的宿主用户
user_config_dir=/etc/vsftpd/vconf 设定虚拟用户个人Vsftp的配置文件存放路径