1 FTP、Vsftp介绍
-
1.1 FTP介绍
FTP协议,即文件传输协议(File Transfer Protocol),是一种用于在网络上进行文件传输的协议。它是一种传输文件的标准方式,可以将文件在网络上的不同计算机之间进行传递和下载。FTP协议是TCP/IP协议族中的一个应用层协议。它利用客户端-服务器模型,通过两个不同的端口进行通信。FTP客户端通过21号端口连接到FTP服务器,然后在20号端口上进行数据传输。FTP协议支持多种认证方式,包括明文、口令、SSL/TLS等。FTP在文件传输方面已经得到广泛的应用,它被用于管理网站网页,进行软件升级和备份等。
FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。
目前主流的FTP服务器端软件包括: Vsftpd、ProFTPD、PureFTPd、Wuftpd、Server-U FTP、FileZilla Server等软件,其中Unix/Linux使用较为广泛的FTP服务器端软件为Vsftpd。
-
1.2 Vsftp介绍
VSFTP,全称为Very Secure FTP,是一种高度安全的FTP服务器软件。它是一款针对安全和性能进行优化的FTP服务器,拥有速度快、稳定、易用和安全性高的特点。VSFTP是在GPL许可证下发布的自由软件,可以在大多数类UNIX系统中使用。VSFTP支持IPv6、SSL/TLS加密传输,同时还提供了多种认证方式,包括本地用户、PAM、LDAP等等。同时,VSFTP也支持虚拟用户和虚拟目录,便于管理员进行用户管理。总之,VSFTP是一款功能强大且安全性高的FTP服务器软件,深受系统管理员和开发者的欢迎。
参考:https://blog.csdn.net/m0_64304713/article/details/133790019
2 概念
-
2.1 前言
本文不参与SELinux相关的配置。如果开启SELinux请自行设置相关策略。
getsebool -a | grep ftp获取SELinux所有与ftp相关的安全策略,setsebool命令设置SELinux跟ftp相关的安全策略。
ftp服务有默认两个端口,21和20,21端口是用来建立连接的,也就是控制通道,主要用来登录、切换目录等等操作,20端口是用来传输数据的,也就是数据通道。
-
2.2 三种认证(登录)模式
- 匿名开放模式:任何人都可以登录,不安全!
- 本地用户模式:使用系统中的真实的用户与密码登录,较方便,较安全。但是被黑客获取到账号密码,就可以畅通无阻的登录FTP服务。
- 虚拟用户模式:最安全,该模式为FTP服务单独创建用户数据库,这些用户不是真实存在与系统之中的,而是寄宿在一个真实的系统用户之下。即使系统中的用户信息被泄露,对FTP服务也没有影响。
-
2.3 两种服务模式
- 主动模式(PORT):当客户端与控制通道(21)建立连接后,服务器返回给客户端自己的数据通道端口(20)。服务器从端口主动向客户端建立数据传输通道。
- 被动模式(PASV)(默认):当客户端与控制通道(21)建立连接后,服务器随机返回一个高位端口(如30000-40000)给客户端,客户端根据返回的端口主动向服务器连接数据传输通道。
3 配置介绍
-
3.1 主要配置文件说明
| 配置文件路径 | 说明 |
|---|---|
| /etc/vsftpd/vsftpd.conf | Vsftp服务的核心配置文件 |
| /etc/pam.d/vsftpd |
Vsftp服务使用pam安全模块时相关的策略文件 |
| /etc/vsftpd/ftpusers | PAM层黑名单列表,是 PAM 模块 (/etc/pam.d/vsftpd) 所指定的那个无法登入的用户配置文件 |
| /etc/vsftpd/user_list |
应用层黑/白名单列表,Vsftp服务自定义的列表,具体是黑名单还是白名单由核心配置文件决定 |
| /var/ftp/ | Vsftp服务预设的匿名用户的根目录 |
-
3.2 核心配置
| 参数设定值 | 默认值 | 说明 |
|---|---|---|
| connect_from_port_20=YES|NO | YES | 是否使用20端口进行数据传输 |
| listen=YES|NO | NO | FTP服务的运行模式,YES表示独立守护进行模式,NO表示通过超级服务器。 |
| listen_port=21 | 21 | FTP服务建立连接的端口,FTP文件分为连接端口(发送命令)和数据传输(上传、下载数据)端口。 |
| pasv_enable=YES|NO | YES | 是否使用PASV工作模式(被动模式) |
| use_localtime=YES|NO | NO | 是否使用本地时间作为FTP服务的时间,NO表示使用GMT时间 |
| write_enable=YES|NO | YES | 用户是否拥有写入权限,全局设置。 |
| connect_timeout=60 | 60 | PORT模式(主动模式)下,与客户端建立数据连接的超时时间(秒) |
| accept_timeout=60 | 60 | PASV模式(被动模式)下,等待客户端建立数据连接的超时时间(秒) |
| data_connection_timeout=60 | 60 | 数据传输(上传/下载)通道连接超时时间,超过时间则断开连接(命令和数据连接都会断开) |
| idle_session_timeout=300 | 300 | 多长时间不对FTP服务器进行任何操作,则断开该FTP连接(秒) |
| max_clients=0 | 0 | 允许的最大连接数,为0则表示不受限制 |
| max_per_ip=0 | 0 | 设置每个IP允许与FTP服务器同时建立连接的数目,为0则表示不受限制 |
| pasv_min_port=0 pasv_max_port=0 | 0 | 在PASV模式(被动模式)下,数据连接可以使用端口的范围。为0则表示任意端口 |
| ftpd_banner=文字说明 | 用来定义欢迎话语的字符串,字符串形式 | |
| banner_file=/path/file | 用来定义欢迎话语的字符串,文件形式 | |
| chroot_local_user=YES|NO | NO | 是否将所有用户限制在主目录,YES为启用(启用时要把allow_writeable_chroot也设置为YES才能写入),该配置可以防止用户访问系统中的其他文件和目录,从而提高系统的安全性。 |
| allow_writeable_chroot=YES|NO | NO | 表示是否允许在chroot环境中创建可写文件,write_enable=YES时有效 |
| chroot_list_enable=YES|NO | NO | 是否启动限制用户的名单 |
| chroot_list_file=/etc/vsftpd/chroot_list | 当chroot_local_user=YES时,表示不被限制在主目录下的用户是哪些;当chroot_local_user=NO时,表示要被限制在主目录下的用户是哪些。 | |
| userlist_enable=YES|NO | NO | 是否启用/etc/vsftpd/user_list文件 |
| userlist_deny=YES|NO | YES | 决定user_list文件中的用户是否能够访问FTP服务器; 设置为YES,则vsftpd.user_list文件中的用户不允许访问FTP; 若设置为NO,则只有vsftpd.user_list文件中的用户才能访问FTP; |
| userlist_file=/etc/vsftpd/user_list | 控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行 | |
| xferlog_enable=YES | YES | 是否开启日志功能 |
| xferlog_file=/var/log/vsftpd.log | 日志文件的路径 | |
| ascii_download_enable=YES|NO | NO | 设置是否启用ASCII 模式下载数据 |
| ascii_upload_enable=YES|NO | NO | 设置是否启用ASCII 模式上传数据 |
| tcp_wrappers=YES|NO | YES | 设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制;启用,则vsftpd会检查/etc/hosts.allow 和/etc/hosts.deny 中的配置,来决定请求连接的主机,是否允许访问该FTP服务器 |
| pam_service_name=vsftpd | vsfpd | 设置PAM使用的名称,在/etc/pam.d/vsfpd目录下 |
| local_root=/var/ftp | 默认情况下,用户登录后会进入自己的家目录(如 /home/username)。通过设置 local_root,可将所有用户强制切换到指定目录 | |
| nopriv_user=ftpsecure | ftpsecure | vsftp服务的非特权系统用户。意思是vsftp服务以哪个系统用户执行 |
4 用户配置
-
4.1匿名模式
-
4.1.1 配置参数
| 参数设定值 | 默认值 | 说明 |
|---|---|---|
| anonymous_enable=YES|NO | YES | 是否允许匿名登录 |
| anon_world_readable_only=YES|NO | YES | 是否允许匿名者下载可阅读文件 |
| anon_upload_enable=YES|NO | NO | 是否允许匿名者上传文件,只有在write_enable=YES时,此项才有效。匿名用户必须要有对上层目录的写入权 |
| anon_mkdir_write_enable=YES|NO | NO | 是否允许匿名者创建目录,只有在write_enable=YES时,此项才有效。匿名用户必须要有对上层目录的写入权 |
| anon_other_write_enable=YES|NO | NO | 允许匿名者拥有上传或者建立目录之外的权限;如,删除或者重命名。只有在write_enable=YES时,此项才有效。匿名用户必须要有对上层目录的写入权 |
| deny_email_enable=YES|NO | NO | 启动这项功能,则必须提供一个文件/etc/vsftpd/banner_emails,内容为email address; 若是使用匿名登入,则会要求输入email address; 若输入的email address 在此档案内,则不允许进入; |
| banned_email_file=/etc/vsftpd/banned_emails | 用来输入email address,只有在deny_email_enable=YES时,才会使用到此文件。 | |
| no_anon_password=YES|NO | NO | 值为YES时,则使用匿名登入时,不会询问密码 |
| anon_max_rate=0 | 0 | 设置匿名登入者使用的最大传输速度,单位为字节(B/s),0 表示不限制速度 |
| anon_umask=077 | 077 | 匿名者上传或新增文件、目录时,文件默认的权限。077表示权限600。022表示权限644。 |
| anon_root=/var/ftp | 匿名用户的根目录,默认/var/ftp |
-
4.2 本地用户
-
4.2.1 配置参数
| 参数设定值 | 默认值 | 说明 |
|---|---|---|
| local_enable=YES|NO | YES | 是否允许本地用户的登录 |
| local_max_rate=0 | 0 | 本地用户使用的最大传输速度,单位为B/s,0 表示不限制速度 |
| local_umask=022 | 022 | 本地用户上传的文件默认权限 |
4.3 虚拟用户
4.3.1 配置参数
| 参数设定值 | 默认值 | 说明 |
|---|---|---|
| guest_enable=YES|NO | NO | 是否启用虚拟用户模式 |
| guest_username=virtual | 指定虚拟用户要寄宿在哪个本地用户下 | |
| virtual_use_local_privs=NO | NO | 是否继承本地用户的权限模型,如果该参数为YES,则配置权限时应使用local_xx,如果为NO,则配置权限时用使用anon_xx |
| user_config_dir=/etc/vsftpd/vconf |
指定虚拟用户的配置目录。在这个目录下配置虚拟用户的权限,如:为test用户配置权限 /etc/vsftpd/vconf/test: local_root:虚拟用户的根目录 local_max_rate:虚拟用户的最大下载速度 anon_upload_enable:虚拟用户是否允许上传文件 |
4.3.2 配置教程
- 1. 创建一个用户,用于作为虚拟用户挂载的本地用户
useradd -s /sbin/nologin vu
- 2. 创建虚拟用户
vi /etc/vsftpd/vuser
#输入账号和密码,奇数行为账号,偶数行为密码
test
pwd123
admin
123456
#输入完毕后把文本形式的账号转为Berkeley DB数据库形式
db_load -T -t hash -f /etc/vsftpd/vuser vuser.db
#-f 指定文件
#-T 允许Berkeley DB的应用程序使用文本格式转换的DB数据文件
#-t hash 读取文件的方法
#这时/etc/vsftpd目录下就会存在一个vuser.db的账号数据库
- 3. 创建认证方式
vi /etc/pam.d/vsftpd.vu
#输入内容,db参数对应刚刚生成的vuser.db文件,尾缀.db不写
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser #确保账号存在于数据库中
- 4. 配置核心参数
vi /etc/vsftpd/vsftpd/conf
#输入内容
anonymous_enable=NO #禁止匿名模式
local_enable=YES #允许本地用户登录,必须,因为虚拟用户是寄宿在一个真实的用户下
write_enable=YES #设置可写权限
guest_enable=YES #开启虚拟用户模式,必须
guest_username=vu #指定虚拟用户要寄宿在哪个真实的用户下,必须,对应步骤1创建的用户
allow_writeable_chroot=YES #允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
pam_service_name=vsftpd.vu #指定PAM认证文件,必须,对应步骤3创建的认证方式,本地用户和虚拟用户不能同时登录、因为认证方式只有一种,本地用户默认认证方式为vsftpd
user_config_dir=/etc/vsftpd/vconf #虚拟用户的配置文件目录,在步骤5配置参数
#配置虚拟用户全局权限
anon_max_rate=1048576 #给所有虚拟用户限速为1MB
#......
- 5. 配置虚拟用户权限
#在步骤4已经指定虚拟用户的配置目录
#创建配置目录
mkdir /etc/vsftpd/vconf
mkdir /etc/vsftpd/vconf/test #对应步骤2创建的test用户
mkdir /etc/vsftpd/vconf/admin #对应步骤2创建的admin用户
#创建虚拟用户根目录,并且设置权限
mkdir /etc/vsftpd/vdata
chmod 777 /etc/vsftpd/vdata
#为test用户单独配置权限,单独配置的权限优先级高于全局权限,如果要设置全局权限就写到核心配置文件(/etc/vsftpd/vsftpd.conf)里
vim /etc/vsftpd/vconf/test
#写入内容:
local_root=/etc/vsftpd/vdata #为虚拟用户配置根目录,不配置默认为vu的home目录
anon_upload_enable=YES #允许上传文件
anon_umask=022 #上传的文件默认权限
anon_mkdir_write_enable=YES #允许创建目录
anon_other_write_enable=YES #允许其他权限
#......
#输入:wq保存,配置完毕!
#admin用户的权限就不单独配置了,原理一样
- 然后重启服务,完毕!

4129

被折叠的 条评论
为什么被折叠?



