一、安装
- 服务端安装
sudo apt install -y vsftpd
- 客户端安装
sudo apt install -y ftp
二、配置项
配置文件路径:/etc/vsftpd.conf
类别 | 配置项 | 描述 |
---|---|---|
匿名用户 | anonymous_enable=yes | 允许匿名用户访问,需local_enable开启才生效 |
anon_upload_enable=YES | 允许匿名用户上传 | |
anon_mkdir_write_enable=YES | 允许匿名用户创建文件夹 | |
anon_other_write_enable=YES | 允许匿名用户删除、移动、修改等 | |
anon_umask=077 | 匿名用户上传、创建文件的默认权限 | |
全局用户配置 | local_enable=YES | 允许用户登录 |
write_enable=YES | 允许用户上传、修改、移动、删除文件 | |
local_umask=022 | 用户上传文件的默认权限 | |
访问限制 | chroot_local_user=YES | 禁止所有用户离开家目录 |
chroot_list_enable=YES | 启用配置文件限制,白名单模式 | |
chroot_list_file=/etc/vsftpd/chroot_list | 只允许该文件中用户离开家目录,其余用户都不可离开家目录,一行一个用户名 | |
登录限制 | userlist_enable=YES | 启用配置文件限制 |
userlist_deny=NO | NO白名单,YES黑名单 | |
userlist_file=/etc/vsftpd_user_list | 用户配置文件,一行一个用户名 | |
性能限制 | anon_max_rate=0 | 匿名用户最大下载速度 |
local_max_rate=0 | 用户最大下载速度 | |
max_clients=2000 | 最大并发连接数 | |
max_per_ip | 单IP的最大并发连接数 |
三、实验
1.匿名用户登录
- 修改配置文件
vim /etc/vsftpd.conf
anonymous_enable=YES
write_enable=YES
# 允许匿名用户上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# 允许匿名用户删除、移动文件
anon_other_write_enable=YES
- 创建公共目录
mkdir /srv/ftp/pub
# 必须要给定权限,否则会不能下载或上传
chown ftp:ftp /srv/ftp/pub
chmod 755 /srv/ftp/pub
- 客户端测试
ftp 192.168.149.140
# 查看
ls
# 进入公共目录
cd pub
# !ls表示查看操作系统当前位置的文件,ls表示查看ftp当前位置下的文件
!ls
# 上传文件
put aaa
2.用户登录
- 创建用户
# 创建一个用户,要有家目录
useradd -m zhangsan
# 给用户设置密码
passwd zhangsan
- 登录测试
ftp 192.168.149.140
zhangsan
123456
# 上传文件测试
>ls
>!ls
>put aaa
3.白名单或黑名单限制用户登录
ftp调用了pam模块认证,里面指向了/etc/ftpusers
文件
cat /etc/pam.d/vsftpd
直接修改/etc/ftpusers
,将需要禁止登录的账号添加进去即可禁止登录。
自定义黑白名单用户列表
- 创建一个用户列表文件
touch /etc/ftp_userlist
里面每行插入一个用户名即可
- 修改ftp配置
vim /etc/vsftpd.conf
插入以下配置
# 启用用户限制登录功能
userlist_enable=YES
# 指定用户列表文件
userlist_file=/etc/ftp_userlist
# 指定模式,如果为NO,则表示在ftp_userlist文件中的用户可以登录,其他用户不允许登录(白名单模式),否则相反。
userlist_deny=NO
- 重启服务测试
systemctl restart vsftpd
4.禁止用户离开家目录
chroot_local_user=YES
#禁止所有本地用户离开家目录,需要去除家目录w权限才能生效。
chroot_list_enable=YES
#开启后,只会允许文件中的用户切换目录
chroot_list_file=/etc/vsftpd/chroot_list
#指定用户文件路径
# 创建3个用户
useradd -m user1
useradd -m user2
useradd -m user3
passwd user1
passwd user2
passwd user3
# 编辑vsftpd.conf
vim /etc/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 重启服务
systemctl restart vsftpd.service
# 编辑用户文件
echo "user1" >> /etc/vsftpd/chroot_list
echo "user2" >> /etc/vsftpd/chroot_list
测试
- user1
- user2
- user3
5.虚拟用户
ftp用户登录使用的是ftp服务器的本地账号,当ftp账号密码泄露,会对服务器造成很大的风险。所以一般我们不给用户这种账号,而是使用一个虚拟账号。这样当这个虚拟账号密码泄露后,不会影响系统安全。
虚拟用户实际上是一个不存在于的操作系统的用户,ftp-server在进行认真的时候需要调用pam模块进行认证。因为虚拟用户不是系统用户,虚拟用户登录ftp需要一个身份权限,所以需要将虚拟用户映射到一个系统用户。
- 创建一个系统用户用于映射虚拟用户
mkdir /srv/ftp/vuser
useradd -d /srv/ftp/vuser vuser
chown vuser.vuser /srv/ftp/vuser
- 创建虚拟用户家目录
# 创建目录
mkdir /srv/ftp/vuser/user{1..3}
# 目录一定要给映射的用户属组权限
chown vuser.vuser /srv/ftp/vuser/user*
- 创建pam认证用户数据库
# 创建一个FTP配置文件夹,便于管理
mkdir -p /etc/vsftpd
# 创建用户账号密码文件,一行账号,一行密码
vim /etc/vsftpd/vuser.txt
user1
123456
user2
123456
user3
123456
# 创建本地数据库,用于pam认证
apt search db | grep -E "^db"
apt install -y db5.3-util
cd /etc/vsftpd
db5.3_load -T -t hash -f vuser.txt vuser.db
# 修改vsftpd pam模块配置文件
vim /etc/pam.d/vsftpd
# 注意,实际/etc/vsftpd/vuser文件名叫vuser.db
auth sufficient pam_userdb.so db=/etc/vsftpd/vuser
account sufficient pam_userdb.so db=/etc/vsftpd/vuser
sufficient:表示只要标记sufficient此项配置的模块一旦验证成功,立即返回成功。
required:表示此项配置的模块必须要验证成功,验证成功后还要验证其他的required,只有当所有的required验证成功才会返回成功。
- 修改vsftpd配置文件
# 添加以下配置
vim /etc/vsftpd.conf
# 启用虚拟用户
guest_enable=YES
# 虚拟用户映射的系统用户
guest_username=vuser
# 指定虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/vuser_conf
- 给虚拟用户添加配置
虚拟用户的上传、删除等权限和匿名用户的配置项一样。
vim /etc/vsftpd/vuser_conf/user1
local_root=/srv/ftp/vuser/user1
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim /etc/vsftpd/vuser_conf/user2
local_root=/srv/ftp/vuser/user2
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim /etc/vsftpd/vuser_conf/user3
local_root=/srv/ftp/vuser/user3
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
- 重启服务测试
systemctl restart vsftpd
测试发现有500报错,这是因为vsftpd是非常安全的ftp,我们只需要把家目录的w权限去掉即可。
chmod a-w /srv/ftp/vuser
chmod a-w /srv/ftp/vuser/user*
发现可以登录了,但是不能创建文件,因为我们把/srv/ftp/vuser/user1
目录的w权限给去了,所以所有用户不能在此目录下创建、删除文件。解决办法很简单,我们在服务器上创建一个上传目录即可。
mkdir /srv/ftp/vuser/user1/upload
chown vuser.vuser /srv/ftp/vuser/user1/upload