ftp :文件传输协议 独立服务linux
vsftpd工具:ftp用户(系统用户)管理维护,在后台运行进程vim
ftp默认端口 2 1 数据端口 2 0 端口(主动模式);默认状况下ftp服务运行在被模式下。windows
ftp原理:安全
主动模式:客服机向服务器的21端口发送请求,服务接受链接,创建一条命令链路,须要传送数据时候,客服端命令链路上用RORT命令回复服务端接口已经打开能够链接,服务端的从20端口向客户端改21端口发送链接请求,创建一条数据链接来传送数据。数据链路创建过程服务器主动请求。服务器
被动模式:客服端向服务器的控制端口发送链接请求,服务端接受链接,创建一条命令链路,当须要传送数据时候,服务端在命令链路上用PASV命令告诉客服端:端口打开了某个端口,告诉端来链接,客服端向服务端的该端口发送链接,创建一条数据链路来传送数据。在数据创建的过程当中是服务端被动向等待客服端请求。网络
创建好环境 客服端:windows: ftp://10.1.1.1 linux:ftp 、lftpapp
搭建服务的步骤:一、关闭防火墙和selinux
dom
二、配置YUM源ssh
三、软件三部曲(查看、安装、查看配置文件)tcp
rpm -q vsftp 是否安装 ***
yum -y install vsftpd
四、了解主配置文件 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功能,相似防火墙,可是没有防火墙功能强大
五、根据需求修改配置文件
六、启动服务,开机自动动
#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
七、测试验证(须要安装ftp和lftp)
默认测试的结果:一、默认容许本地用户和匿名用户访问
二、默认匿名用户没有权限上传文件能够下载;本地用户能够上传、删除文件。
需求 1:容许匿名用户上传、下载文件、删除及重命名,匿名用户不能够下载别人上传的文件
一、 #vim /etc/vsftpd/vsftpd.conf
...
anon_upload_enable=YES 容许上传
anon_mkdir_write_abled=YES 容许建立
anon_other_write_enable=YES 重命名
二、 重启服务 # service vsftpd restart
三、测试: # 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
一、 #vim /etc/vsftpd/vsftpd.conf ——>修改主配置文件(修改默认权限)
...
anon_umask=02
二、重启服务
需求 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 :禁锢本地用户的家目录
一、 #vim /etc/vsftpd/vsftpd.conf
...
chroot_local_user=YES 禁锢全部本地用户,只能在本身的家目录里活动
#service vsftpd restart 重启
二、#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
三、#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>
一、只容许 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:本地用户数据的根目录
一、建立相应的目录
#mkdir /anon/data -p
#mkdir /local/data -p
二、修改配置文件
#vim /etc/vdftpd/vsftpd.conf
...
anon_root=/anon/data
local_root=/local/data
三、重启服务
四、测试验证
其余访问控制: max _clients : 客户端最大链接次数 默认是2000 max_per_ip : 客户端每一个 IP 最大链接次数 默认 50 max_login_fails : 客户端最大登陆失败的次数 默认 3 local_max_rate : 本地用户传输文件的最大速率 默认没限制 单位是 字节