Linux环境搭建vsftpd服务

vsftpd(very secure FTP daemon)是一个广泛使用的、开源的FTP服务器软件,以其高性能、高安全性和稳定性著称,支持多种FTP相关协议,包括FTP、SFTP(通过SSH)、TLS/SSL加密的FTP等。

一:安装vsftpd

#安装vsftpd服务
yum install vsftpd -y
#启动FTP服务,并设置开机自启动 
systemctl enable vsftpd
systemctl restart vsftpd
#查看FTP服务监听的端口
netstat -anpt |grep ftp

二:配置vsftpd

创建一个Linux用户并设置密码。

FTP支持以下三种认证模式:

  • 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。

  • 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。

  • 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其他资源,进一步增强了FTP服务器的安全性。

本文介绍为FTP服务创建一个Linux系统本地账号

运行以下命令,为FTP服务创建一个Linux用户。

adduser ftptest
passwd ftptest

修改vsftpd.conf配置文件。

运行以下命令,打开vsftpd的配置文件

[root@localhostvsftpd]# cat vsftpd.conf 
#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#可以上传文件全局控制
write_enable=YES
#本地用户上传的文件权限
local_umask=077
#监听IPv4 sockets
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
allow_writeable_chroot=YES
#启用例外用户名单
chroot_list_enable=YES
#全部用户被限制在主目录
chroot_local_user=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
[root@localhostvsftpd]# 
 

本文配置的为用户登录后在自己家目录中进行操作的实例

配置讲解:

chroot_local_user=YES   						#设置是否锁定本地用户在自己的主目录中,(登录后无法cd到父目录或同级目录中)
chroot_list_enable=YES   						#设置是否将用户锁定在自己的主目录中
chroot_list_file=/etc/vsftpd/chroot_list      	#定义哪些用户将会锁定在自己的主目录中


vsftp配置文件及参数说明
/etc/vsftpd目录下文件说明如下:
/etc/vsftpd/vsftpd.conf是vsftpd的核心配置文件。
/etc/vsftpd/ftpusers是黑名单文件,此文件中的用户不允许访问FTP服务器。
/etc/vsftpd/user_list是白名单文件,此文件中的用户允许访问FTP服务器。

二、vsftpd配置虚拟用户访问

1、安装vsftpd

#yum install vsftpd -y

2、创建vsftpd系统用户:

#建立Vsftpd服务的宿主用户
useradd vsftpd -M -s /sbin/nologin
#建立Vsftpd虚拟宿主用户
# useradd -d /data/ftp -M -s /sbin/nologin vftpuser

3.配置vsftpd

备份源文件

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.back

3.1修改vsftpd.conf配置文件

vim /etc/vsftpd/vsftpd.conf
[root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#可以上传文件全局控制
write_enable=YES
#本地用户上传的文件权限
local_umask=077
#监听IPv4 sockets
listen=YES
#设定支持TCP Wrappers
tcp_wrappers=YES
allow_writeable_chroot=YES
#启用例外用户名单
chroot_list_enable=YES
#全部用户被限制在主目录
chroot_local_user=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
#设定Vsftpd的服务日志保存路径.注意,该文件默认不存在,必须要手动touch出来,注意给与该用户对日志的写入权限
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
#下面是关于虚拟用户的配置
#打开虚拟用户功能
guest_enable=YES
#将所有虚拟用户映射成vftpuser这个本地用户,此用户是之前新建的用户
guest_username=vftpuser
#设定PAM服务下Vsftpd的验证配置文件名,默认是vsftpd文件,因此PAM验证将参考/etc/pam.d/下的vsftpd文件配置.
pam_service_name=vsftpd
#设定虚拟用户个人Vsftp的配置文件存放路径.这个被指定的目录里,将存放每个Vsftp虚拟用户的配置文件,一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同
user_config_dir=/etc/vsftpd/vconf
[root@localhost vsftpd]# 

4、建立Vsftpd的日志文件,并更该属主为Vsftpd的服务宿主用户:

touch /var/log/vsftpd.log
chown vsftpd.vsftpd /var/log/vsftpd.log

5、 虚拟用户配置

5.1 创建虚拟用户配置文件存放路径
mkdir -pv /etc/vsftpd/vconf/
5.2制作虚拟用户数据库文件
touch /etc/vsftpd/virtusers
新建一个测试用虚拟用户
vim /etc/vsftpd/virtusers
编辑这个虚拟用户名单文件,在其中加入用户的用户名和口令信息。格式很简单:“奇数行用户名,偶数行口令”。
virtusers文件格式如下:
test     #用户名
test1234 #用户密码

生成虚拟用户数据文件:
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

需要特别注意的是,以后再要添加虚拟用户的时候,只需要按照“一行用户名,一行口令”的格式将新用户名和口令添加进虚拟用户名单文件。但是光这样做还不够,这样是不会生效的!还要再执行一遍“ db_load -T -t hash -f 虚拟用户名单文件 虚拟用户数据库文件.db ”的命令使其生效才可以!

6、设置认证文件PAM

在编辑前做好备份:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
编辑Vsftpd的PAM验证配置文件,把原来的配置文件全部注释掉(不注释掉虚拟用户会登录不上),添加如下行

# vim /etc/pam.d/vsftpd
auth    sufficient      /lib64/security/pam_userdb.so    db=/etc/vsftpd/virtusers
account sufficient      /lib64/security/pam_userdb.so    db=/etc/vsftpd/virtusers

#以上两条是手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。
这里的auth是指对用户的用户名口令进行验证。
这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。
其后的sufficient表示充分条件,也就是说,一旦在这里通过了验证,那么也就不用经过下面剩下的验证步骤了。相反,如果没有通过的话,也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核。
再后面的/lib/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。
最后的db=/etc/vsftpd/virtusers则指定了验证库函数将到这个指定的数据库中调用数据进行验证。

7、虚拟用户配置

7.1规划好虚拟用户的主路径:
/data/ftp/virtual
建立测试用户的FTP用户目录:

mkdir /data/ftp/virtual/test
更改虚拟用户的主目录的属主为虚拟宿主用户:
chown -R vftpuser.vftpuser /data/ftp/virtual/

7.2建立虚拟用户模板文件:
# vconf.tmp内容如下:
local_root=/data/ftp/virtual/username
#指定虚拟用户的具体主路径
anonymous_enable=NO
#设定不允许匿名用户访问
write_enable=YES
#设定允许写操作
local_umask=022
#设定上传文件权限掩码
anon_upload_enable=NO
#设定不允许匿名用户上传
anon_mkdir_write_enable=NO
#设定不允许匿名用户建立目录
idle_session_timeout=600
#设定空闲连接超时时间
data_connection_timeout=120
#设定单次连续传输最大时间
max_clients=10
#设定并发客户端访问个数
max_per_ip=5
#设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件
local_max_rate=50000
#设定该用户的最大传输速率,单位b/s

test用户复制配置模板
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/test

vim /etc/vsftpd/vconf/test
修改内容 
local_root=/data/ftp/virtual/test


重启服务:
# systemctl restart vsftpd.service
# ftp 10.0.1.2

##################################################
添加虚拟用户:

vim /etc/vsftpd/virtusers
test
test1234
ftpuser
D0903123


生成虚拟用户数据文件:
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

编辑虚拟用户配置文件
[root@dlpsafeftp vconf]# cat ftpuser 
local_root=/data/ftp/virtual/ftpuser
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000

# 建立ftp的用户目录
mkdir /data/ftp/virtual/ftpuser
chown -R vftpuser.vftpuser /data/ftp/virtual/


重启服务:
# systemctl restart vsftpd.service
# ftp 10.0.1.2

 号外:虚拟用户如果需要上传、下载、删除等权限,还需要开通如下参数.

virtual_use_local_privs=YES #虚拟用户具有写权限(上传、下载、删除、重命名)

 

参考文档:在Linux实例中搭建FTP服务器_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

       https://www.cnblogs.com/UG9527/p/11409703.html

posted @ 2024-10-16 13:26  梦徒  阅读(89)  评论(0编辑  收藏  举报