文章目录
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.