ftp :文件传输协议 独立服务
vsftpd工具:ftp用户(系统用户)管理维护,在后台运行进程
ftp默认端口 2 1 数据端口 2 0 端口(主动模式);默认情况下ftp服务运行在被模式下。
ftp原理:
主动模式:客服机向服务器的21端口发送请求,服务接受连接,建立一条命令链路,需要传送数据时候,客服端命令链路上用RORT命令回复服务端接口已经打开可以连接,服务端的从20端口向客户端改21端口发送连接请求,建立一条数据连接来传送数据。数据链路建立过程服务器主动请求。
被动模式:客服端向服务器的控制端口发送连接请求,服务端接受连接,建立一条命令链路,当需要传送数据时候,服务端在命令链路上用PASV命令告诉客服端:端口打开了某个端口,告诉端来连接,客服端向服务端的该端口发送连接,建立一条数据链路来传送数据。在数据建立的过程中是服务端被动向等待客服端请求。
建立好环境 客服端:windows: ftp://10.1.1.1 linux:ftp 、lftp
搭建服务的步骤:1、关闭防火墙和selinux
2、配置YUM源
3、软件三部曲(查看、安装、查看配置文件)
rpm -q vsftp 是否安装 ***
yum -y install vsftpd
4、了解主配置文件 man 5 vsftpd.conf
# cat /etc/vsftpd/vsftpd.conf|grep -v ^#|grep -v ^$
anonymous_enable=YES 允许匿名用户访问
local_enable=YES 允许本地用户访问
write_enable=YES 写总开关(本地用户)
local_umask=022 本地用户的默认权限
dirmessage_enable=YES 开启消息功能 .messages
xferlog_enable=YES 开启日志功能
connect_from_port_20=YES 支持主动模式(默认被动模式)
xferlog_std_format=YES 日志格式
listen=YES 以独立服务运行
pam_service_name=vsftpd 认证服务名
userlist_enable=YES 开启用户列表
tcp_wrappers=YES 支持tcp_wrappsers功能,类似防火墙,但是没有防火墙功能强大
5、根据需求修改配置文件
6、启动服务,开机自动动
#serivce vsftpd start
#chkconfig vsftpd no
#setstat -nltp | grep 21 端口是否开启
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3087/vsftpd
7、测试验证(需要安装ftp和lftp)
默认测试的结果:1、默认允许本地用户和匿名用户访问
2、默认匿名用户没有权限上传文件可以下载;本地用户可以上传、删除文件。
需求 1:允许匿名用户上传、下载文件、删除及重命名,匿名用户不可以下载别人上传的文件
1、 #vim /etc/vsftpd/vsftpd.conf
...
anon_upload_enable=YES 允许上传
anon_mkdir_write_abled=YES 允许创建
anon_other_write_enable=YES 重命名
2、 重启服务 # service vsftpd restart
3、测试: # lftp 10.1.1.1
lftp 10.1.1.1:/> put test1
put: Access failed: 553 Could not create file. (test1) 目录权限
lftp 10.1.1.1
lftp 10.1.1.1:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root 查看不了
# lftp 10.1.1.1:~>
原因:权限太大,不安全。修改目录的权限
解决办法:
#chmod o - w /var/ftp
#chmod o + w /var/ftp/pub ——>在 ftp 家目录下创建一个目录
需求 2 : 匿名用户允许下载其他匿名用户上传的文件
匿名用户上传文件的默认权限, man 文档查看
default: anon_umask:077
匿名用户创建 file 的默认权限:600
dir 的默认权限:700
1、 #vim /etc/vsftpd/vsftpd.conf ——>修改主配置文件(修改默认权限)
...
anon_umask=02
2、重启服务
需求 3 :开启匿名用户和本地用户家目录里的消息功能
局部:
anon:/var/ftp
echo hello anon > /var/ftp/.message
local:/home/$username
echo hello local > /home/user01/.message
# vim /etc/vsftpd/vsftpd.conf ——>全局修改
...
banner_file=/etc/vsftpd/banner 其他人登录时会看见该文件的内容呢
#echo banner xxx > /etc/vsftpd/banner
#service vsftpd restart
需求 4 :禁锢本地用户的家目录
1、 #vim /etc/vsftpd/vsftpd.conf
...
chroot_local_user=YES 禁锢所有本地用户,只能在自己的家目录里活动
#service vsftpd restart 重启
2、#vim /etc/vsftpd/vsftpd.conf
...
chroot_local_user=YES 只允许user01可以切换,其他任何人都不允许
chroot_list_enable=YES
#( default follows )
chroot_list_file=/etc/vsftpd/chroot_list
#echo user01 > /etc/vsftpd/chroot_list
3、#vim /etc/vsftpd/vsftpd.conf
...
#chroot_local_user=YES 只拒绝user01,其他人都可以切换
chroot_list_enable=YES
#( default follows )
chroot_list_file=/etc/vsftpd/chroot_list
#echo user01 > /etc/vsftpd/chroot_list
需求 5 :允许拒绝某人访问 ftp 服务(ftp 自身访问控制)
/etc/vsftpd/ftpusers:黑名单 /etc/vsftpd/user_list: 白名单
如果ftpusers 和 user_list 文件冲突,ftpusers黑名单 优先
#echo user01 >>ftpusers 用户放入黑名单
client:
Name (192.168.1.102:root): user01
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>
1、只允许 user01 访问 ftp 服务
# cat user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
#vim vsftpd.conf
...
userlist_deny=NO
重启服务,测试:
Name (192.168.1.102:root): user02 没在user_list里面,所一拒绝登录
530 Permission denied.
Login failed.
ftp>
需求 6 :允许或者拒绝网络中的主机
# ldd /usr/sbin/vsftpd |grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f42562a0000)
/etc/hosts.deny 拒绝访问
/etc/hosts.allow 允许访问先匹配
/etc/hosts.deny , 再去匹配
hosts.allow ; 如果两个文件都不存在,默认都允许;如果两个文件有冲突,allow优先
The extensible language uses the following format:
daemon_list : client_list : option : option ...
ALL: .friendly.domain: ALLOW 允许friendly.domain域下面的所有主机访问所有服务
ALL: ALL: DENY 拒绝所有人来访问所有服务
ALL: .bad.domain: DENY 拒绝.bad.domain下面的所有主机访问所有服务
ALL: ALL: ALLOW 允许所有人来访问所有服务
#vim /etc/hosts.deny ——>拒绝列表
...
服务名称:选项
vsftpd:all 拒绝所有人来访问 ftp 服务
vsftpd:192.168.1.3 , 192.168.1.110
vsftpd : 192.168.1.0/255.255.255.0
vsftpd , sshd : .uplooking.com except vm01.uplooking.com
#vim /etc/hosts.allow ——> 允许列表
...
vsftpd:all except:192.168.1.3
重启服务测试
需求 7 :自定义匿名用户和本地用户的数据根目录
/anon/data :匿名用户数据根目录
/local/data:本地用户数据的根目录
1、创建相应的目录
#mkdir /anon/data -p
#mkdir /local/data -p
2、修改配置文件
#vim /etc/vdftpd/vsftpd.conf
...
anon_root=/anon/data
local_root=/local/data
3、重启服务
4、测试验证
其他访问控制:
max _clients : 客户端最大连接次数 默认是2000
max_per_ip : 客户端每个 IP 最大连接次数 默认 50
max_login_fails : 客户端最大登录失败的次数 默认 3
local_max_rate : 本地用户传输文件的最大速率 默认没限制 单位是 字节