一、ftp相关知识
ftp文件传输协议,一般使用20,21端口,默认打开21端口。
有两种模式:主动模式(Standard)和被动模式(PASV)
主动被动是针对客户端来说的。两台机器通过21端口建立链接,要接收文件时是主动链接还是等服务器发起。
- ftp默认发布目录 /var/ftp
- 默认发布子目录 /var/ftp/pub
- 协议接口 21/tcp
- 服务配置文件 /etc/vsftpd/vsftpd.conf
二、ftp的搭建(在同一主机上设定与连接)
步骤1:配置yum源
本次实验使用的是系统中的server虚拟机,版本是7.0(hostnamectl查看),所以yum配置需要配置7.0的镜像。
cd /etc/yum.repos.d/
ls
vim rhel_vdv.repo
步骤2:安装ftp软件
yum install vsftpd -y
步骤4:打开vsftpd服务
systemctl start vsftpd
systemctl enable vsftpd
步骤5:查看服务信息
rpm -ql vsftpd #查看该服务的安装目录
rpm -qc vsftpd #查看该服务的配置文件
安装目录:
配置文件:
步骤6:在防火墙中添加ftp服务
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload #重新加载
firewall-cmd --list-all #查看防火墙信息
在防火墙中添加ftp服务:
重新加载防火墙:
查看:
步骤7: 安装lftp软件,可以使用ftp服务,是客户端软件
yum install lftp -y
步骤8:查看selinux状态,需设置为警告或开启状态
getenforce
步骤9: 开启警告模式
setenforce 0
测试:
lftp 172.25.254.119 #以匿名身份登陆ftp服务器,这里的匿名用户相当于ftp用户
lftp上下载
单个文件:
上传: put 文件名
下载: get 文件名
多个文件 :
上传: mput 文件名1 文件名2
下载: mget 文件名1 文件名2
整个目录:
上传: mirror -R 文件夹名
下载: mirror 下载文件夹放到本地的位置
三、实验常见问题
1、配置文件: /etc/vsftpd/vsftpd.conf
每次修改配置文件参数都需要重启服务
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
2、错误原因:
530 认证失败
500 权限过大 解决方法: chmod u-w username
550 服务本身不允许 解决方法:在配置文件中开启服务
553 文件系统权限过小 解决方法: setenforce 0
3、本地用户和匿名用户默认家目录
/var/ftp 匿名用户登陆,默认的家目录
/home/student student用户登陆,默认登陆用户家目录
ls /home/ #查看普通用户,本地用户
四、用户权利命令
匿名用户
pub目录只对超级用户可写
- 所有匿名用户上传下载均在/var/ftp/pub/
限制文件 /etc/vsftpd/vsftpd.conf
【1】匿名用户可登陆
anonymous_enable=YES|NO
在/etc/vsftpd/vsftpd.conf配置:
测试:
【2】匿名用户可上传
chmod 775 /var/ftp/pub
chgrp ftp /var/ftp/pub #使所有匿名用户拥有读写执行的权力
vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
systemctl restart vsftpd
在/etc/vsftpd/vsftpd.conf配置:
测试:
【3】匿名用户可下载
anon_world_readable_only=NO|YES #NO表示可下载
【4】匿名用户建立目录
anon_mkdir_write_enable=YES
在/etc/vsftpd/vsftpd.conf配置:
测试:
【5】匿名用户是否可以删除和重命名
anon_other_write_enable=YES
在/etc/vsftpd/vsftpd.conf配置:
测试:
【6】匿名用户家目录修改
mkdir /westos #建立目录/westos
anon_root=/westos
在/etc/vsftpd/vsftpd.conf配置:
测试:
【7】匿名用户上传文件默认权限修改
anon_umask=022 #文件权限为644
在/etc/vsftpd/vsftpd.conf配置:
测试:
【8】匿名用户使用的用户身份修改
chown_uploads=YES
chown_username=student #匿名用户上传下载都使用student身份
【9】最大上传速率
anon_max_rate=102400 单位:字节 k 102400KB=100MB
测试:
dd if=/dev/zero of=/mnt/bigfile bs=1M count=1500
lftp 172.25.254.119
cd pub/
put /mnt/bigfile
在/etc/vsftpd/vsftpd.conf配置:
测试:
【10】最大链接个数(同时lftp的用户个数)
max_clients=1
在/etc/vsftpd/vsftpd.conf配置:
测试:
本地用户
【1】本地用户可登陆
local_enable=YES|NO
设置本地用户可登录:
测试:
【2】本地用户可写
write_enable=YES|NO
设置本地用户可写:
测试:
【3】本地用户家目录修改
local_root=/westos
【4】本地用户上传文件权限
local_umask=xxx
【5】限制本地用户浏览根目录
chroot_local_user=YES #此参数要求去掉对家目录的写权限,否则不安全
choot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chmod u-w /home/*
在/etc/vsftpd/vsftpd.conf配置:
测试:
在/etc/vsftpd/vsftpd.conf配置:
测试:
五、三个黑白名单
限制用户是否可以登陆系统:
【1】
vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO|YES #白名单|黑名单 黑名单中的用户默认不能登陆系统
vim /etc/vsftpd/user_list #用户临时黑白名单
白名单:
vim /etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/user_list
测试:
黑名单:
vim /etc/vsftpd/vsftpd.conf
测试:
【2】
vim /etc/vsftpd/ftpusers #永久用户黑名单
systemctl restart vsftpd
注释掉配置文件中设置的黑白名单:
vim /etc/vsftpd/ftpusers
限制是否可以浏览目录:
【3】
chroot_local_user=NO 黑名单 名单内的用户只能在自己家目录内活动,不能浏览别的目录
chroot_local_user=YES 白名单
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
systemctl restart vsftpd
白名单:
黑名单:
六、ftp创建虚拟帐号身份
给ftp服务器创建虚拟帐号身份,这样更安全。如果以存在的本地用户登录权限太大,如果以匿名用户登陆,开放的范围太大。
步骤:
【1】创建虚拟账户及密码
vim /etc/vsftpd/westosfile #文件名称任意
【2】加密文件,使其更安全
db_load -T -t hash -f /etc/vsftpd/westosfile /etc/vsftpd/westosfile.db
db_load | T | t | hash | f | /etc/vsftpd/westosfile | /etc/vsftpd/westosfile.db |
---|---|---|---|---|---|---|
加密命令 | 转换 | 指定类型 | 加密类型 | 指定文件 | 被加密文件 | 加密后的文件 |
【3】pam认证
使用虚拟用户登陆需要认证
查看vsftpd.conf,认证的时候使用pam认证
vim /etc/pam.d/westos
account | auth | required |
---|---|---|
用户 | 密码 | 需要比对 |
【4】在配置文件中设置认证方式
vim /etc/vsftpd/vsftpd.conf
pam_service_name=westos (只有文件里的虚拟用户可登陆,此时本地用户也不能登陆,若要登陆则切换为vsftpd) #自动去和/etc/pam.d/westos比对
guest_enable=YES #激活虚拟用户登陆
systemctl restart vsftpd
【5】虚拟帐号身份指定
vim /etc/vsftpd/vsftpd.conf
guest_username=westos #默认使用虚拟用户时,登陆后在/etc/ftp目录下,修改此参数,登陆后到westos家目录(以什么身份登陆)
chmod u-w /home/westos #以westos身份登陆进入到westos家目录,去掉写的权限,保证安全性
测试:
七、虚拟帐号家目录独立设定
echo $USER 输出当前用户
env 查看系统环境
$ 引用系统中的变量
【1】虚拟帐号家目录独立设定
vim /etc/vsftpd/vsftpd.conf
guest_username=ftp #游客登陆身份
local_root=/ftphome/$USER #虚拟用户家目录位置
user_sub_token=$USER #让配置文件识别shell语法
systemctl restart vsftpd
mkdir /ftphome/user1/user1dir -p #在/ftphome/user1家目录中创建目录user1dir,用户的上传下载均在user1dir中
mkdir /ftphome/user2/user2dir -p #在/ftphome/user2家目录中创建目录user2dir,用户的上传下载均在user2dir中
【2】虚拟帐号配置独立
chgrp ftp /ftphome -R #递归将/ftphome中所有目录文件的组改为ftp
ll /ftphome/user*
chmod 775 /ftphome/user1/user1dir
chmod 775 /ftphome/user2/user2dir
vim/etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconf #权利文件
systemctl restart vsftpd
mkdir -p /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/user1 #在此文件中设定配置文件的所有参数,此文件优先级高
anon_upload_enable=YES
【3】关闭所有对虚拟用户的权利
实验:
lftp 172.25.254.176 -u user1
ls
cd user1dir/
put /etc/passwd
未在/etc/vsftpd/userconf/user2中给user2相应权利,所以不能上传下载