文章目录
1. ftp的安装和使用
ftp(file transfer proto):文本传输协议
安装ftp
服务端vsftp:守护进程
客户端lftp:浏览器
dnf search ftp
dnf install vsftpd lftp -y
实验环境
vim /etc/selinux/config
getenforce ——> selinux:disabled
systemctl enable --now vsftpd
systemctl enable --now firewalld
firewall-cmd --permanent -add-service=ftp
firewall-cmd --reload
lftp 192.168.0.17
ftp默认不允许匿名用户登陆(为了安全)
2. vsftpd基本信息
服务名称:vsftpd.service
配置目录:/etc/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
默认发布目录:/var/ftp
报错信息 | 说明 |
---|---|
550 | 程序本身拒绝 |
553 | 文件系统权限限制 |
500 | 权限过大 |
530 | 认证失败 |
3. 匿名用户访问控制
- 匿名用户的登陆控制
修改12行:anonymous_enable=YES
,允许匿名用户登陆
vim /etc/vsftp/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
lftp 192.168.0.17 -u westos
- 匿名用户的家目录控制
匿名用户的默认发布目录是/var/ftp,进行以下的修改
修改第13行:anon_root=/westosdir
,用户设定默认发布目录
mkdir /westosdir
touch /westosdir/file1
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
- 匿名用户的上传功能
匿名用户默认不能上传文件
550:服务本身不允许,拒绝
先修改30行:anon_upload_enable=YES
,允许用户上传
(这时去 lftp 会提示553:权限过小)
再修改权限,默认发布目录的子目录的拥有组是ftp组
注意!默认发布目录的权限不可以改动!否则,系统会提示权限过大,500
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
>put /etc/passwd
- 匿名用户的建立目录功能
修改34行:anon_mkdir_write_enable=YES
,允许匿名用户新建目录
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
>mkdir test
- 匿名用户的删除控制
添加36行:anon_other_write_anable=YES
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
>rm -fr test
- 匿名用户的下载控制
默认下匿名用户不允许下载控制,错误提示550:服务本身不允许
修改:anon_world_readable_only=NO
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
>get passwd
- 上传文件的权限控制
之前显示的权限是600,说明umask=077
现在要求显示权限是644,说明umask=022
修改:anon_umask=022
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
>put /root/Desktop/test1
>ls
- 用户身份控制
上传文件的用户和组是ftp,
修改53行:chown_username=westos
修改52行:chown_uploads=YES
,上传之后,文件的所有人改变
添加56行:chown_upload_mode=0644
,修改一下权限,指定上传文件权限
(之前设定的anon_umask=022不生效了)
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
>put /root/Desktop/test2
- 登陆个数控制
注意!在ftp服务中可以ls出数据,则证明登陆成功
添加:max_clients=2
,连接服务器的个数不能超过2个
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
- 上传速率控制
生成大文件
dd if=/dev/zero of=/mnt/bigfile bs=1M count=2000
进行限速
添加:anon_max_rate=102400
,匿名用户的上传速率被控制在每秒钟100M左右
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17
>put /mnt/bigfile
4. 本地用户的访问
默认访问用户的家目录
lftp 192.168.0.17 -u westos
- 本地用户登陆的原因:系统中有个参数
local_anbale=YES
修改17行:local_anbale=NO
,本地用户不能登陆
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u westos
- 上传文件权限
修改20行:write_anable=NO
,禁止ftp服务提供写功能,匿名用户也不能写
写功能是上传删除等
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u yao
>put /root/Desktop/test1
- 权限
之前权限默认是644
修改24行:local_umask=077
(系统默认保留的权限)
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u westos
>put /root/Desktop/test2
>ls
- 登陆控制
默认本地用户都可以登陆
现在需要设定用户登陆名单:黑名单,白名单
文件 | 说明 |
---|---|
/etc/vsftpd/ftpusers | 永久黑名单 |
/etc/vsftpd/user_list | 临时黑名单(经过设定可以成为白名单) |
注意!超级用户一直在黑名单!
将westos用户写入永久黑名单
将用户yao写入临时黑名单
添加132行:userlist_deny=NO
,所有用户被拒绝登陆ftp,此时,user_list中的用户可以登陆
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
vim /etc/vsftpd/user_list
lftp 192.168.0.17 -u westos
lftp 192.168.0.17 -u yao
root虽然也在list中,但是,root依旧无法登陆,因为root在永久黑名单/etc/vsftpd/ftpusers
中
- 家目录控制
mkdir /westosdir
touch /westosdir/file1
所有本地用户的默认发布目录都在/westosdir
添加18行:local_root=/westosdir
,设定本地用户家目录
注释#参数,本地用户登陆的是自己的家目录
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u westos
>ls
- 本地用户家目录的访问控制
默认情况下,匿名用户不能查看根目录
但是,本地用户是可以查看根目录,因为开放了除了家目录的其他目录的浏览权限
需要禁止这种权限
修改106行:chroot_local_user=yes
,安全级别提升,不允许查看根目录,也可能会造成不允许登陆
拒绝登录的应对措施:chmod u-w /home/*
,删除写权限,否则,不能访问
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u westos
>ls
修改106行:chroot_local_user=no
,是默认允许用户访问根目录,锁定用户到自己的家目录中,使用户不能浏览根目录
修改107行:chroot_list_enable=YES
,名单功能开启,可以指定黑名单,写入不允许查看根目录的用户
修改109行:chroot_list_file=/etc/vsftpd/chroot_list
,黑名单
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u westos
>ls
编辑黑名单,写入用户westos
touch /etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
lftp后,不能查看根目录,会被锁定到默认发布的家目录
以上是默认设置
修改106行:chroot_local_user=yes
修改109行:chroot_list_file=/etc/vsftpd/chroot_list
,现在 /etc/vsftpd/chroot_list 是 白名单
此时,白名单里没有写入用户,因此所有用户都不能查看根目录,写入westos后,westos可以查看根目录
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u westos
>ls
写入westos到白名单/etc/vsftpd/chroot_list中
5. 虚拟用户
5.1 虚拟用户认证
以上本地用户都是真实存在的
虚拟用户的概念可以类比,自己的邮箱就不可能是服务器的本地用户
设定行为规范rule
认证程序pam(看管人)
(etc/pam.d
插件.so
- 制作认证名单
vim /etc/vsftpd/virt_users
写入的格式如下:
user1
123
user2
123
加密该文件,否则不生效
db_load -T -t hash -f /etc/vsftpd/virt_usres /etc/vsftpd/virt_usres.db
- 制定规则rule
(谁通过什么样的规则去验证)
查看格式规范
vim /etc/pam.d/vsftpd
required:如果用户名和密码错误,直接拒绝登陆
vim /etc/pam.d/virt_user
账号 | 认证方式 | 认证插件 | 认证文件 |
---|---|---|---|
account | required | pam-userdb.so | db=/etc/vsftpd/virt_user |
密码 | 验证方式 | 验证插件 | 验证对比文件 |
---|---|---|---|
auth | required | pam_userdb.so | db=/etc/vsftpd/virt_user |
- 写配置文件
修改131行:pam_service_name=virt_user
修改132行:userlist_enable=YES
修改133行:guest_enbale=YES
修改134行:guest_username=ftp
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u user1
lftp 192.168.0.17 -u user2
- 测试
user1 user2 登陆成功
5.2 虚拟用户家目录的独立设定
家目录都在默认发布目录中,应该每个人都有个独立的家目录
mkdir -p /ftphomedir/user{1..2}/pub
登陆谁,家目录就应该是谁的家目录
编辑配置文件
引入变量:echo $USER
添加136行:local_root=/ftphomedir/$USER
添加137行:声明设定,user_sub_token=$USER
,这个变量是shell中的变量,在vim中是不识别的,需要声明一下
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u user1
lftp 192.168.0.17 -u user2
5.3 用户配置独立
之前的所有虚拟用户的配置文件都是主配置文件
设定虚拟用户的默认发布目录的ftp组身份,修改权限
chgrp ftp /ftphomedir/user{1,2}/pub
chmod 775 /ftphomedir/user{1,2}/pub
删除之前的主配置文件设定的权限
建立虚拟用户对应的配置目录
建立虚拟用户对应的配置文件
配置文件的名字一定和用户名字一样
mkdir /etc/vsftpd/userconfdir
vim /etc/vsftpd/userconfdir/user1
编辑主配置文件
添加138行:user_config_dir=/etc/vsftpd/userconfdir
,虚拟用户的配置目录
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
lftp 192.168.0.17 -u user1
lftp 192.168.0.17 -u user2