FTP服务的简介和配置详解
注意:配置FTP服务时,最好关闭防火墙和selinux
1、FTP服务简介
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp,下面主要介绍vsftp的特性及相关配置。
2、VSFTP特点
VSFTP是一个比FTP更安全的软件具有以下特点:
(1)vsftp一般以普通用户运行,降低了进程的权限,提高了安全性
(2)任何需要执行较高权限的指令都需要上层程序的许可
(3)ftp的命令都被整合到了vsftp中,不需要系统额外提供命令
(4)用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录
(5)vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写,由此名称缩写可以看出,本服务器的初衷就是服务的安全性。
(6)vsftpd是RedHat Linux默认使用的ftp服务端软件。
(7)vsftpd不再依赖于xinetd服务
(8)vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。
3、VSFTP连接类型
控制连接:TCP 21,用于发送FTP命令信息
数据连接:TCP 20,用于上传、下载数据
4、Vsftp工作模式
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内某个端口被动等待客户端连接
主动模式端口分配:控制端口 21 传输数据端口 20
被动模式端口分配:控制端口 21 传输数据端口 随机
5、VSFTP传输模式
(1)文本模式:ASCII模式,以文本序列传输数据
(2)二进制模式:Binary模式,以二进制序列传输数据
6、FTP用户的类型
(1)匿名用户:anonymous或ftp
(2)本地用户:帐号名称、密码等信息保存在passwd/shadow文件中
(3)虚拟用户:使用独立的帐号/密码数据文件
7、VSFTP配置文件介绍
配置文件作用 | 配置文件路径 |
vsftpd的可执行文件(主程序) | /usr/sbin/vsftpd |
vsftpd启动脚本 | /etc/rc.d/init.d/vsftpd |
vsftpd主配置文件 | /etc/vsftpd/vsftpd.conf |
vsftpd的PAM认证文件 | /etc/pam.d/vsftpd |
禁止使用vsftpd的用户列表文件 | /etc/vsftpd/ftpusers |
禁止或允许使用vsftpd的用户列表文件 | /etc/vsftpd/user_list |
匿名用户主目录 | /var/ftp |
8、vsftpd.conf文件常用的配置参数说明
(1)常用的全局配置
listen_address=192.168.4.1 设置监听的IP地址
listen=YES 是否以独立运行的方式监听服务
listen_port=21 设置监听FTP服务的端口号
write_enable=YES 是否启用写入权限
download_enable=YES 是否允许下载文件
max_clients=0 限制并发客户端连接数
max_per_ip=0 限制同一IP地址的并发连接数
pasv_enable=yes 设置最小的被动端口号
pasv_min_port=9981 设置最小的被动端口号
pasv_max_port=9981 设置最大的被动端口号
dirmessage_enable=yes 是否显示目录说明文件
xferlog_enable=yes 是否记录ftp传输过程
xferlog_file=/var/log/vsftpd.log 日志的路径和名字
xferlog_std_format=yes 是否使用标准的ftp xferlog
chown_username=username 是否改变上传文件的属主,如果是则需要输入一个系统用户名
idle_session_timeout=600 设置默认不活跃session时间
date_connection_timeout=120 设置数据传输超时时间
ftpd_banner=welcome to ftp server 定制欢迎信息
(2)本地用户访问限制
userlist_enable=YES 是否启用user_list列表文件
userlist_deny=YES 是否禁用user_list中的用户
(3)本地用户权限控制
local_enable=YES 是否启用本地系统用户
local_umask=022 本地用户所上传文件的权限掩码
local_root=/var/ftp 设置本地用户的FTP根目录
chroot_local_user=YES 是否将用户禁锢在主目录
local_max_rate=0 限制最大传输速率(字节/秒)
chroot_list_enable=YES 配合下面的文件使用
chroot_list_file=/etc/vsftpd/chroot_list 配合使用,列表中的用户将被禁锢在目录中
说明:本地用户的权限除了使用以上的参数控制以外,还可以使用系统的权限进行控制。ftp的权限和系统的权限都允许时才会放行,只要有一方权限不足使用FTP就会出现权限不足。
(4)匿名权限控制
anonymous_enable=YES 启用匿名访问
anon_umask=022 匿名用户所上传文件的权限掩码
anon_root=/var/ftp 匿名用户的FTP根目录
anon_word_readable_only=YES 允许匿名下载
anon_upload_enable=YES 允许上传文件anon_mkdir_write_enable=YES:允许创建目录
anon_other_write_enable=YES 开放其他写入权
anon_max_rate=0 限制最大传输速率(字节/秒)
说明:匿名用户账号名称默认为ftp或anonymous,不需要登录密码,默认只能下载无法上传。
9、配置拥有所有权限的匿名用户
说明:这里为了展示匿名用户的所有功能才这样配置,实际中不能这样配置。
(1)安装vsftp软件,并按照下面配置修改配置文件
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# chown ftp /var/ftp/pub/
[root@localhost ~]# cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.back
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 启用匿名访问
anon_upload_enable=YES 允许匿名用户可上传文件
anon_mkdir_write_enable=YES 允许匿名用户可创建目录
anon_other_write_enable=YES 开放其他写入权比如改名,需要手动添加
[root@localhost ~]# systemctl restart vsftpd
(2)在windows上或者Linux上测试即可
a、在Windows上文件里面的地址栏输入ftp://192.168.115.120/,如下所示:
输入地址以后,进入pub目录测试能否上传文件、删除文件、创建目录、给文件改名等功能。
b、在Linux中匿名登陆FTP服务器需要先yum install ftp软件,然后输入ftp 192.168.115.120,之后输入用户ftp或者anonymous,密码为空回车即可登陆。
10、配置ftp本地用户的访问控制
(1)把之前的虚拟机还原,重新安装vsftpd软件并创建本地用户
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# chown ftp /var/ftp/pub/
[root@localhost ~]# cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.back
[root@localhost ~]# useradd user1
[root@localhost ~]# useradd user2
[root@localhost ~]# useradd user3
[root@localhost ~]# echo '123456' | passwd --stdin user1
[root@localhost ~]# echo '123456' | passwd --stdin user2
[root@localhost ~]# echo '123456' | passwd --stdin user3
(2)修改配置文件设置本地用户的访问控制
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES 启用本地系统用户
local_umask=000 修改权限掩码为000,用系统的setfacl权限限制即可
chroot_local_user=YES 是否将用户禁锢在local_root设置的目录
local_root=/var/ftp 设置本地用户的FTP根目录
chroot_list_enable=YES 是否启用列表控制,启用后和chroot_list_file配合使用
chroot_list_file=/etc/vsftpd/chroot_list 该文件要自己创建,列表中的用户将被禁锢在目录中
userlist_enable=YES 是否开启用户列表访问控制
userlist_deny=YES 拒绝访问FTP用户列表是否启用
[root@localhost ~]# systemctl restart vsftpd
说明:userlist_enable=YES对应/etc/vsftpd/user_list文件灵活控制用户访问
(a) userlist_enable=YES
userlist_deny=YES
满足这两个条件时,出现在user_list文件里的用户会被拒绝访问FTP服务器
(b) userlist_enable=YES
userlist_deny=NO
满足这两个条件时,只允许出现在user_list文件里的用户登录FTP服务器
(c)只要出现在/etc/vsftpd/ftpusers文件里的用户都禁止登陆FTP服务器,优先级要高于上面的user_list文件
(3)在Windows或Linux中测试上面的配置是否生效
(a)在Windows测试输入:ftp://192.168.115.106之后输入对应的本地用户名和密码登录测试。
(b)在Linux测试之前先yum安装ftp软件,然后输入ftp 192.168.115.106回车然后输入对应的本地用户名回车然后输入密码回车即可进行登录测试 。
(c)如果需要不同用户给予不同的访问权限,可以使用系统的setfacl进行设置。
11、修改vsftpd服务的监听地址、端口
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
listen=YES 是否开启监听地址和端口
listen_address=192.168.115.120 监听的IP地址,写FTP服务器的地址
listen_port=2100 监听的端口,默认为21,建议不修改
注意:上面最后两行的参数需要手动写入。
12、开启使用FTP服务器的被动模式
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
pasv_enable=YES 是否开启被动模式
pasv_min_port=24500 传输数据时随机端口最小值
pasv_max_port=24600 传输数据时随机端口最大值
注意:上面三行的参数需要手动写入。
转载于:https://blog.51cto.com/longlei/2068636