一、ftp协议及原理
- ftp文件传输协议:是C/S结构应用,监听的控制端口是tcp协议的20、21号端口。
-
ftp的连接模式(传输模式):ftp连接的过程:先建立控制连接 --- 传输连接--- 传输数据
- 主动模式:服务端21号端口主动发起控制连接,客户端使用大于1023号端口响应,建立连接后,使用20号端口传输数据,适用于客户端未开启防火墙的环境。
- 被动模式:服务端21号端口被动等待数据连接,客户端使用大于1023号端口进行请求,建立连接后,使用服务器提供被动模式的非20号端口大于1023号端口进行传输数据,适用于客户端开启防火墙的环境。比较常用的模式。
-
ftp的传输方式:ftp客户端自动选择的,无需设置。
- 文本模式:ASCII,没过信息交换标准码,用于文本传输。
- 二进制模式:binary,传输效率高,常用来传输非文本文件,比较常用。
-
ftp的用户类型
- 匿名用户:(anonymous/密码空、ftp/ftp);
- 本地用户:本机的系统用户账号,除匿名用户外;
- 虚拟用户:位于独立文件中的FTP用户账号,用过这种虚拟用户,未提供安全的服务,将ftp服务于linux系统的关联将至最低;
- ftp服务端软件:IIS/Ser-U/vsftpd;
二、vsftpd的配置文件
- 用户列表文件
/etc/vsftpd/ftpusers(禁止登录ftp的用户、黑名单);
/etc/vsftpd/user_list(如果主配置文件中设置了userlist_enable=YES,那么此文件方可生效,若userlist_deny=YES,则仅禁止此列表中用户登录;若userlist_dengy=NO,那么表示仅允许文件中的用户登录ftp) - 主配置文件:/etc/vsftpd/vsftpd.conf
配置项:使用命令man 5 vsftpd.conf查看配置项帮助。
三、配置匿名ftp
系统类型 | IP地址 | 主机名 | 所需软件 |
---|---|---|---|
Centos7.8 | 192.168.100.101 | localhost | vsftpd |
- 安装vsftpd软件程序
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
listen=YES #开启监听
listen_ipv6=NO #禁用ipv6监听
[root@localhost ~]# systemctl start vsftpd.service
[root@localhost ~]# netstat -utpln |grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1384/vsftpd
配置文件中不要加注释,容易报错起不来服务
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
:%g/^#/d #删除多余注释行
anonymous_enable=YES #允许匿名访问
local_enable=NO #不允许本地系统用户访问
write_enable=YES #允许写入权限
local_umask=022 #本地用户上传文件的默认权限掩码
anon_umask=022 #匿名用户上传文件的默认权限掩码
#新添加
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建或上传目录
anon_other_write_enable=YES #允许匿名用户有其他写入权限,比如重命名、删除、覆盖等
dirmessage_enable=YES #允许显示用户切换目录时显示.message文件(如果存在的话)
xferlog_enable=YES #启用xferlog日志,默认记录到/var/log/xferlog
connect_from_port_20=YES #允许服务器主动模式
xferlog_std_format=YES #允许标准xferlog日志模式
listen=YES #允许独立运行的ipv4方式监听服务
listen_ipv6=NO #拒绝独立运行的ipv6方式监听服务
pam_service_name=vsftpd #设置用于用户认证的PAM文件位置,在/etc/pam.d目录中对应的文件名
userlist_enable=NO #禁用user_list用户列表文件
tcp_wrappers=YES #启用tcpwrapper主机访问控制
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# ls -ld /var/ftp/ #匿名认证的根目录权限不可以更改,必须为755
drwxr-xr-x 3 root root 17 8月 7 22:05 /var/ftp/
[root@localhost ~]# ls -ld /var/ftp/pub/
drwxr-xr-x 2 root root 6 8月 3 2017 /var/ftp/pub/
[root@localhost ~]# chmod 777 /var/ftp/pub/
[root@localhost ~]# mkdir /var/ftp/linux
[root@localhost ~]# chmod 777 /var/ftp/linu
[root@localhost ~]# grep 022 /etc/vsftpd/vsftpd.conf
anon_umask=022
- 调整ftp服务器配置,实现本地用户认证共享;
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES #开启本地认证
write_enable=YES
local_umask=077 #本地用户上传文件反掩码
local_root=/opt/www #本地认证的根目录
chroot_local_user=YES #将本地用户禁锢在根目录中
anon_umask=077
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
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES #开启user_list文件
userlist_deny=YES #指定user_list文件为黑名单,NO为白名单
one_process_model=NO #关闭一个连接对应一个进程,减少服务器资源
tcp_wrappers=YES
- 创建本地用户认证的ftp根目录;
[root@localhost ~]# mkdir /opt/www
[root@localhost ~]# chmod 777 /opt/www
[root@localhost ~]# touch /opt/www/test.txt
- 创建本地用户u01和u02;
[root@localhost ~]# useradd u01
[root@localhost ~]# useradd u02
[root@localhost ~]# passwd u01
[root@localhost ~]# passwd u02