背景:支持使用filezilla上传文件到公司的服务机器上,所以搭建vsftpd支持filezilla进行上传
一、linux机器搭建vsftpd服务
1、先看看自己的机器属于什么发行版,不同的发行版命令不一样
我的是centos,其他发行版命令不一样,查看本机发行版
cat /etc/redhat-release
2、安装命令,点击y然后安装成功
sudo yum install vsftpd
这个需要确认下 yse 或者 sudo yum -y install vsftpd
这个直接跳过是否yser or no
3、启动vsftpd服务
sudo systemctl start vsftpd
以上就是简单的安装成功了。
二、本地搭建客户端,使用的是filezilla进行上传
我用的是mac版本
下载地址: 传送门
记得是下载客户端,别下载错成服务端了,汉化版本目前没找到 ,汉化版在设置中修改语言即可
三、使用filezilla教程
将英文改成中文,即汉化
1. 打开FileZilla客户端。
2. 点击菜单栏中的"编辑"(Edit)选项。
3. 从下拉菜单中选择"设置"(Settings)选项。
4. 在弹出的设置窗口中,找到"界面"(Interface)选项,并点击它。
5. 选择language 然后选择 chinese 即可
记得关闭重启生效,这里有个坑,我用英文版的,创建英文目录正常,创建中文失败
匿名用户操作
以上步骤完成,开始进行连接,首先我们什么配置都没改
直接输入外网地址,点击快速连接就能连接上了。此时是匿名登陆不需要账号密码就行
可以看到右侧显示/pub这个是,匿名登陆在服务器上有个默认路径是/var/ftp/,此时pub目录就在这个路径下。
1、匿名登陆是因为默认的配置/etc/vsftpd/vsftpd.conf
中
anonymous_enable=YES
代表启用匿名登陆,当你设置成No时,就不能使用匿名登陆了。
2、目前只支持你下载并不能上传,接下来支持上传
首先修改配置
anon_upload_enable=YES # 允许匿名用户上传
# 如果发现上传失败,那是因为匿名用户上传权限和配置有关还和文件系统有关,找到pub目录增加其他用户的权限
sudo chmod o+rw pub # 赋予其他用户的读写权限
3、允许匿名用户创建目录,默认不允许创建的
anon_mkdir_write_enable=YES
修改配置文件即可
4、此时匿名用户还不能修改、删除、重命名
anon_other_write_enable=YES
修改配置即可,这个在配置中没有,需要自己添加
本地用户操作
使用服务器上的用户和密码登录服务器进行上传文件更加安全
1、创建用户并设置密码
useradd ftpuser # 能够在 /home中看到 存放的位置 /etc/passwd 查看 cat /etc/passwd
passwd ftpuser # 给用户设置密码 存放位置 /etc/shadow cat /etc/shadow
2、登录
然后通过用户名和密码登录进去。默认进入到/home/username 目录下
你可以进行基本的操作,因为默认配置允许本地用户上传、修改、编辑、删除等操作
3、指定用户登录时的目录位置
local_root
可以指定位置
4、这种情况用户也能看到其他目录,如果linux上其他用户可以读写,那么它就能操作这些文件了,不安全,此时需要启用chroot功能
allow_writeable_chroot=YES # 开启chroot必须添加
chroot_local_user=YES # 启用了本地FTP用户的chroot功能。这将限制本地FTP用户访问其家目录以外的目录
chroot_list_enable=YES # 表示启用了chroot_list文件的使用。chroot_list文件用于指定哪些FTP用户将被chroot限制
chroot_list_file=/etc/vsftpd/chroot_list # 指定了chroot_list文件的路径。这个文件包含了将被chroot限制的FTP用户的列表。您可以编辑这个文件并添加或删除FTP用户的名称,以控制哪些用户将被chroot限制。
如果发现报错,记得在/etc/vsftpd目录下创建chroot_list文件,另外需要注意的是不需要将你当前本地登录的用户给添加进chroot_list,因为此时的chroot_list相当于白名单,他可以允许文件中用户可以切换到其他目录。具体配置是和chroot_list_enable、chroot_local_user相关的,具体看下面解释,所以现在就有了ftpuser这个用户只能访问local_root指定的目录了。
5、不让其执行删除操作
现在实现了,ftpuser用户只能看到local_root指定的位置,(这个功能是通过local_root和开启chroot功能),那如果我现在限制不能让其删除怎么办?
你能看到实际上本地用户的配置write_enable=YES
这个默认是本地用户有写的权限。所以你如果把这个关掉,本地用户就什么也不能操作了。
所以接下来实现的需求是:
ftpuser用户限制其删除权限、然后其他用户可以给他读写和删除(我这么做的目的是 其他用户是java程序,当ftpuser执行上传后,进行逻辑操作完,java程序需要执行删除文件)
1、第一步先实现其他用户可执行删除操作:
直接修改配置:local_umask=020
默认是022,这样上传后的文件就有了其他用户可执行删除的操作了。
2、不让使用ftp工具的用户删除操作。
修改配置: tcp_wrappers=YES
和cmds_denied=DELE,RMD
这样就行了。
四、vsftpd的配置
1、修改/etc/vsftpd/vsftpd.conf 配置后记得重启加载最新配置
systemctl restart vsftpd
2、用户连接的验证方式
匿名用户登录
用户账号名称:ftp或anonymous
用户账号密码:无密码
工作目录:/var/ftp
默认权限:默认支持下载不支持上传,上传权限由两部分组成(主配置文件和文件系统)
本地用户登录
用户账号名称:本地用户(/etc/passwd)存放的位置
用户账号密码:用户密码(/etc/shadow)存放的位置
工作目录:登录用户的宿主
目录权限:最大权限(drwx------)
虚拟用户登录
3、配置文件参数介绍
匿名用户相关参数配置
默认配置:
anonymous_enable=YES # 允许匿名用户登录
匿名用户可选参数
anon_upload_enable=YES # 控制匿名用户是否允许上传文件。将其设置为YES表示允许匿名用户上传文件。
anon_mkdir_write_enable=YES # 控制匿名用户是否允许创建新的目录。将其设置为YES表示允许匿名用户创建目录。
anon_other_write_enable=YES # 匿名用户是否可以操作权限 例如重命名、删除等权限
anon_roow=/var/ftp # 匿名用户登录时所登录的目录,如果想要设置,修改配置即可
chown_uploads=YES/NO(NO) # 设置是否改变匿名用户上传文件的属主
chown_username=username # 设置匿名用户上传文件属主名,就是修改所属用户到底是谁,看到默认是ftp -rw------- 1 ftp ftp 6 Jul 9 19:52 hello2.txt
本地用户相关参数
local_enable=YES/NO(YES) # 允许本地用户登录
local_root=/home/username # 本地用户登录时,将被更换到定义的目录下
write_enable=YES/NO(YES) # 本地用户是否有写权限,属于全局设置
# 控制用户是否允许切换到上级目录
allow_writeable_chroot=YES # 想要开启chroot功能必须加上
chroot_list_enable=YES/NO(NO) #
chroot_list_file=/etc/vsftpd/chroot_list # 设置是否启用chroot_list_file配置指定的用户文件
chroot_local_user= #用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录
搭配情况:
A=chroot_list_enable,B=chroot_local_user
# 这个文件类似于白名单 里面的用户可以其他权限
1 A=YES,B=YES 在 /etc/vsftpd/chroot_list 文件中列出的用户,可以切换到其他目录,未在文件中列出的用户,不能切换到其他目录
# 类似于黑名单
2 A=YES,B=NO 在 /etc/vsftpd/chroot_list .. 不能切换到其他目录,未在的可以切换到其他目录
3 A=NO,B=YES 所有用户不能切换到其他目录
4 A=NO,B=NO 所有用户都可以切换到其他目录
访问控制相关
在/etc/vsftpd下的ftpusers文件中作用
解释:ftpusers文件是一个用于存储被禁止登录FTP的用户列表的文件。当FTP服务器配置为使用该文件时,任何出现在ftpusers文件中的用户将被禁止登录FTP服务器。这个文件通常用于限制某些用户或组的FTP访问权限,以增加服务器的安全性。
所以你想让某个用户不能登录ftp,把它加入到这个文件中即可。
在/etc/vsftpd下的user_list文件的作用
解释:user_list文件是一个用于存储允许或禁止访问FTP服务器的用户列表的文件。该文件通常用于配置FTP服务器的访问控制,以确定哪些用户可以登录和访问FTP服务器。用户列表中的用户可以根据需要进行添加或删除,以控制其FTP访问权限。这个文件可以用于限制特定用户的FTP访问,提高服务器的安全性。
1、当userlist_deny=NO
此时仅允许这个user_list文件中的用户访问ftp
2、当userlist_deny=YES
此时这个文件中的用户都被拒绝访问ftp
访问速率设置
anon_max_rate=0 # 设置匿名用户最大传输速度,单位 B/s 0表示不限制速度,默认值0
local_max_rata=0 # 本地用户使用的最大传输速度。单位 B/s 0表示不限制速度,预设值0
五、常见问题(踩坑合集)
1、创建中文目录失败、创建英文目录成功
注意,前提是你已经配置了权限,这个我最后解决的办法是将英文版本改成中文
1. 打开FileZilla客户端。
2. 点击菜单栏中的"编辑"(Edit)选项。
3. 从下拉菜单中选择"设置"(Settings)选项。
4. 在弹出的设置窗口中,找到"界面"(Interface)选项,并点击它。
5. 选择language 然后选择 chinese 即可
先就这么多吧,足够应付上传了~
vsftpd相关总结
1、工作原理
传输模式
Binary 模式 ,不对数据进行任何处理。适合进行可执行文件、压缩文件、图片等
ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符等
2、配置文件
配置文件的位置:/etc/vsftpd
# 配置信息都在里面
vsftpd.conf
# 这个默认没有,主要是为了备份原始的配置信息,以备不时之需
vsftpd.conf.bak
vsftpd.conf
# 匿名用户登录 允许匿名用户登录
anonymous_enable=YES
# 允许匿名用户上传
anon_upload_enable=YES
#本地用户是否有写权限,可以和cmds_denied=DELE,RMD搭配,让用户不能删除
write_enable=YES
#开启tcp_wrappers支持,增强FTP服务器的安全性并限制访问
tcp_wrappers=YES
# 这个需要tcp_wrappers=YES,限制客户端对 FTP 服务器上的文件和目录进行删除操作(DELE)和删除目录操作(RMD)。
cmds_denied=DELE,RMD
#本地用户上传文件后目录和文件的权限设置。 如果上传后 是目录 那么权限=757(用7减去对应的数字) 即其他用户可读可写可执行,如果是文件权限=646(用6减去对应的数字) 其他用户拥有读写权限 。详细请看下面的常见问题
local_umask=020
local_umask详解
这个是用来配置上传后的文件权限的。
参考文章
在Linux系统中,当我们创建文件的默认权限是怎么来的?如何改变这个默认权限呢?
在vsftpd配置中有local_umask,默认是 022
先了解下linux系统-umask详解
权限的数字
- 4 表示读权限(Read)
- 2 表示写权限(Write)
- 1 表示执行权限(Execute)
那么我们就知道了 local_umask =022 后 ,使用ftp上传后的文件夹权限=755(所有者可读可写可执行、用户组 可读可写 、其他用户 可读可写),文件权限=644 (所有者可读可写可执行、用户组可读、其他用户可读)
总结:这个就是可以限制文件的权限。比如有个场景:ftpuser用户上传文件允许其他用户删除、ftpuser不允许删除文件和目录,那么就需要配置 local_umask=020 这个时候其他用户就能删除了,同时你还要注意目录的权限,如果其他用户删除失败,可能是父目录没有权限,如果想要限制ftpuser用户删除,那就需要配置vsftpd.conf 中的cmds_denied了。
常见问题
1、服务器删除了文件为什么ftp还在?
原因:这种情况可能是由于FileZilla客户端的缓存导致的。FileZilla客户端会在本地维护一个目录列表的缓存,以提高性能和快速访问。因此,即使在服务器上删除了文件,FileZilla客户端可能仍然显示该文件,直到缓存被刷新或更新。
解决:fileZilla 左上角的 查看-刷新(F5)即可更新缓存,获取服务器最新的数据。