什么是FTP?
FTP(File Transfer Protocol)文件传输协议
- 用于Internet上控制文件的双向传输。同时,它也是一个应用程序。
- 是Internet上仍常用的最老的网络协议之一,他为系统提供了通过网络与远程服务器进行传输的简单方法,在red hat enterprise linux6中。FTP服务器包的名称是VSFTPD,代表Very Secure Transfer Protocal Damen,服务器名称也叫做vsftpd。
- 默认的配置文件让anonymous用户只能下载位于chroot目录中的内容。/var/ftp这意味着远程FTP客户端只能以用户anonymous或ftp身份连接到服务器(无需密码),并从ftp服务器的/var/ftp目录下载文件(其本地ftp用户可以直接读取这些文件)。
- FTP服务分为tftp(文件推送),vsftpd(文件传输,安全),fastftp,qftp,lftp(浏览器)。
部署FTP服务器
-
首先,在一个虚拟机中修改他的主机名称为ftp_server
命令为:hostnamectl set-hostname ftp_server.westos.com
-
修改它的网络配置,并重启网络。
-
搭建yum源,(我这里用的是真机的共享yum源)下载vsftpd,lftp服务,并开启服务。
-
禁用内核防火墙selinux(将它的状态改为disabled),重启(reboot)
-
设置防火墙允许ftp服务,并重载防火墙
-
测试:匿名用户和本机用户
1>浏览器:真机浏览器输入ftp://172.25.254.124可以访问到ftp的发布目录
2>命令:在真机中打开一个shell
匿名用户: lftp 172.25.254.124
本地用户:lftp 172.25.254.124 -u student (用户是服务器主机的用户)
FTP服务的基本信息
- 软件安装包:vsftpd
- 默认发布目录:/var/ftp
- 协议接口:21/tcp
- 服务配置文件:/etc/vsftpd/vsftpd.conf
- 报错ip的解析:
500 | 文件系统权限过大 |
---|---|
530 | 用户认证失败,密码输错或者在服务器的黑名单中 |
550 | 服务本身功能未开启或配置文件有问题 |
553 | 服务器上文件系统的权限过小,服务未拒绝 |
匿名用户设定
配置文件:etc/vsftpd/vsftpd.conf
,每次修改完成后需要重启服务systemctl restart vsftpd.service
- 匿名用户是否可以登陆 (12行) anonymous_enable=YES|NO
修改为NO后,匿名用户登陆请求被拒绝。
- 匿名用户上传(29行)anon_upload_enable=YES
write_enable=YES
1>服务未开启时,上传失败:
2>开启服务,上传还是失败,报错553,这是因为目录没有写权限,所以我们需要修改/var/ftp/pub目录的权限。
3>修改完成后,文件上传成功。
chgrp ftp /var/ftp/pub //修改目录所属组为ftp
chmod 775 /var/ftp/pub //修改权限775
- 匿名用户家目录修改 anon_root=/zhang
1>目录zhang下有5个文件
2>修改配置文件
3>修改后的家目录
- 匿名用户上传文件默认权限修改 anon_umask=022
- 匿名用户建立目录anon_mkdir_write_enable=YES|NO
- 匿名用户下载anon_world_readable_only=YES|NO
- 匿名用户删除anon_other_write_enable=YES|NO
- 匿名用户使用的用户身份修改
chown_uploads=YES //可上传文件
chown_username=student //身份是student
chown_upload_mode=0644 // 默认权限是0644
- 最大上传速率anon_max_rate=102400(最大速率100kb/s)
- 最大连接数max_clients=3
第四个客户端要连接需要等待
本地用户设定
注意:本地用户的访问需要使用的是服务端有的用户。
- 本地用户是否可以登陆 (16行) local_enable=YES|NO
修改为NO后,本地用户登陆请求被拒绝。
- ftp是否对登陆用户可写(19行)write_enable=YES|NO
修改为NO,不可写
修改为YES,可上传可删除
- 本地用户家目录修改 local_root=/zhang
- 本地用户上传文件权限local_umask=077
限制本地用户浏览目录
- 所有本地用户被锁定到自己的家目录中chroot_local_user=YES|NO (YES是锁)
chmod u-w /home/*
所以我们要修改所有本地用户家目录的权限,给u–w,可以看到student用户被锁在自己家目录里了。
- 用户黑名单建立
chroot_local_user=NO 不锁
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
名单里的都会被锁
在 /etc/vsftpd/chroot_list文件中写入用户名,该用户就被锁在自己的家目录了,我这里黑名单里写的是student。
- 用户白名单建立
chroot_local_user=YES 锁
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
名单里的不会被锁
名单里的是student,student没被锁,其余用户都被锁在自己家目录了。
限制本地用户登陆
- 用户永久黑名单
/etc/vsftpd/ftpusers
1>在/etc/vsftpd/ftpusers
中加入用户student
2>在配置文件/etc/vsftpd/vsftpd.conf
中加入userlist_deny=YES
,重启服务。
3>测试
student登录失败
- 用户临时黑名单
/etc/vsftpd/user_list
在/etc/vsftpd/user_list
中加入用户名,操作同上,不再赘述。 - 用户白名单设定
1>在/etc/vsftpd/user_list
中写入用户名linux,此文件变为用户白名单,只在名单中出现的用户可以登陆ftp。
2>将配置文件/etc/vsftpd/vsftpd.conf
中改为userlist_deny=NO
,重启服务。
3>测试
只有linux可以登陆访问。
FTP虚拟用户的设定
Linux系统中能创建的用户数量是有限的,但是如果我们需要创建无数的用户要怎么办?我们可以设置虚拟用户。
注意:通过vim /etc/login.def
中读取创建用户的规则,可以看到数量是有限的。
1>创建虚拟帐号身份vim /etc/vsftpd/login //文件名称任意
奇数行是用户名,偶数行是密码
2>文件加密db_load -T -t hash -f login login.db //-T表示转换,-t表示加密方式为哈希加密 -f表示加密文件为/etc/vsftpd/login
3>在文件中写入以下内容vim /etc/pam.d/westos //文件名称任意
4>在配置文件vim /etc/vsftpd/vsftpd.conf
中写入以下内容,重启服务。
5>测试,可以看到虚拟用户可以登陆,且进入的都是本地用户的家目录/zhang
虚拟用户配置独立
目的是让虚拟用户互相独立,只能查看自己的家目录。
1>给每个虚拟用户建立自己的家目录
2>修改配置文件,加入以下内容:local_root=/var/ftpdir/$USER user_sub_token=$USER
注意:$ USER用来表示用户身份,例如:kiosk用户的家目录是/home/kiosk,linux用户的家目录是/home/linux,所以我们在vsftpd.conf配置文件中将用户家目录修改为/var/ftpdir/$USER。
3>测试
虚拟用户的权限设置
我们发现修改权限之后所有用户都可以上传文件,现在我们设置只能特定用户user1上传文件。
1> 新建目录和文件
mkdir /etc/vsftpd/westos 在/etc/vsftpd/下创建一个目录
touch /etc/vsftpd/westos/user1 此文件名称与虚拟用户名称相同
vim /etc/vsftpd/westos/user1 在文件中写入anon_upload_enable=YES 只允许user1上传文件
2>vim /etc/vsftpd/vsftpd.conf
,将匿名用户上传文件的功能注释掉。
并添加user_config_dir=/etc/vsftpd/westos/
指向刚才创建的目录,重启服务。
3>测试
注意:要给user1添加别的权限,写对应的权限到文件/etc/vsftpd/westos/user1
中就可以了。