何谓ftp?
ftp为一种文件传输协议,使得主机间可以共享文件。我们经常接触的http为超文本传输协议,它主要基于网络。
ftp服务器配置
实验前,我们首先需要打开一个虚拟机,作为ftp服务端,另外,我们把真机作为客户端。服务端需要安装vsftpd服务软件,客户端需要安装lftp。
首先,编辑文件:vim /etc/sysconfig/selinux ,改变SELINUX为:disabled;然后,reboot
(这里只有 reboot了之后文件的改变才会生效,重启后,getenforce查询如果显示disabled,则成功)
服务端:
1、安装vsftpd
[root@localhost ~]# yum install vsftpd -y
2、开启ftp服务、设置防火墙允许ftp通过
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl enable vsftpd //开启ftp服务
[root@localhost ~]# netstat -antlupe | grep vsftpd //查看ftp端口是否成功开启
[root@localhost ~]# firewall-cmd --permanent --add-service=ftp //火墙设置
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# firewall-cmd --list-all //查看是否成功设置火墙
3、建立一个测试文件
[root@localhost ~]# cd /var/ftp //此目录是ftp服务的默认目录
[root@localhost ftp]# ls
pub
[root@localhost ftp]# touch westosfile //我们现在建立一个文件westosfile
[root@localhost ftp]# ls
pub westosfile
客户端:
安装好lftp软件后,开始测试:
[root@foundation74 Desktop]$ lftp 172.25.254.247 //进行ftp服务设置的机子ip
lftp 172.25.254.247:~> ls
drwxr-xr-x 2 0 0 6 Aug 03 2015 pub
-rw-r--r-- 1 0 0 0 May 05 07:10 westosfile
ftp服务信息
默认目录:/var/ftp
协议接口: 21/tcp
服务配置文件:/etc/vsftpd/vsftpd.conf
报错id的解析:
500 ##文件系统权限过大
530 ##服务认证失败
550 ##服务本身功能未开放
553 ##本地文件系统权限过小
ftp服务参数配置
vim /etc/vsftpd/vsftpd.conf
注意,在编辑完配置文件后,记得执行重启ftp服务操作:
systemctl restart vsftpd
1)匿名用户登录:
anonymous_enable=YES | NO ##匿名用户是否可以登录
客户端测试:
当服务端设置为 YES:
当服务端设置为 NO:
2)本地用户登录
local_enable=YES|NO #本地用户是否可以登陆
客户端测试:
当服务端设置为 NO,会出现如下报错:
3)本地用户可写
write_enable=YES|NO #ftp是否对登陆用户可写
4)匿名用户家目录修改
anon_root=/direcotry ##指明匿名家目录
服务端:
mkdir /ftpdir ##建立匿名用户家目录
cd /ftpdir/
touch file
vim /etc/vsftpd/vsftpd.conf ##编辑配置文件
anon_root=/ftpdir ##添加这一行
systemctl restart vsftpd ##重启ftp服务
5)匿名用户上传
anon_upload_enable=YES | NO
服务端:
vim /etc/vsftpd/vsftpd.conf ##编辑配置文件
anon_upload_enable=YES ##文件中有命令,只需取消注释即可
systemctl restart vsftpd ##重启ftp服务
chgrp ftp /var/ftp/pub ##修改pub的组
chmod 775 /var/ftp/pub ##修改权限
客户端测试:
当服务端设置为 YES:
6)匿名用户建立目录
anon_mkdir_write_enable=YES|NO ##可在文件中找到,取消注释即可
客户端测试:
7)匿名用户下载
anon_world_readable_only=NO ##(需要手动添加)是否允许匿名用户设置仅读,因为是要下载,修改为NO
8)匿名用户删除
anon_other_write_enable=YES ##匿名用户可写,包括删除动作;(文件没有,手动添加)
客户端测试:
9)匿名用户上传限速(用户上传必须是YES):
anon_upload_enable=YES
anon_max_rate=102400 //上传限速为100K左右,默认单位为字节
客户端测试:
10)匿名用户和本地用户上传文件默认权限:
local_umask=022 //本地用户上传文件权限为644
anon_umask=077 //匿名用户上传文件权限为600
11) 限制本地用户浏览根目录:
所有用户被锁在自己的家目录中**
chroot_local_user=YES
chmod u-w /home/*
客户端测试:
首先,更改前student用户是可以浏览根目录的,
更改后student用户只能浏览自己的家目录,
12)用户黑名单的建立
(修改黑白名单不需要重启,修改配置文件必须重启)
//相当于黑名单,默认的所有人是可以浏览根目录的,只有文件/etc/vsftpd/chroot_list的用户是不可以
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #chroot_list
13)用户白名单的建立
//白名单,默认的所有人是不可以浏览根目录的,只有文件/etc/vsftpd/chroot_list的用户是可以
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
限制本地用户登陆:
默认情况下,ftpusers,user_list都是黑名单,但/etc/vsftpd/ftpusers是永久黑名单,且优先级最高;/etc/vsftpd/user_list是临时黑名单,会有可能变成白名单。如果改变文件内容:userlist_deny=NO,那么user_list变成白名单,只有白名单上的用户,可以登陆ftp。
//注:如果user_list和ftpusers出现同一用户,则由于ftpusers的优先级更高,只有黑名单生效。
创建虚拟用户
当虚拟用户开启之后,原始用户是不能通过认证;
1) yum whatprovides */pam_userdb.so #查找软件,并下载
2)创建虚拟帐号身份
vim /etc/vsftpd/westosfile ##编辑文件
文件编辑内容如图所示:
3)生成加密文件
db_load -T -t hash -f /etc/vsftpd/westosfile /etc/vsftpd/westosfile.db //将明文内容加密(hash函数)
4)设定策略文件
vim /etc/pam.d/westos ##编辑策略文件内容
account required pam_userdb.so db=/etc/vsftpd/westosfile
auth required pam_userdb.so db=/etc/vsftpd/westosfile
帐号/密码 必须要通过模块认证,否则失败
5)修改配置文件
vim /etc/vsftpd/vsftpd.conf ##编辑文件
pam_service_name=westos ##修改为自己创建的策略文件名
userlist_enable=YES
guest_enable=YES
guest_username=ftp #ftp是存在的用户,虚拟帐号身份指定
systemctl restart vsftpd ##重启ftp服务
6)客户端测试
虚拟账号家目录独立设定
服务端:
mkdir /ftpuserhome
mkdir /ftpuserhome/user{1..3}
touch /ftpuserhome/user1/user1file
touch /ftpuserhome/user2/user2file
touch /ftpuserhome/user3/user3file
vim /etc/vsftpd/vsftpd.conf ##编辑配置文件
local_root=/ftpuserhome/$USER
user_sub_token=$USER
systemctl restart vsftpd ##重启ftp服务
客户端测试:
user1用户只能看到user1file
虚拟帐号配置独立
[root@localhost ~]# cd /vftdir
[root@localhost vftdir]# mkdir user{1..3}/pub
[root@localhost vftdir]# chgrp ftp user{1..3}/pub //改变其组为已经存在的组
[root@localhost vftdir]# chmod 775 user{1..3}/pub //改变权限
[root@localhost vftdir]# mkdir -p /etc/vsftpd/userconf
[root@localhost vftdir]# vim /etc/vsftpd/vsftpd.conf //编辑主配置文件
末尾添加一行 user_config_dir=/etc/vsftpd/userconf //
注释这一行 anon_upload_enable=YES //因为虚拟用户使用的还是匿名用户的参数设置,注释可以查看效果
[root@localhost vftdir]# systemctl restart vsftpd //重启服务
[root@localhost vftdir]# vim /etc/vsftpd/userconf/user1 //编辑user1用户可以上传文件的操作命令,只对user1有用,其他的虚拟用户不可以的
添加内容 :anon_upload_enable=YES //匿名用户上传文件
客户端测试:
我们是对user1用户做的设定,先用user3用户实验,