CentOS8搭建ftp站点

1 安装vsftpd

dnf install -y vsftpd

2 检验是否安装成功


vsftpd -v
#安装成功显示
vsftpd: version 3.0.3

3 设定vsftpd开机自启

systemctl enable vsftpd.service

4 运行vsftpd

systemctl start vsftpd.service

5 查看ftp服务坚挺端口

netstat -antup | grep ftp

#提示
tcp   0   0 0.0.0.0:21     0.0.0.0:*        LISTEN      132086/vsftpd 

6 创建用户

adduser test

7 修改用户密码

passwd test

8 创建ftp服务文件目录

mkdir /var/ftp/test

9 创建测试文件

touch /var/ftp/test/testfile.txt

10 更改目录拥有者

chown -R test:test /var/ftp/test

11 修改vsftpd.conf配置文件

#除下面提及的参数,其他参数保持默认值即可。

#修改下列参数的值:
#禁止匿名登录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
#多用户时各用户配置文件,单用户可不加。
user_config_dir=/etc/vsftpd/userconfig
#开启被动模式。
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>

12 创建chroot_list文件,并在文件中写入用户白名单

vim /etc/vsftpd/chroot_list

#此文件必须创建,但可以为空
#用户名必须每行一个
#此文件中的用户不会被锁定在主目录,可以访问其他目录
#注意,该文件中的用户不能是系统自建的权限高用户,例如root,Apache,Nginx等等,必须是你自建的权限低的用户,即便你在该文件写入root,ftp连接时也会无法登录的。

13 创建userconfig目录,多用户多目录所需,只是单个用户可以跳过

cd /etc/vsftpd

mkidr userconfig

cd userconfig

vim test1  #创建文件test1,写入下行内容

local_root=/var/ftp/test/test1

vim test2  #创建文件test2,写入下行内容

local_root=/var/ftp/test/test1

14 重启vsftpd

systemctl restart vsftpd.service

15 设置安全组

在安全组的入口方向添加规则,打开21端口,以及最小/最大范围端口,最小/最大端口与配置文件中端口值一致,授予对象为全部。

到此就可以使用工具测试ftp了。

还有几点需要特别注意:

/etc/vsftpd/vsftpd.conf  #vsftpd的核心配置文件。
/etc/vsftpd/ftpusers     #黑名单文件,此文件中的用户不允许访问FTP服务器。
/etc/vsftpd/user_list    #白名单文件,此文件中的用户允许访问FTP服务器。

如果你观察ftpusers文件和user_list文件,会发现两文件中的用户基本一致,而当你尝试使用其中的某个用户登录时,却发现根本无法登录。

至于原因,与配置文件中的某两个参数有关。
userlist_enable = YES
userlist_deny = YES

当userlist_enable为NO时,无论userlist_deny是YES还是NO,所有本地用户都能登录ftp,
当userlist_enable为YES,userlist_deny为YES时,user_list文件就是一个黑名单,里面的用户都被拒绝登录ftp。
当userlist_enable为YES,userlist_deny为NO时,user_list文件就是一个白名单,只有文件内的用户才会被允许登录(使用白名单后,匿名用户将无法登录,除非配置参数中特别指出)。

注意:chroot_list文件不受上述两参数的控制,是被排出在外的。

补充:

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        #匿名上传文件所属用户名