Ubuntu系统搭建FTP服务器

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
运维安全中心(堡垒机),免费版 6个月
简介: Ubuntu系统搭建FTP服务器

Ubuntu 系统版本:Ubuntu 22.04.2 LTS

安装 vsftpd 软件包

sudo apt-get update
sudo apt-get install vsftpd

50b6326944454c15875ec281a127e944.png

查看版本,验证是否安装成功:vsftpd -v

配置文件

以下是我翻译后的默认配置文件(地址 /etc/vsftpd.conf):

# 示例配置文件,地址: /etc/vsftpd.conf
#
# vsftpd的默认编译设置比较谨慎,这个示例文件会放宽一些限制,使ftp服务更加易用。
# 同时建议查看vsftpd.conf.5文件以了解所有编译默认值。
#
# 特别提醒:这个示例文件并不包含vsftpd选项的所有内容,建议阅读vsftpd.conf.5手册页以充分了解vsftpd的功能。
#
#
# 
# 用来设置vsftpd是否以独立守护进程运行。
# 如果设置为"listen=YES",则表示vsftpd将作为独立守护进程运行;
# 如果设置为"listen=NO",则表示vsftpd将不会以独立守护进程运行,而是通过inetd或者initscript启动。
listen=NO
#
# 设置vsftpd是否启用IPv6监听。
# 如果设置为"listen_ipv6=YES",则表示vsftpd将启用IPv6监听;
# 如果设置为"listen_ipv6=NO",则表示vsftpd将不会启用IPv6监听。
# 默认情况下,IPv6监听地址为"::",同时可以接受IPv6和IPv4客户端的连接。
# 如果你只需要监听IPv4或IPv6地址,则不需要同时启用两种监听,如果你需要同时监听特定的IPv4和IPv6地址,则需要运行两个vsftpd实例,并使用两个不同的配置文件来进行配置。
listen_ipv6=YES
#
# 设置是否允许匿名FTP登录。
anonymous_enable=NO
#
# 设置是否允许本地用户登录FTP服务器。
local_enable=YES
#
# 设置是否允许FTP用户执行写入操作。
# write_enable=YES
#
# 设置本地用户的默认umask值。
# umask是一个三位八进制数,用来控制新建文件或目录的访问权限。
# 在FTP服务器中,local_umask选项用来设置本地用户上传文件或创建目录时的默认权限。
# 默认情况下,local_umask的值为077,表示新建的文件或目录权限为只有所有者可读、可写、可执行,其他用户无权访问。
# 如果你的用户希望默认权限为所有者可读、可写、可执行,其他用户可读、可执行,则可以将local_umask的值设置为022。
local_umask=022
#
# 设置是否允许匿名FTP用户上传文件。
# 如果将该选项的注释去掉(即将“#”删去),并将其值设置为YES,则表示允许匿名FTP用户上传文件。
# 但是,这个选项只有在全局写入权限被激活时才会生效。此外,你还需要创建一个由FTP用户可写的目录,以便匿名FTP用户可以上传文件。
# 需要注意的是,开启匿名FTP用户上传文件功能可能存在一定的安全风险,因此需要谨慎使用。
# anon_upload_enable=YES
#
# 设置是否允许匿名FTP用户创建新目录。
# 如果将该选项的注释去掉(即将“#”删去),并将其值设置为YES,则表示允许匿名FTP用户创建新目录。
# 需要注意的是,开启匿名FTP用户创建新目录功能可能存在一定的安全风险,因此需要谨慎使用。
# anon_mkdir_write_enable=YES
#
# 这段配置文件是用来设置是否启用目录消息功能。
# 如果设置为YES,则表示启用目录消息功能。当远程用户进入某个目录时,会显示该目录的消息。
dirmessage_enable=YES
#
# 设置是否启用本地时间功能。
# 启用本地时间功能后,vsftpd将会在目录列表中显示本地时间而非GMT时间。
use_localtime=YES
#
# 启用上传和下载日志记录功能。
# 启用该功能后,vsftpd会记录每个用户的上传和下载操作,并将其记录到指定的日志文件中。
xferlog_enable=YES
#
# 设置数据传输的端口号。
# 将其值设置为YES,则表示数据传输使用的端口号为20。
connect_from_port_20=YES
#
# 设置匿名用户上传的文件的所有者。
# 设置为YES,则表示上传的文件将会被转换为指定用户的所有权。
# chown_uploads=YES
# 设置为指定的用户名。
# chown_username=whoever
#
# 设置vsftpd日志文件的路径。该路径必须具有可写权限,并且对于vsftpd进程来说,必须具有可访问权限。
# xferlog_file=/var/log/vsftpd.log
#
# 设置vsftpd日志文件的格式。设备为YES则存储为标准ftpd xferlog格式。
# xferlog_std_format=YES
#
# 设置vsftpd空闲会话超时的时间(以秒为单位)。
# idle_session_timeout=600
#
# 设置vsftpd数据连接超时的时间(以秒为单位)。
# data_connection_timeout=120
#
# vsftpd建议在系统中定义一个唯一的用户,供FTP服务器使用,作为完全隔离和无特权的用户。
# nopriv_user选项可以用来指定该用户的用户名。
# nopriv_user=ftpsecure
#
# 用于启用异步ABOR请求的识别。
# 异步ABOR请求是一种FTP客户端请求,用于取消当前正在进行的数据传输操作。
# 启用该选项可以提高FTP服务器的性能,但也会增加安全风险。因为异步ABOR请求的代码比较复杂,可能会被黑客利用进行恶意攻击。
# 所以,如果安全性是首要考虑因素,则不建议启用该选项。
# async_abor_enable=YES
#
# 用于控制FTP服务器是否启用ASCII模式下的文件转换功能。
# 默认情况下,FTP服务器会假装允许ASCII模式,但实际上会忽略该请求。
# 如果需要启用ASCII模式下的文件转换功能,则可以将ascii_upload_enable和ascii_download_enable选项的注释去掉,并将它们的值设置为YES。
# 在ASCII模式下,FTP服务器会将文本文件中的换行符和回车符进行转换,以便在不同操作系统之间进行传输。
# 但是,需要注意的是,ASCII模式下可能存在一些安全风险。例如,攻击者可以利用SIZE命令在ASCII模式下发送一个超大文件名,导致FTP服务器崩溃。
# 因此,建议谨慎使用ASCII模式,并确保FTP服务器已经做好了相应的安全措施。
# ascii_upload_enable=YES
# ascii_download_enable=YES
#
# vsftpd的登录横幅的设置,你可以理解为登录成功后的欢迎词。
# ftpd_banner=Welcome to blah FTP service.
#
# 设备是否拒绝匿名电子邮件地址
# 有助于减轻利用匿名访问FTP服务器进行的拒绝服务(DoS)攻击。如果检测到被禁止的电子邮件地址,服务器将拒绝该用户的访问。
# deny_email_enable=YES
# 如果启用了拒绝匿名电子邮件地址的选项,则通过从指定的文件“/etc/vsftpd.banned_emails”读取被禁止的电子邮件地址列表。
# banned_email_file=/etc/vsftpd.banned_emails
#
# 设备限制本地用户仅访问其home目录。
# 如果启用,则本地用户将仅访问其home目录和其子目录,无法访问其他目录。
# chroot_local_user=YES
#
# 是否允许本地用户,是否将本地用户限制在其主目录中,如果设置为YES,则不会将列在chroot_list_file中的用户限制在其主目录中。
# chroot_local_user=YES
# 是否启用chroot_list_file列表,用于指定哪些用户不应该被限制在主目录中。
# chroot_list_enable=YES
# 指定了chroot_list_file列表的路径和名称。一行一个用户名。
# chroot_list_file=/etc/vsftpd.chroot_list
#
# 否启用ls命令的递归选项“-R”,该选项可以在列出目录内容时递归地列出子目录。
# 默认情况下,该选项被禁用以避免远程用户在大型站点上引起过多的I/O。
# ls_recurse_enable=YES
#
# 自定义配置:
#
# 指定了一个空目录作为安全chroot() jail。
# 在某些情况下,vsftpd不需要访问文件系统,因此可以将FTP用户限制在这个空目录中,以增强安全性。该目录应该为空,并且不应该被FTP用户写入。
secure_chroot_dir=/var/run/vsftpd/empty
#
# 指定vsftpd将使用的PAM服务的名称。
# 默认情况下,pam_service_name的值为“vsftpd”,这意味着vsftpd将使用名为“vsftpd”的PAM服务来进行认证。
# 如果需要使用其他的PAM服务,可以修改该选项的值。
pam_service_name=vsftpd
#
# 用于指定在SSL加密连接中使用的RSA证书的位置。
# 通过设置rsa_cert_file和rsa_private_key_file选项来指定RSA证书和私钥的位置。
# 其中,rsa_cert_file选项用于指定证书文件的位置,而rsa_private_key_file选项用于指定私钥文件的位置。
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# 是否启用SSL加密连接。
ssl_enable=NO
#
# 指定是否在vsftpd中使用UTF-8编码的文件系统。
# utf8_filesystem=YES

一般情况下这样设置一下就可以了,配置文件已经翻译好了,大家可以按需设置:(编辑配置文件命令:sudo vim /etc/vsftpd.conf)

local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

也可以加上这段配置(路径可以自定义):

# 设置FTP用户的本地根目录,也就是说,FTP用户登录后,其工作目录将被限制在该目录及其子目录下。
local_root=/data/liss/data

以下是设置截图(后面还有,按需配置):

当然你可以会有一些特殊需求,比如限制一些用户不能切换到其他目录:

1.当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。

2.当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。

3.当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。

4.当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

注意: 如果限制了用户不能切换其他目录,一定要在配置文件中新增 allow_writeable_chroot=YES,否则会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

创建FTP用户

一般情况下会在home下新建一个FTP的主目录,然后建一个普通用户如下:

# 创建FTP用户主目录
sudo mkdir /home/uftp
# 添加FTP用户uftp,指定用户主目录和所用shell
# `-d` 选项指定用户的主目录,也就是用户登录后所在的默认目录。在这个例子中,`-d /home/uftp` 指定 `uftp` 用户的主目录为 `/home/uftp`。
# `-s` 选项指定用户的默认shell。Shell是一个命令行解释器,它允许用户与操作系统进行交互。在这个例子中,`-s /bin/bash` 指定 `uftp` 用户的默认shell为Bash。
sudo useradd -d /home/uftp -s /bin/bash uftp
# 设置密码
sudo passwd uftp

但是也有特殊需求,我想要创建一个不能登录只能通过ftp访问的用户,并且我需要指定用户主目录是一个已经存在的目录:

# 创建uftp用户,指定此用户的主目录。
# `-d` 选项用于指定用户的主目录;`-s` 选项用于指定用户的默认 shell。
# `/sbin/nologin` 是一个特殊的 shell,它不允许用户登录系统.
# 通常用于限制某些用户只能通过特定的服务(如FTP、SFTP等)进行远程访问,
# 而不能直接登录系统。
sudo useradd -d /data/liss -s /sbin/nologin uftp
# 设置密码
sudo passwd uftp
# 如果想要恢复为正常用户,可以执行以下命令:
sudo usermod -s /bin/bash uftp

如果你创建的用户是只能通过ftp访问的用户,一定要删除 /etc/pam.d/vsftpd 配置文件,因为这个配置文件会导致使用用户名登录 ftp 失败!!!

添加vsftpd.chroot_list

编辑 /etc/vsftpd.chroot_list 文件,用于存放允许访问FTP的用户

# 如果不存在会自动创建
sudo vim /etc/vsftpd.chroot_list

然后将刚刚创建的FTP用户添加进去.

如果是多个用户,一行一个。

重启FTP服务使配置生效

sudo service vsftpd restart

使用ps -aux | grep vsftpd 查看服务是否启动

测试

FileZilla测试连接成功

相关文章
|
7天前
|
Ubuntu Linux 数据中心
阿里云服务器纯净版系统及系统版本参考与相关使用说明
在我们选购阿里云服务器的时候,操作系统有公共镜像、自定义镜像、共享镜像、云市场镜像、社区镜像可选,其中公共镜像为纯净版系统,这些系统皆已正版授权,旨在为ECS实例上的应用程序提供安全、稳定的运行环境。本文为大家汇总了阿里云服务器纯净版系统及最新的系统版本以及相关使用说明,以供大家了解和选择。
阿里云服务器纯净版系统及系统版本参考与相关使用说明
|
4天前
|
弹性计算 Windows
震惊!ECS Windows 系统磁盘竟“撒谎”,空间去哪儿了?别急,这里有终极破解法!
【8月更文挑战第15天】在使用ECS Windows系统时,可能会遇到磁盘显示占用的空间远超实际文件大小的情况,导致空间不足。原因包括系统还原点、卷影副本累积及回收站文件未彻底删除等。解决方法有:清除系统还原点(`vssadmin delete shadows /all`),清空回收站,删除临时文件夹中的文件,以及检查并修复磁盘错误。这些步骤能有效释放空间,保证系统稳定运行。
18 4
|
5天前
|
监控 Linux Shell
"揭秘!一键掌控Linux服务器健康的秘密武器——超实用系统检查脚本,让你的服务器稳如老狗,告别宕机烦恼!"
【8月更文挑战第14天】服务器宕机或资源耗尽会严重影响业务。为此,你需要一个Linux系统检查脚本来守护服务器健康。它可以自动检测潜在问题如磁盘满载、内存泄漏等,避免服务中断。脚本应包括磁盘空间、内存/CPU使用、系统时间准确性、关键服务状态及系统日志分析等检查项。通过编写并定期运行这样的脚本,可以显著提高服务器的稳定性和可靠性。
16 1
|
14天前
|
运维 网络协议 Linux
揭秘CentOS 7:系统目录奥秘大起底,网卡配置秒变高手,让你的服务器管理飞一般的感觉!
【8月更文挑战第5天】CentOS 7作为RHEL的社区版本,以其稳定性和丰富功能广受好评。本文通过案例分析介绍其系统目录结构及网卡配置方法。系统目录如/(根)、/bin(基本命令)、/boot(启动文件)、/dev(设备文件)、/etc(配置文件)、/home(用户目录)和/lib(共享库)等各司其职。网卡配置通过编辑/etc/sysconfig/network-scripts/下的ifcfg文件实现,如设置ens33接口的静态IP地址、子网掩码、网关和DNS服务器,并通过重启网络服务使配置生效。这是系统管理员必备的技能之一。
25 2
|
3月前
|
SQL 分布式计算 DataWorks
DataWorks常见问题之dataworks连接FTP服务器失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
3月前
|
Ubuntu 安全 网络安全
百度搜索:蓝易云【Ubuntu系统搭建FTP服务器教程】
现在,你已经成功在Ubuntu系统上搭建了FTP服务器。你可以使用FTP客户端连接到你的FTP服务器,并上传、下载文件。注意,为了安全起见,建议配置SSL/TLS加密以保护数据传输。
86 0
|
1月前
|
网络协议 Unix 网络安全
FTP服务器怎么搭建?Windows server搭建FPT服务器
FTP服务器是按照FTP协议提供文件传输服务的计算机。它用于在两台计算机间安全地传输文件,支持用户权限管理和跨平台操作。FTP使用控制连接处理命令,数据连接传输文件,有PORT和PASV模式。要搭建FTP服务器,首先在Windows Server 2008 R2上安装IIS,确保选中FTP服务。接着,创建FTP文件夹作为站点根目录,通过IIS管理器添加FTP站点,配置站点信息、身份验证和权限。测试客户端通过telnet和浏览器访问FTP服务器,确认能成功登录及浏览文件。FTP常用于文件共享和管理,可通过专用工具如FlashFXP上传下载文件。
74 0
FTP服务器怎么搭建?Windows server搭建FPT服务器
|
2月前
|
存储 数据库连接 数据库
如何使用Python上传文件到FTP服务器
如何使用Python上传文件到FTP服务器
42 1
|
3月前
|
存储 运维 程序员
快速搭建一个FTP服务器
快速搭建一个FTP服务器
85 0
|
3月前
|
安全 网络协议 网络安全
在Windows7搭建FTP服务器详细教学
在Windows7搭建FTP服务器详细教学