ftp:file transfer protocol, 监听21端口
文件传输协议,工作在应用层
明文协议:认证及数据传输;
ftp实现方式:
服务端实现:vsftpd pureftpd proftpd vsftpd是默认在光盘上自带的
客户端实现:
linux:ftp lftp
windows:cuteftp Filezilla Flashfxp
ftp连接类型:
命令连接:传输指令
数据连接:传输连接
工作方式:站在服务器端的角度描述
主动模式:服务器向客户端发起数据传输请求
服务器端口:固定
客户端端口:随机
被动模式:客户端向服务器端发起数据传输请求
服务器端口:半随机,有客户端向21号端口发送了连接请求,此时服务器会发送两个数字,这两个数字是服务器端新开启的服务端口除以256得的商值和余数。由此客户端可以计算出服务器端的端口号。
ftp用户分类:
资源位于用户的家目录下/var/ftp/
匿名用户:(映射至某一固定的系统用户) 匿名用户的用户名为ftp、vsftp
本地用户:(系统用户) root及系统用户(0-999);操作系统上的每一个用户都是本地用户,我们不允许访问ftp服务器
虚拟用户:映射入某操作系统上的某个用户
nsswitch:名称服务转换
PAM:插入式认证模块。
数据传输格式:
文本格式:binary
二进制格式:ascll
数据传输是通过线缆流式化传输的;传输图片也同样传输的字符串,到本地之后,通过这个字符调用相对应的图片。
或者是传输过程中再加一个说明文档,告诉对方如何将数据流重组。
vsftpd安装方法:
步骤一
vftpd 是centos自带的,短小精悍,监听21号端口
~]# yum info vsftpd 查看属性
~]# yum install vsftpd
/usr/sbin/vsftpd 程序
/etc/vsftpd/vsftpd.conf 配置文件
/etc/pam.d/vsftpd 因为基于pam进行认证,所以在pam下也有一个配置文件
/var/ftp/ 用户家目录
步骤二
CentOS 6 :
/etc/rc.d/init.d/vsftpd <--启动服务脚本
chkconfig vsftpd on <--启动服务永久开启
CentOS 7
/usr/lib/systemd/system/vsftpd.server
systemctl enable vstfpd.service <--永久开启
getenforce 关闭selinux
步骤三:
测试:ftp://172.18.64.70/pub
步骤四:
lftp -u centos,magedu 172.18.64.70 <--创建centos用户密码为magedu,使用此用户访问ftp服务->lcd /etc 切换到centos用户的etc目录->put fstab 将fstab文件上传到ftp上
步骤五:对匿名用户控制
开启匿名用户的上传、创建、删除及重命名功能
对用户权限进行限制,建议先备份配置文件
~]# vim /etc/vsftpd/vsftpd.conf
~]# directive=value <--配置文件书写格式必须顶格写
匿名用户配置方法:此处我们要实现匿名用户有上传权限
anonymous_enable=YES <--是否启用匿名用户 想关闭单纯注释掉是没有用的
anon_upload_enable=YES <--控制匿名用户的上传权限,依赖于write_enable=YES
write_enable=YES <--是否允许通过ftp协议修改文件系统上的数据指令,此命令全局生效,所以一定要处于开启状态
anon_mkdir_write_enable=YES <--开启匿名用户创建目录的权限,默认关闭
anon_other_write_enable=YES <--定义匿名用的删除及重命名权限
生效需重载:systemctl restart vsftpd.service
~]# cd /var/ftp/
~]# chown ftp upload 将属主改为ftp
测试:使用172.18.64.71这台主机
~]# lftp 172.18.64.70/upload <--因为我们只给upload目录修改了属主
~]# lcd /etc/ 切换到70这台主机的/etc/目录下
~]# put fstab 上传文件成功
步骤六:对本地用户控制
本地用户:
(1)local_enable=YES <--是否允许本地用户可以登陆ftp,如果关闭即只开放匿名用户
注意:所有非匿名用户的生效,都依赖于此命令
(2)local_umask=022 <--本地用户上传的文件权限掩码,应该设置为077,本地用户上传的只有本地用户可以查看
目录消息
(3)dirmessage_enable=YES <--目录消息显示,用户 第一次进入目录时,vsftpd会查看.message文件,并将其内容显示给用户。message_file指定文件路径,而不使用默认的.message;
数据传输日志
(4)xferlog_enable=YES <--是否打开上传下载的日志默认路径/var/log/vsftpd.log 不建议启用
(5)xferlog_file=/var/log/vsftpd.log <--定义传输日志文件的文件名
数据传输模式:
(6)connect_from_port_20 我们服务器是否能够工作于主动模式。但是取决于客户端是否支持,如果支持就主动,不支持就被动
修改匿名用户上传的文件的属主:
chown_uploads 控制匿名用户上传的文件,是不是要改变其默认属主属组,如果不改就是匿名用户映射的系统用户ftp
chown_username: 启用chown_uploads时,将文件属主修改为此指令指定的用户,默认为root
chown_upload_mode 设定匿名用户上传的文件的权限,默认为600
设定空闲会话超时时长:
idle_session_timeout 定义任何一个远程连接建立起以后,部在活跃了,多久断开,默认为300s
命令连接的监听端口
listen_port 默认为21 可能默认没有设置,要手动设置
设定连接及传输速率
local_max_rate 默认最大传输速率,
默认最大连接数
max_clients 默认2000个 0表示无限制
单个ip所允许的最大连接数
max_per_ip
设定匿名用户的最大传输速率
anon_max_rate
主动数据传输模式下 服务器连接客户端的超时时间
idle_connection_timeout
被动数据传输模式下 服务器连接客户端的超时时长
data_connection_timeout
只以文本格式上传,不能开启;除非你确定自己只上传文本文件
ascii_upload_enable=YES
大条幅:
ftpd_banner=Welcome 每次连接ftp服务器都会显示一些信息
禁锢所有本地用户,锁在自己家目录下
chroot_local_user=YES <--禁锢所有本地用户
注意:要求用户对家目录,没有写权限
禁锢列表中的用户,与上方式不能同时使用
vim /etc/vsftpd/chroot_list
每行一个用户名
chroot_list_file=/etc/vsftpd/chroot_list <--此选项在主配置文件中
是否启用用户列表
/etc/vsftpd/ftpusers <--禁止某些用户登录,只是一个黑名单
userlist_enable=YES <--启用时,vsftpd将加载一个由userlist_file指令指定的用户列表文件;此用户中的用户是否能访问vsftpd服务取决于userlist_deny指令
userlist_deny=YES 此时user_list为黑名单
userlist_deny=NO 此时user_list为白名单
/etc/vsftpd/user_list/ <--这是user_list的目录