搭建FTP文件共享服务器
(这里以安全的虚拟用户模式的VSFTPD为例)是一个系统性的过程。
搭建目标
使用 VSFTPD (Very Secure FTP Daemon) 搭建一个FTP服务器,其特点是:
使用虚拟用户:FTP账号与系统账号分离,更安全。
本地用户隔离:每个虚拟用户可以被限制在自己的家目录中,无法访问系统其他部分。
启用TLS加密(可选):保护数据传输过程,避免密码和数据明文传输。
安装 VSFTPD
给vsftpd配置文件备份
修改配置文件
vim vsftpd.conf 修改里面的配置信息
将原本的信息修改成以下信息
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
创建upload目录,并修改pub和upload的权限,允许所有人都可以访问
重启vsftpd服务,并查看状态是否开启。(active为开启)
关闭selinux和防火墙,防止无法访问
在电脑地址栏输入ftp://192.168.102.128并访问
其ip地址应为你的网卡ip地址 可以发现,创建upload目录已经以文件形式可以查看
扩展
创建虚拟用户数据库
1.创建认证文件
vim /etc/vsftpd/ftp_auth_file
创建一个文本文件,奇数行为用户名,偶数行为密码。
第二步:创建虚拟用户数据库
2. 生成数据库文件
使用 db_load
命令将文本文件转换为VSFTPD可识别的DB数据库文件。
db_load -T -t hash -f ftp_auth_file ftp_auth_file.db
使用 ls -l /etc/vsftpd/
查看新生成的 virtual_users.db
文件以确认。
第三步:创建PAM认证文件
PAM(Pluggable Authentication Modules)是 Linux 系统中用于管理用户认证(比如验证密码)的一套机制
我们需要告诉系统如何使用刚才创建的数据库文件来验证用户。
以下是vsftpd的认证文件内容
创建或编辑PAM配置文件:
建立文件 vim /etc/pam.d/test ,test这个文件名可以自定义
注意:这里写的是 db=/etc/vsftpd/virtual_users
,而不是 virtual_users.db
,PAM会自动添加 .db
后缀。
编辑vsftpd的主配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd:是告诉 vsftpd 使用 /etc/pam.d/
目录下名为 vsftpd
的 PAM 配置文件来进行用户登录验证。但注释了,不生效
pam_service_name=test:它指示 vsftpd 使用
/etc/pam.d/
目录下名为test
的 PAM 配置文件来进行用户认证。系统管理员创建了一个名为
test
的自定义 PAM 配置来定义特殊的认证规则(例如,允许某些用户无需密码登录,或者只允许特定用户组的成员登录)。这代替了默认的vsftpd
配置。
guest_enable=YES
这开启了 “来宾(Guest)”登录功能
这意味着,任何非匿名登录的普通用户(例如,系统用户
zhangsan
、lisi
),在登录 FTP 时都不会被当作其本人,而是会被映射为另一个指定的来宾用户。
guest_username=ftp
这行与上一行
guest_enable
配合使用,定义了来宾用户具体被映射到哪个系统账户。在这里,所有非匿名登录的用户,一旦登录成功,他们在服务器上的权限将等同于系统用户
ftp
。这样做是出于安全考虑,限制了 FTP 用户只能在
ftp
用户拥有的目录范围内活动,而无法访问整个服务器的文件系统。
ftp的家目录就是/var/ftp/pub 目录,原因是刚刚已经把它限制
可以查看/etc/passwd里的内容找到
然后重启vsftpd服务,使配置生效
第四步:测试连接
我们使用另一台主机登录这些虚拟用户(win+R)
用户名/Username: test
密码/Password: 123
再扩展
虚拟用户家目录的独立设定
默认的虚拟用户我们登录的家目录都在/var/ftp里,那他们创建的目录上传的东西都会在一起,
如果要删除某个虚拟用户的文件,找起来就很麻烦了,所以为了方便管理我们将这些虚拟用户
建立分开的家目录。
首先我们去给每个虚拟用户建立他们的家目录
mkdir /home/test{1..3}
编辑配置文件:vim /etc/vsftpd/vsftpd.conf
local_root=/home/$USER : 指定用户的登录的家目录, $USER是系统对于用户的一个变量指代
user_sub_token=$USER : 指定上面写的 $USER是我们系统中的,否则vsftp无法识别
完成后,依然是重启服务
systemctl restart vsftpd
就可以测试登录查看。