Linux vsftpd 服务部署与配置

Linux vsftpd 服务部署与配置

一、vsftpd简介

FTP 是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21 号端口,其中端口20 用于进行数据传输,端口21 用于接受客户端发出的相关FTP 命令与参数,FTP 协议有下面两种工作模式。

1. 工作模式

  • 主动模式(PORT 模式): 21端口(验证,握手),20端口(数据传输)
  • 被动模式(PASV 模式): 21端口(验证,握手),1024-65535端口(数据传输)

注:一般的FTP服务器都采用此被动模式(PASV 模式)作为默认模式

2. 认证模式

vsftpd 作为更加安全的文件传输协议服务程序,允许用户以 3 种认证模式登录 FTP 服务器。

  • 匿名开放模式: 是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到 FTP 服务器。

  • 本地用户模式: 是通过 Linux 系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录 FTP 服务器,从而完全控制整台服务器。

  • 虚拟用户模式: 更安全的一种认证模式,它需要为 FTP 服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

3. 常用参数说明

参数作用
listen=[YES|NO]是否以独立运行的方式监听服务
listen_address=IP 地址设置要监听的 IP 地址
listen_port=21设置 FTP 服务的监听端口
download_enable=[YES|NO]是否允许下载文件
userlist_enable=[YES|NO]启用/etc/vsftpd/user_list文件进行访问控制
userlist_deny=[YES|NO]拒绝或允许,名单文件 ftpusers 和 user_list 的用户
max_clients=0最大客户端连接数,0 为不限制
max_per_ip=0同一 IP 地址的最大连接数,0 为不限制
anonymous_enable=[YES|NO]是否允许匿名用户访问
anon_upload_enable=[YES|NO]是否允许匿名用户上传文件
anon_umask=022匿名用户上传文件的 umask 值
anon_root=/var/ftp匿名用户的 FTP 根目录
anon_mkdir_write_enable=[YES|NO]是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO]是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0匿名用户的最大传输速率(字节/秒),0 为不限制
local_enable=[YES|NO]是否允许本地用户登录 FTP
local_umask=022本地用户上传文件的 umask 值
local_root=/var/ftp本地用户的 FTP 根目录
chroot_local_user=[YES|NO]是否将用户权限禁锢在 FTP 目录,以确保安全
local_max_rate=0本地用户最大传输速率(字节/秒),0 为不限制
user_config_dir定义虚拟用户不同权限的配置文件所存放的路径

二、软件安装

yum install vsftpd
yum install ftp

以下测试均在关闭SElinux及防火墙的环境下进行,如果在实验过程中出现相权限问题或无法访问等,优先关闭防火墙及SElinux

三、匿名访问模式配置

1. 修改配置文件

修改配置/etc/vsftpd/vsftpd.conf内容

anonymous_enable=YES            #允许匿名访问模式
anon_umask=022                  #匿名用户上传文件的 umask 值
anon_upload_enable=YES          #允许匿名用户上传文件
anon_mkdir_write_enable=YES     #允许匿名用户创建目录
anon_other_write_enable=YES     #允许匿名用户修改目录名称或删除目录
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES           #进入某个目录时,会读取那个目录下.message文件(里面可以写欢迎信息)
xferlog_enable=YES              #记录上传下载的日志
connect_from_port_20=YES        #打开主动传输模式 允许采用20端口来传输数据
xferlog_std_format=YES          #启用xfer日志格
listen=YES                      #侦听在IPv4网络
listen_ipv6=YES                 #侦听在IPv6网络
pam_service_name=vsftpd         #vsftpd验证方式/etc/pam.d/vsftpd
userlist_enable=YES

2.启动服务

systemctl restart vsftpd
systemctl enable vsftpd

3.修改目录权限

匿名模式的默认目录为/var/ftp/pub,也可以通过 anon_root 指定目录,该目录需要ftp用户有相应的权限

ls -ld /var/ftp/pub
drwxr-xr-x. 2 root root 8 Aug 13 2024 /var/ftp/pub

chown -R ftp /var/ftp/pub

ls -ld /var/ftp/pub
drwxr-xr-x. 2 ftp root 8 Aug 13 2024 /var/ftp/pub

4.测试登陆

ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 (vsFTPd 3.0.3)
Name (192.168.10.10:root): anonymous
331 Please specify the password.
Password:  --直接回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.

四、本地用户模式配置

1. 修改配置文件

修改配置/etc/vsftpd/vsftpd.conf内容

anonymous_enable=NO     #禁止匿名访问模式
local_enable=YES        #允许本地用户模式
write_enable=YES        #设置可写权限
local_umask=022         #本地用户模式创建文件的 umask 值
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES

2.启动服务

systemctl restart vsftpd
systemctl enable vsftpd

4.测试登陆

vsftpd服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers 和 user_list)。只要里面写有某个用户的名字,就不允许这位用户登录到 FTP 服务器上,如果需要使用root用户登陆,需要从/etc/vsftpd/user_list文件中将其删除

ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 (vsFTPd 3.0.3)
Name (192.168.10.10:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

五、虚拟用户模式

1. 创建用户密码文件

# 1. 创建明文用户文件(奇数行用户名,偶数行密码)
echo -e "user1\npass1\nuser2\npass2" > /etc/vsftpd/vusers.txt  
 
# 2. 生成 Berkeley DB 文件 
db_load -T -t hash -f /etc/vsftpd/vusers.txt  /etc/vsftpd/vusers.db  
chmod 600 /etc/vsftpd/vusers.db  

# 3. 删除明文文件
rm -rf  /etc/vsftpd/vusers.txt

2. 创建虚拟用户映射的系统本地用户

useradd -d /var/ftproot -s /sbin/nologin virtual

chmod -Rf 755 /var/ftproot/

3.建立用于支持虚拟用户的 PAM 文件

新建一个用于虚拟用户认证的 PAM 文件 /etc/pam.d/vsftpd_vuser

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

4. 修改配置文件

anonymous_enable=NO             #禁止匿名开放模式
local_enable=YES                #允许本地用户模式
write_enable=YES
guest_enable=YES                #开启虚拟用户模式
guest_username=virtual          #指定虚拟用户账户
allow_writeable_chroot=YES      #允许对禁锢的 FTP 根目录执行写入操作,而且不拒绝用户的登录请求
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=YES
pam_service_name=vsftpd_vuser      #指定 PAM 文件
userlist_enable=YES

5. 为虚拟用户设置不同的权限

虽然账户 user1 和 user2 都是用于 vsftpd 服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许user2上传、创建、修改、查看、删除文件,只允许user1查看文件。这可以通过 vsftpd 服务程序来实现。只需新建一个目录,在里面分别创建两个以 user1 和 user2 命名的文件,其中在名为 user2 的文件中写入允许的相关权限(使用匿名用户的参数)

  • 创建权限文件
/etc/vsftpd/vusers_dir/
touch user1
vim user2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
  • 再次修改 vsftpd 主配置文件
anonymous_enable=NO             #禁止匿名开放模式
local_enable=YES                #允许本地用户模式
write_enable=YES
guest_enable=YES                #开启虚拟用户模式
guest_username=virtual          #指定虚拟用户账户
allow_writeable_chroot=YES      #允许对禁锢的 FTP 根目录执行写入操作,而且不拒绝用户的登录请求
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=YES
pam_service_name=vsftpd_vuser      #指定 PAM 文件
userlist_enable=YES
user_config_dir=/etc/vsftpd/vusers_dir  #定义虚拟用户不同权限的配置文件所存放的路径

6.启动服务

systemctl restart vsftpd
systemctl enable vsftpd

7.测试登陆

ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 (vsFTPd 3.0.3)
Name (192.168.10.10:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值