背景信息
FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:
- 主动模式(PORT):客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
- 被动模式(PASV):FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。
FTP支持以下三种认证模式:
匿名用户模式:任何人无需密码验证就可以直接登录FTP服务器。该模式不安全,一般只用来传输不重要的公开文件,不推荐在生产环境中使用。
- 本地用户模式:通过Linux系统本地用户验证登录权限,相较于匿名用户模式更安全。
- 虚拟用户模式:通过虚拟用户验证登录权限,虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源。该模式相较于其他两种模式更加安全,如果您对服务器的数据有较高的安全性要求,建议在相关专业人员的指导下,自行配置该模式。
本文主要介绍配置简单的匿名用户模式以及较为安全的本地用户模式。
步骤一:安装与配置vsftpd
1、远程连接Linux服务器后,运行以下命令,切换至root用户,返回至root用户的根目录。
su - root
cd
2、运行以下命令,安装vsftpd。
yum install -y vsftpd
3、运行以下命令,设置FTP服务开机自启动。
systemctl enable vsftpd.service
4、运行以下命令,启动FTP服务。
systemctl start vsftpd.service
5、运行以下命令,查看FTP服务的端口号。
netstat -antup | grep ftp
tcp6 0 0 :::21 :::* LISTEN 12100/vsftpd
可查看到FTP服务的21端口号,表示服务已正常启动
步骤二:设置FTP服务器的访问模式
您可以选择以下任一方式设置FTP服务器,建议您使用更加安全的本地用户模式。
- 匿名访问模式:
1、修改配置文件/etc/vsftpd/vsftpd.conf。
如果您在安装vsftpd时,使用的是apt install vsftpd安装命令,则配置文件路径为/etc/vsftpd.conf。
分别找到匿名模式(anonymous_enable)以及匿名上传权限(anon_upload_enable),并确认已修改为开启状态。
不同操作系统版本中,默认的配置文件信息可能有所不同,您需要保证修改后的参数配置,如下所示:
anonymous_enable=YES
anon_upload_enable=YES
在文件的末尾,新增以下参数,然后保存退出文件
#开启被动模式。
pasv_enable=YES
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=<port number>
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=<port number>
2、更改/var/ftp/pub目录的权限,为FTP用户添加写权限。
/var/ftp/pub为FTP服务默认的文件目录。
chmod o+w /var/ftp/pub/
3、重启FTP服务。
systemctl restart vsftpd.service
- 本地用户模式
1、为FTP服务创建一个Linux用户
本示例中,该用户名为ftptest,并修改ftptest用户的密码
adduser ftptest
passwd ftptest
2、创建一个供FTP服务使用的文件目录
mkdir /var/ftp/test
3、更改/var/ftp/test目录的拥有者为ftptest
chown -R ftptest:ftptest /var/ftp/test
4、修改vsftpd.conf配置文件
vim /etc/vsftpd/vsftpd.conf
配置FTP服务器为被动模式。
具体的配置参数说明如下:
#除下面提及的参数,其他参数保持默认值即可。
#修改下列参数的值:
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES
#在行首添加#注释掉以下参数:
#关闭监听IPv6 sockets。
#listen_ipv6=YES
#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/test
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#本示例中为Linux服务器的公网IP。
pasv_address=<FTP服务器公网IP地址>
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=<port number>
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=<port number>
5、创建chroot_list文件,并在文件中写入例外用户名单
vim /etc/vsftpd/chroot_list
输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
注意 没有例外用户时,也必须创建chroot_list文件,内容可为空。
6、重启FTP服务
systemctl restart vsftpd.service
- 虚拟用户模式
【1】虚拟用户的创建
1、创建普通的用户
创建一个不可登录的系统本地用户,并指定家目录
如果不指定家目录,默认家目录在/home下
本文是创建了名为vsftpd的用户,这可能会导致一些误会。请将vsftpd记为一个普通用户
-d为指定家目录
useradd vsftpd -s /sbin/nologin
chown -R vsftpd:vsftpd /home/vsftpd
2、创建虚拟用户账号文件
第一行为用户,第二行为密码,不可有空格
账号文件名称可为其他名称,并且其内容可写入多个账号及密码
vim /etc/vsftpd/vuser.list
test1
123456
test2
123456
3、生成虚拟用户数据文件
使用db_load命令,用hash算法生成vuser.list虚拟用户的数据库文件
每次对虚拟用户的修改操作后,都需要再次执行,使其生成新的数据文件
并且为了安全,将生成的文件赋权,并删除或移动旧文件到其他位置
db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
rm -rf /etc/vsftpd/vuser.list
4、设置PAM验证文件
auth:对用户的用户名口令进行验证
accout:对用户的帐户权限和限制进行验证
/lib/security/pam_userdb.so :调用pam_userdb.so这个库函数
db:该虚拟用户数据文件(默认省略db后缀)
本文是将直接创建一个新的pam验证文件
cat /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
【2】虚拟用户配置文件
虚拟用户的配置文件名必须和虚拟用户名一致(因为在登录ftp时输入相应的用户名后,会根据名称去加载相应的配置文件)
mkdir /etc/vsftpd/vconf
下面为基础的单个虚拟用户访问的配置文件(如需更多配置可直接添加):
vim /etc/vsftpd/vconf/test1
local_root=/home/vsftpd/test1 指定该虚拟用户主库的路径
write_enable=YES 允许写的操作
local_umask=022 上传文件的权限掩码
anon_world_readable_only=NO 关闭只可读
anon_upload_enable=YES 允许上传
anon_mkdir_write_enable=YES 允许新建目录
anon_other_write_enable=YES 允许修改目录/文件名称,删除
下列为额外的配置,根据情况使用:
idle_session_timeout=300 设定空闲链接超时时间
data_connection_timeout=1000 设定单次传输最大时间
max_clients=0 设定并发客户端的访问数量
max_per_ip=0 设定客户端的最大线程数
local_max_rate=0 设定用户的最大传输速率,单位b/s
【3】vsftpd主配置文件配置
下面为基础的虚拟用户访问的主配置文件(如需更多配置可直接添加):
grep -v "^#" /etc/vsftpd/vsftpd.conf
anonymous_enable=NO 不允许匿名用户登录
local_enable=YES 允许本地用户登录
write_enable=YES 开放写权限
local_umask=022 设置本地用户上传建立文件夹时的权限掩码
dirmessage_enable=YES 设定开启目录标语功能
xferlog_enable=YES 设定开启日志记录功能
connect_from_port_20=YES 设定端口20进行数据连接
xferlog_std_format=YES 设定日志使用标准的记录格式
listen=YES 以独立运行方式监听服务
pam_service_name=vsftpd.vu 设定pam服务下的vsftpd验证配置文件名,PAM验证会根据/etc/pam.d/下的vsftpd文件配置
userlist_enable=YES 启用user_list列表文件
userlist_deny=NO 允许user_list文件中的用户登录
tcp_wrappers=YES 设定支持TCPwrappers
#chroot_local_user=YES
#chroot_list_enable=YES 启用chroot_list_file配置项指定的用户列表文件
#chroot_list_file=/etc/vsftpd/chroot_list 限制用户的家目录的用户配置文件
anon_umask=022 虚拟用户的umask值设置
allow_writeable_chroot=YES
guest_enable=YES 开启虚拟账户功能
guest_username=vsftpd 指定虚拟账号映射到本地哪个用户
user_config_dir=/etc/vsftpd/vconf 指定虚拟用户的单个配置文件位置,下方的文件名必须和虚拟用户名相同
【4】虚拟用户主目录建立及赋权
这是一个重点。如果目录权限配置不当,易导致虚拟用户权限出现各种异常。
<1>映射的用户的主目录的赋权
chown vsftpd:vsftpd /home/vsftpd
chmod 755 /home/vsftpd
<2>创建虚拟用户的主目录并赋权
mkdir -p /home/vsftpd/vuse-apple
chown -R vsftpd /home/vsftpd/vuse-apple
chmod 755 /home/vsftpd/vuse-apple
设置完成后,重启vsftpd服务,即可通过客户端访问
【5】FTP客户端访问
访问格式:
ftp ftp服务器IP
命令:
ftp 123.123.123.123
当为匿名模式时,默认用户和密码都为ftp,默认无上传权限
当为另外两种模式时,需要输入设置好的用户名和密码
vsftp配置文件及参数说明
/etc/vsftpd目录下文件说明如下:
- /etc/vsftpd/vsftpd.conf是vsftpd的核心配置文件。
- /etc/vsftpd/ftpusers是黑名单文件,此文件中的用户不允许访问FTP服务器。
- /etc/vsftpd/user_list是白名单文件,此文件中的用户允许访问FTP服务器。
配置文件vsftpd.conf参数说明如下:
- 用户登录控制参数说明如下表所示
参数 | 说明 |
---|---|
anonymous_enable=YES | 接受匿名用户 |
no_anon_password=YES | 匿名用户login时不询问口令 |
anon_root=(none) | 匿名用户主目录 |
local_enable=YES | 接受本地用户 |
local_root=(none) | 本地用户主目录 |
- 用户权限控制参数说明如下表所示。
参数 | 说明 |
---|---|
write_enable=YES | 可以上传文件(全局控制) |
local_umask=022 | 本地用户上传的文件权限 |
file_open_mode=0666 | 上传文件的权限配合umask使用 |
anon_upload_enable=NO | 匿名用户可以上传文件 |
anon_mkdir_write_enable=NO | 匿名用户可以建目录 |
anon_other_write_enable=NO | 匿名用户修改删除 |
chown_username=lightwiter | 匿名上传文件所属用户名 |
评论区