centos8.5 Vsftpd 搭建FTP服务器

2023-05-16

@TOCvsftpd是一个比较稳定的FTP服务软件,它提供的FTP服务可以根据具体的业务需要灵活的配置为匿名访问、本地用户访问和虚拟用户访问。其中安全性最高的是虚拟用户访问方式,本文就搭建并配置一个虚拟用户访问的FTP服务器。

匿名访问让所有人都可以上传文件到服务器上而无需鉴权,因此安全性不高,本地用户方式安全性高于匿名访问方式,可是没有虚拟用户访问方式安全,因此建议大家如果在生产环境中配置FTP最好使用虚拟用户模式。
1.安装ftp客户端

📓 以下操作都在root用户下,当然也可以使用sudo,如果你在生产服务器上部署还是建议使用sudo.

在centos8.5中并没有默认安装ftp的客户端,为了方便后续的测试我们先安装一个ftp客户端。

yum install -y ftp

2.安装iptables.service

在centos8.5中没有默认安装iptables.service这将导致iptables的设置无法保存,系统重启后iptables又自动恢复了。而我们在配置vsftpd服务器需要先将iptables清空一下。

 yum install -y iptables-services.x86_64

3.安装vsftpd
要配置vsftpd当然先安装该软件,我使用的是阿里的yum源,安装非常的简单,交给我们的“大黄”就办了。

 yum install -y vsftpd

vsftpd安装成功之后,不要忘记添加开机自启动。

systemctl enable vsftpd

如果出现如下信息说明添加开机自启动成功。

Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.

查看一下vsftpd安装包的详细信息

rpm -qi vsftpd

在这里插入图片描述
开启vsftpd服务

systemctl start vsftpd

查看服务是否正常运行

systemctl status vsftpd

在这里插入图片描述
4.清空默认的防火墙规则

 iptables -F

查看一下

iptables -L

在这里插入图片描述
默认规则已经被清除了,然后再保存一下这个空规则。

 service iptables save

在这里插入图片描述
5.创建一个虚拟用户用来登录FTP

什么是虚拟用户呢?也就是linux系统中能够实现某能力,而无法像普通用户那样登录系统的用户,这样做就提高了系统的安全性。

查看一下我们初装的系统有哪些用户吧?

vim /etc/passwd

在这里插入图片描述
看到没,除了root用户还有我们安装系统时指定的普通用户是不是还有一堆你不认识的用户啊?系统之所以能够完成各种系统功能,当然少不了这些虚拟用户的功劳😄

好了为我们的FTP创建一个虚拟用户吧。

我打算在我的系统上部署一个论坛程序,当然少不了用户上传头像、图片之类的功能了,所以我把虚拟用户的家目录指定为/var/www/ftp,当然虚拟用户访问的FTP主目录是可以通过配置文件来设置的。这里我们先这么创建着。

如果/var/www文件夹不存在,先创建一下。

mkdir -p /var/www
useradd -d /var/www/ftp -s /sbin/nologin ftpuser

上述命令通过-s /sbin/nologin创建了一个无法登录系统的用户,并通过 -d /var/www/ftp指定了这个用户的家目录为` /var/www/ftp。查看一下

ls -ld /var/www/ftp

ftp文件夹赋权

chmod -R 755 /var/www/ftp

若出现如下信息说明赋权限成功

ls -ld /var/www/ftp
drwxr-xr-x. 5 ftpuser ftpuser 103 Dec 18 13:55 /var/www/ftp

如果出现权限提示的话首先检查文件夹的用户和属组,以及文件夹属性是否为755

创建ftpuser的密码

passwd ftpuser

密码创建成功(此处我使用了弱密码,如果是生产环境千万不可)

[root@localhost www]# passwd ftpuser
Changing password for user ftpuser.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.

为虚拟用户指定登录的默认shell

echo "/sbin/nologin" >> /etc/shells

在这里插入图片描述

这一步非常重要,如果没有指定虚拟用户默认登录的shell的话会出现Error EElFTPSUnacceptedReplyError: Unaccepted server reply (error code is 530)的报错,这个错误排查起来非常困难。

在这里插入图片描述

6.创建虚拟FTP用户数据库文件

cd /etc/vsftpd
vim vuser.list

vuser.list文件中写入如下信息

ftpuser
aaaaaa

其中单数行为账号,双数行为该账号的密码。

使用db_load命令用HASH算法生成FTP用户数据库文件vuser.db

db_load -T -t hash -f vuser.list vuser.db

查看vuser.db中的内容

db_dump -d a vuser.db

如果我们需要添加新的虚拟用户向vuser.db中添加新的用户名密码

重新编辑vuser.list文件,在这个文件中加入新的用户名和密码,然后运行命令

db_load -T -t hash -f vuser.list vuser.db

就会把新的用户名密码追加到vuser.db中去了。

vuser.db赋600权限。

chmod 600 vuser.db

📓 上述操作完成后就生成了数据库文件,而vuser.list是明文的。

vuser.list文件删除。

rm -rf /vuser.list

7.建立支持虚拟用户的PAM认证文件

vim /etc/pam.d/vsftpd.vu

输入以下的内容

 auth    required        pam_userdb.so   db=/etc/vsftpd/vuser
 account required        pam_userdb.so   db=/etc/vsftpd/vuser

8.配置vsftpd.conf

vim /etc/vsftpd/vsftpd.conf

配置信息如下

anonymous_enable=NO
local_enable=YES
guest_enable=YES
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vusers_dir
参数名作用
anonymous_enable=NONO|禁止匿名开放模式
YES|开启匿名开放模式
local_enable=YESNO|不允许本地用户模式
YES|允许本地用户模式
guest_enable=YES开启虚拟用户模式
guest_username=virtual指定虚拟用户帐号
pam_service_name=vsftpd.vu指定pam文件
allow_writeable_chroot=YES允许禁锢的FTP根目录可写而不拒绝用户登入请求

开启PAM模块并配置FTP被动模式的端口。(这个端口范围要在防火墙上打开的,所以根据应用情况尽量范围小些)

pam_service_name=vsftpd
pasv_min_port=30001
pasv_max_port=30010

我最终的配置文件如下

anonymous_enable=NO
local_enable=YES
guest_enable=YES
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vusers_dir
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
pasv_min_port=30001
pasv_max_port=30010
userlist_deny=YES
userlist_enable=YES

9.为虚拟用户设置不同的权限
虚拟用户的默认权限都是不能上传、创建、修改文件的,要通过以下的用户权限配置为每个虚拟用户加权。

新建 /etc/vsftpd/vusers_dir,并新建一个和虚拟用户同名的文件,用来设置虚拟用户的权限

 mkdir /etc/vsftpd/vusers_dir
cd /etc/vsftpd/vusers_dir
vim /etc/vsftpd/vusers_dir/ftpuser

添加如下内容

guest_username=ftpuser
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
write_enable=YES
local_root=/var/www/ftp
anon_umask=0002

注意/var/www/ftp的属主和属组,以及文件夹属性是否为755,否则会出现无法新建文件夹的情况

然后在配置文件中指定用户独立的权限配置文件的存放目录。

vim /etc/vsftpd/vsftpd.conf

10.打开防火墙相关的端口

firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=20/tcp --permanent
firewall-cmd --zone=public --add-port=30000-30010/tcp --permanent
firewall-cmd --reload

11.设置selinux相关权限

setsebool -P allow_ftpd_full_access on
setsebool -P tftp_home_dir on

12.重启vsftpd验证

 systemctl restart vsftpd
ftp localhost

在这里插入图片描述
使用软件验证。

在这里插入图片描述
大家看到虚拟用户的使用方便之处没有?如果想再加用户只需要

  1. 添加虚拟用户并设置虚拟用户的主目录及密码
  2. 将虚拟用户名、密码添加到用户数据库
  3. vusers_list目录(此目录是你在主配置文件中配置的)添加和虚拟用户同名的文件,只要在这个文件中写入相应的配置就OK了。

好了,本教程就到这了,如果有问题可以留言给我。

好了,本教程就到这了,如果有问题可以留言给我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

centos8.5 Vsftpd 搭建FTP服务器 的相关文章

  • FTP 在上传时检查文件是否存在以及是否在 C# 中重命名

    我有一个关于使用 C 上传到 FTP 的问题 我想要做的是 如果文件存在 那么我想在文件名后添加 Copy 或 1 这样它就不会替换该文件 有任何想法吗 var request FtpWebRequest WebRequest Create
  • 使用node js从ftp站点下载多个文件

    我正在尝试从根文件夹下载 ftp 服务器上的每个文件 我所做的是这样的 ftpClient ls function err res res forEach function file console log file name ftpCli
  • 如何在Mule中通过HTTP请求发送文件并通过FTP上传到文件服务器

    我想在 HTTP POST 请求中发送一个文件 然后让 Mule 使用 FTP 将文件上传到服务器上的文件目录 看起来 FTP 连接器将有效负载保存到文件目录 但这实际上是空的 并且 FTP 将一个空文件写入该目录 我已经使用 Postma
  • 如何设置对 Azure 应用服务的 FTP 访问?

    我使用 Visual Studio 将我的网站 发布 到 Azure 看起来工作正常 现在我希望能够将文件通过 FTP 传输到此应用程序服务 但是 如何在此应用服务中设置 FTP 凭据 以便可以通过 FTP 进行身份验证 我本来希望在 部署
  • 如何建立 FTP 连接?

    我正在尝试使用 iPhone iPad 模拟器 Xcode 设置 FTP 连接 到目前为止 我发现我需要使用 CFFTP API 但我没有成功 我浏览了网络 最终遵循了我认为最清楚的内容 即 http developer apple com
  • apache-commons ftp 检索多个文件

    我正在尝试使用 apache commons net FTP lib 从 FTP 服务器获取数据 如果目录中只有 1 个文件 该代码可以正常工作 但在我第二次调用retrieveFileStream 时始终返回 null 有什么想法吗 我编
  • FTP 数据连接重用

    我正在开发一个 FTP 客户端 并试图了解数据连接的工作流程 据我了解 最初的 command 连接是永久的 直到您退出为止 但是 我不确定数据连接 是否按命令重新启动 所以你打电话PORT or PASV 获得第二个连接 执行LIST 得
  • 使用python连接ftp服务器

    我尝试使用 python 代码连接到手机中的 ftp 服务器 但出现错误 Code import ftplib server ftplib FTP server connect 192 168 135 101 5556 server log
  • FTP 与自动数据交换应用程序一起使用是否可靠?

    我被要求设计一个批处理应用程序 该应用程序将定期从外部供应商检索数据 特别是详细的交易列表 我们已同意使用 XML 进行数据交换 但我们正在研究不同的方法 协议以促进实际的数据传输 供应商建议使用电子邮件或 FTP 作为传输数据的方式 但出
  • 将文件直接从 FTP 传输到 Azure 文件存储,无需将它们保存在本地内存或磁盘中

    我必须将文件从 FTP 传输到 Azure 文件存储 我的代码工作正常 但我正在内存中传输这些文件 这不是最佳实践 所以首先我将流读取到Byte内存中的数组 然后我将输出上传到 Azure 文件存储 现在我知道最好异步执行此操作 但我不知道
  • 选择 FTP 和 HTTP 传输的缓冲区大小

    在实现低级 HTTP 和 FTP 传输时 如何选择缓冲区的大小 从套接字读取或写入套接字的字节数 以获得最大吞吐量 我的应用程序应该在 130 Kbps 到 3 Mbps 的连接上使用 HTTP 或 FTP 传输数据 我事先知道预期的速度
  • 错误:与nodejs程序连接时连接ECONNREFUSED 127.0.0.1:5432 [重复]

    这个问题在这里已经有答案了 我在 CentOS 8 机器上设置了一个 postgresql 服务器 并在同一台机器上运行了一个 js 程序 使用pg图书馆 const Pool require pg const pool new Pool
  • 检查 FTP 服务器上的可用空间

    我正在运行一个构建脚本 其中三个可执行文件 每个 100mb 被上传到 FTP 服务器 由于 FTP 服务器空间问题 第一次上传可能会失败 因此我们的构建过程会失败 这意味着我必须从服务器释放一些空间并再次运行构建脚本 这是浪费时间 我想在
  • 使用curl上传本地目录中的所有文件

    我想上传一个目录中的所有文件 并且我知道如何使用curl上传一个文件 如下所示 curl T local xxx suffix u xxx psw ftp 192 168 1 158 public demon test xxx suffix
  • 使用.net 2.0 连接到 FTP 服务器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望连接到现有的 FTP 服务器 上传文件 等待服务器生成报告 然后将该报告下载回 VB NET 2
  • Java:从 FTP 服务器访问文件

    我有一个 FTP 服务器 里面有一堆文件夹和文件 我的程序需要访问该服务器 读取所有文件并显示它们的数据 出于开发目的 我一直在使用硬盘驱动器上 src 文件夹中的文件 但现在服务器已启动并运行 我需要将软件连接到它 基本上我想要做的是获取
  • 从 C# 中的服务器下载后,Zip 文件被损坏

    request MakeConnection uri WebRequestMethods Ftp DownloadFile username password response FtpWebResponse request GetRespo
  • Powershell 以块的形式读取文件

    我有一个用 Powershell 编写的脚本 它通过 FTP 传输文件 使用以下命令可以正常工作 content System IO File ReadAllBytes backup app data 但是 一旦文件大小达到 2Gb 此方法
  • 如何从 Visual Studio Online 在 FTP 上部署工件?

    我已经在 Visual Studio Online 上设置了自动构建 并且能够在构建下获取工件 现在我想在 FTP 上部署工件 由于我的网站托管在 GoDaddy 上 并且他们为我提供了 FTP 帐户 任何人都可以帮我设置此帐户吗 这可以通
  • C# 单文件FTP下载

    我试图在 C 控制台应用程序中使用 FTP 下载文件 但即使我知道路径是正确的 我总是收到错误消息 550 file not found 有什么方法可以返回当前路径 一旦连接到服务器 lade datei von FTP server st

随机推荐