安装vsftpd
1、安装vsftpd
sudo yum install -y vsftpd
2、运行以下命令,启动FTP服务,并设置开机自启动。
sudo systemctl start vsftpdsudo systemctl enable vsftpd
3、运行以下命令,查看FTP服务监听的端口。
sudo netstat -antup | grep ftp
出现如下图所示界面,表示FTP服务已启动,监听的端口号为21。
此时,vsftpd默认已开启匿名访问功能,无需输入用户名密码即可登录FTP服务器,但没有修改或上传文件的权限。
配置vsftpd
1、创建一个Linux用户并设置密码。
2、运行以下命令,为FTP服务创建一个Linux用户。
本示例中,该用户名为 ftptest
sudo adduser ftptest
运行以下命令,修改 ftptest
用户的密码。
sudo passwd ftptest
运行命令后,根据命令行提示完成FTP用户的密码修改。
3、运行以下命令,创建一个供FTP服务使用的文件目录。
sudo mkdir -p /var/ftp/test
4、运行以下命令,创建测试文件。
该测试文件用于FTP客户端访问FTP服务器时使用。
sudo touch /var/ftp/test/testfile.txt
5、运行以下命令,更改 /var/ftp/test
目录的拥有者为 ftptest
。
sudo chown -R ftptest:ftptest /var/ftp/test
6、修改 vsftpd.conf
配置文件。
sudo vim /etc/vsftpd/vsftpd.conf
按 i
进入编辑模式。配置FTP服务器工作模式。 FTP服务器支持以下两种工作模式:
主动模式(Active Mode):客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
被动模式(Passive Mode):FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。
本文介绍配置FTP服务器为被动模式。具体的配置参数说明如下,除下面提及的参数,其他参数保持默认值即可。
修改下列参数的值:
#禁止匿名登录FTP服务器。anonymous_enable=NO#允许本地用户登录FTP服务器。local_enable=YES#监听IPv4 sockets。listen=YES
在行首添加#注释掉以下参数,关闭监听IPv6 sockets:
#listen_ipv6=YES
在配置文件的末尾添加下列参数,其中 pasv_address
需修改为FTP服务器的公网IP地址。
#设置本地用户登录后所在目录。local_root=/var/ftp/test#全部用户被限制在主目录。chroot_local_user=YES#启用例外用户名单。chroot_list_enable=YES#指定例外用户列表文件,列表中用户不被锁定在主目录。chroot_list_file=/etc/vsftpd/chroot_list#开启被动模式。pasv_enable=YESallow_writeable_chroot=YES#本教程中为Linux实例的公网IP。pasv_address=FTP服务器公网IP地址#设置被动模式下,建立数据传输可使用的端口范围的最小值。#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。pasv_min_port=50000#设置被动模式下,建立数据传输可使用的端口范围的最大值。pasv_max_port=50010
按 Esc
键,输入 :wq
,按 Enter
键关闭并保存配置文件。
6、创建 chroot_list
文件,并在文件中写入例外用户名单。
运行以下命令,创建 chroot_list
文件。
Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x
sudo vim /etc/vsftpd/chroot_list
按 i
进入编辑模式。
输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
重要
没有例外用户时,也必须创建chroot_list
文件,内容可为空。
按 Esc
键,输入 :wq
,按 Enter
键关闭并保存配置文件。
7、运行以下命令,重启vsftpd服务。
sudo systemctl restart vsftpd
测试搭建的FTP服务器
FTP客户端、Windows命令行工具或浏览器均可用来测试FTP服务器。本文以Windows 系统的本地主机作为FTP客户端,介绍FTP服务器的访问步骤。
1、在本地主机,打开 这台电脑 。
2、在地址栏中输入 ftp://<FTP服务器公网IP地址>:<FTP端口>
,本文中为Linux实例的公网IP地址。例如:ftp://IP:21 。
3、在弹出的 登录身份 对话框中,输入已设置的FTP用户名和密码,然后单击 登录 。
登录后,您可以查看到FTP服务器指定目录下的文件,例如:测试文件 testfile.txt 。
设置权限
为了实现 FTP 用户只能删除自己上传的文件,而只能读取或下载其他人上传的文件但不能删除,你可以通过以下方法进行配置。这个设置会涉及到用户权限的管理,以及利用 Linux 文件系统的权限机制来实现。
假设你正在使用 vsftpd
作为 FTP 服务器,以下是实现此功能的步骤:
创建一个公共的上传目录
首先,为所有 FTP 用户创建一个共享的上传目录。假设该目录为 /srv/ftp/shared
,你可以执行以下命令:
sudo mkdir -p /srv/ftp/sharedsudo chown root:ftpusers /srv/ftp/sharedsudo chmod 1777 /srv/ftp/shared
解释:
chmod 1777
:这里的 1
是**粘滞位(sticky bit)**,它确保了用户只能删除自己拥有的文件,而不能删除其他用户的文件。其他部分 777
表示所有用户对该目录具有读写执行权限。
chown root:ftpusers
:将目录的所属组设置为 ftpusers
,并将目录所有者设为 root
。
创建 FTP 用户组
创建一个专门用于 FTP 用户的用户组:
sudo groupadd ftpusers
然后,将所有允许上传文件的用户添加到该组:
sudo usermod -aG ftpusers ftpuser1sudo usermod -aG ftpusers ftpuser2
你可以将所有需要上传文件的用户都添加到 ftpusers
组。
设置 vsftpd
配置文件
编辑 vsftpd 的配置文件 /etc/vsftpd/vsftpd.conf
,添加或确保以下配置:
local_enable=YESwrite_enable=YESfile_open_mode=0777local_umask=0002
local_enable=YES
:允许本地用户登录。
write_enable=YES
:允许用户具有写入权限。
file_open_mode=0777
和 local_umask=0002
:这些选项确保文件的默认权限为 775
,即创建的文件对其他用户可读写,但只允许文件的所有者删除它。
检查并设置目录权限
为确保文件的粘滞位和目录权限正确,使用以下命令确保上传目录及其子目录继承正确的权限:
sudo chmod +t /srv/ftp/shared
这将为目录设置粘滞位,确保用户只能删除自己上传的文件,而不能删除其他用户的文件。
重启 FTP 服务
完成以上配置后,重启 vsftpd
服务以应用更改:
sudo systemctl restart vsftpd
测试
用户上传文件:所有用户都可以上传文件到 /srv/ftp/shared
目录。
文件权限:每个用户只能删除自己上传的文件。其他用户可以读取或下载文件,但不能删除他们没有上传的文件。
总结
通过以上设置:
用户只能删除自己上传的文件,这通过粘滞位(sticky bit
)实现。
用户可以读取和下载其他用户上传的文件,但不能删除它们。