linux搭建vsftpd服务使用filezilla连接服务

  • Post author:
  • Post category:linux


背景:支持使用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)即可更新缓存,获取服务器最新的数据。



版权声明:本文为qq_43566782原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。