目录
1.ftp服务概述
1.1简介
file transfer protocol 基于C/S结构的文件传输协议,它工作在OSI模型的第七层,即应用层,使用TCP传输, ftp客户端和服务器建立连接前就要进过“三次握手”的过程。
1.2复合TCP连接
--控制连接:tcp 21端口,发送ftp命令信息
--数据连接:tcp 20端口,上传/下载数据
1.3数据连接模式
1.3.1主动模式
1)主动模式:服务器20端口 主动连接 客户端
2)具体过程:第一个操作一定是由客户端发起的,服务器端不可能莫名其妙的去连接一个客户端。连接21端口,21端口是固定的。如果是主动模式,客户端连接21端口,还会告诉服务器我起了一个端口1120这个是随机的,一般是大于1024,连接21端口,服务器说ok,可以相互通信。客户端会先起一个端口,1121同时把端口号通过通道告诉服务器,我要下载你的数据,你传输的时候记得发给我的1121端口,服务器用自己的20端口发给客户端的1121端 口。
3)缺点:一般我随便上网,但是不希望别人可以随便连我。防火墙只限制入站,不限制出去。你可以出去。在第二步服务器把数据发给你的时候,你本身的防火墙或路由器的防火墙可能会拦截,这是个主动模式的缺点。除非客户端没有防火墙。所以更多时候是被动模式。
1.3.2被动模式
1)被动模式:服务端??端口 被动连接 客户端
2)具体过程:客户端先访问服务器,使用21端口,连接上之后说我要下载你的数据。服务器不会直接把数据给客户端。服务器随机开一个端口,比如说1230,同时把端口号通过21端口告诉客户端。于是客户端随机开一个端口,2340连上服务器的1230,好了,我连上你了,你可以发送给我了。这条通道是客户端建立的。服务器端的端口是随机的。
3)配置文法:a可以改配置文件,将这个端口固定死。作为管理员可以自己定义了。b通过iptables,专门给ftp的工作模式设置一个特有的规则。只要是服务器起来的端口,我无所谓你开什么端口。被动模式默认端口号是随机的。
1.4数据传输模式
文本模式:ASCLL模式,文本序列传输
二进制模式:程序,图片,只要做ftp,就会有多种多样的数据,图片是记事本写不出来的。注意:采用哪种模式,程序会自己会选择的,不用我们太多的关注
1.5ftp访问类型
①匿名用户:ftp或anonymous,不用输用户名密码,一般存放公司的一些公共文件
②本地用户:linux服务器本机的系统用户账号,需要改密码,人多的时候就不合适了
③虚拟用户:账号信息存放在独立的文件或数据库内 在里面写用户名密码,让ftp读我的文件,但是用户名密码不在我的系统里。在一个文件里。为了安全,可能会转码,就成乱码了,就是说加密了。
2.部署ftp
2.1安装ftp
[[email protected] ~]# yum -y install vsftpd //安装vsftpd服务
[[email protected] ~]# service vsftpd start //启动ftp服务
[[email protected] ~]# chkconfig vsftpd on //将ftp服务设为开机自启
[[email protected] ~]# chkconfig vsftpd –list //检查开机自启状态
/var/ftp/pub |
主目录 |
/usr/sbin/vsftpd |
主程序 |
/etc/init.d/vsftpd start |
脚本,可以用来启动,关闭等 |
service /etc/init.d/vsftpd start |
脚本,可以用来启动,关闭等 |
/etc/vsftpd/vsftpd.conf |
主配置文件 |
注意:1:起服务是用以上两个脚本都可以,它们是用来管理我们的程序的。有一个脚本就可以了。
2:最原始的方法,就是查一下进程号,然后kill掉进程号,这是很麻烦的。用源码包装完后启动脚本是没有的,得自己写。
3: 匿名用户根目录默认是/var/fpt/pub,真实用户是自己的家目录
4:ftp一个是配置文件中用户所拥有的权限,还有就是文件夹本身的权限,要实现某一功能,必须文件夹和用户所拥有的权限是一致的,或者说拒绝优先,交集是最终的权限。
2.2ftp功能划分
2.2.1ftp访问控制
/etc/vsftpd/ftpusers //黑名单
/etc/vsftpd/user_list //黑/白名单
userlist_enable=YES //YES为启用user_list,只有启用才会读这个文件
userlist_deny= NO/ YES //NO为白名单YES为黑名单
注意:
1:user_list要么不用,要么就作为白名单,bool值为NO,是白名单
2:ftpusers,列入其中的用户被禁止访问
3:内容格式为一行一个用户名称即可
4:两表冲突时拒绝优先
2.2.2ftp连接及传输控制
max_clients=100 //限制并发的客户端个数为100个
max_per_ip=2 //限制每个客户机IP的并发连接数为2个
anon_max_rate=50000 //匿名最大速度50kb/s(字节/秒)
local_max_rate=500000 //验证用户最大速率500kb/s(字节/秒)
accept_timeout=60 //将客户端空闲一分钟后中断,(秒)
connect_timeout=60 //中断一分钟后又重新连接(秒)
idle_session_timeout=600 //用户会话空闲后10分钟(秒)
data_connection_timeout=120 //将数据连接空闲2分钟后断(秒)
注意:一台计算机跟另一台计算机通信,但是因为网络的延迟问题,迟迟没有通讯上。不会立马退出,至少再努力一把。连不通没关系,我再试一次,但是会有一个超时时间。迅雷下载就是可以改并发,所以速度就快了。网络实际传输的时候,是数据包,都是打散了。
2.2.3ftp上传文件默认权限和归属
local_umask=022 //决定了文件的默认权限,文件666-mask值,目录777-mask值,为什么文件是666呢,目录是777呢,一个普通文件有的最大权限就是666,目录一定得有x权限,如果一个目录可读可写,必须得有x权限来进去这个目录。所以一般这么减
chown_uploads=YES //是否开启上传文件后,改变文件的归属
chown_username=whoerver //你指定的是谁就是谁,比如说,有多个静态页面,负责的人不同,上传之后是root有时候就会出现权限问题,此时将所有者和所属组设为一样的权限,将上传文件所有者改为上级目录的所有者,大家都在这个组里,就都可以正常访问自己上传的文件了。
2.2.4ftp欢迎信息
ftpd_banner=写上你要说的话 //要说什么,写在这
dirmessage_enable=YES //有一个客户端过来访问的时候,要不要出现一个欢迎词
.message //欢迎词在这个文件中
注意:
1:浏览器会把欢迎信息屏蔽掉。
2: ftpd_banner这句话加上后,每次将要登陆的时候会出现这句话,即一开始登陆的时候,这个时候要求你输入用户名和密码就会出现这句话。
3:当开启dirmessage后,在你要访问的目录下建立一个.message的隐藏文件,在这个文件中输入你想要说的话,登陆或切换到这个目录的时候就会出现.message文件当中的话。
2.2.5ftp的日志配置
Xferlog_enable=YES //日志功能是否开启
Xferlog_file=/var/log/xferlog //指定ftp的日志目录
Xferlog_std_format=YES //是否启用标准的日志格式
2.2.6是否开启二进制传输
Ascii_upload_enable=YES //允许二进制文件上传
Ascii_download_enable=YES //允许二进制文件下载
注意:自己会选择,不要强制设置,要不然传输的可能会有损坏
2.6.7ftp用户禁锢
chroot_local_user=YES //禁锢所有本地账户
chroot_list_enable=YES //开启禁锢列表
chroot_list_file=/etc/vsftpd/chroot_list //指定禁锢列表,在此表中添加,一行一个
注意:不禁锢是一件非常危险的事情,禁锢就是将用户禁锢在一个特定的目录下,活动范围就是在这个里边。
2.6.8常用的ftp全局设置
write_enable:是否启用写入权限
download_enable:是否允许下载
listen=YES //是否以独立运行的方式监听服务,是否监听端口,必须开,开ftp,始终监听21端口
listen_port //设置监听ftp服务的端口,可以修改
listen_address //设置监听ftp服务的ip地址
listen_ipv6=YES //是否可以listen
ipv6的地址
connect_from_port_20=YES //ftp主动模式传输数据的端口
local_enble=YES //验证用户是否开启
write_enable=YES
//是否可写
2.6.9ftp防火墙配置
经典案例:
公司在一台服务器上部署了网站,出于安全的考虑,要求网站只能在自己的分公司访问,所以做了防火墙。这个网站只是一个静态页面,所以只需要做一个ftp就可以了,把ftp的目录指定为网站的根目录,直接覆盖文件就好了。
pasv_min_port=30001 //在配置文件中指定最小端口
pasv_max_port=31000 //在配置文件中指定最大端口
-A INPUT -p tcp -m multiport --dport 20,21 -m state --state NEW -j ACCEPT
-A OUTPUT -p tcp --sport 21 -m state
--state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 30001:31000 -j
ACCEPT
-A OUTPUT -p tcp --sport 30001:31000 -j
ACCEPT //在防火墙中添加以上4条记录
这就是ftp的被动模式,服务器端设置防火墙,客户端直接过来连接。
2.3配置匿名用户
anonymous_enable=YES //开启匿名用户,开启后可匿名下载文件
anon_upload_enable=YES //匿名用户是否有上传文件权限,不包括目录
anon_mkdir_write_enable=YES //匿名用户是否有创建目录的权限,开启后可以创建,上传目录。
anon_other_write_enable=YES //开启后匿名用户拥有重命名,删除等权限
no_anon_password=YES //开启此项后不需要进行秘钥验证,直接进入
anon_root=匿名ftp的根目录 //此项可以定义匿名用户的家目录
1:此四项开启后是匿名用户可以达到的最大权限,根据实际情况调整;
2:在配置文件生效有时会有一定的延迟或缓存,解决方法有稍等、重新进入、刷新等操作。
3:要关闭匿名用户,将anonymous改为NO即可。相当于总开关,即使不注释anon的相关配置,匿名用户仍不可用。
4:注:匿名用户下载是使用的是nobody这个用户,所以相应的O这个位置要有R权限才能被下载。若想让匿名用户能上传和删除权限,必需设置
5:anon_world_readable_only=YES 这个设置按理说可以控制匿名用户的下载权限,但是做了多次试验后基本几次都失败了,需要以后注意。
6:但是可以用另一个方法实现控制匿名用户的下载权限,即download_enable全局设置,是否允许下载,但是这个会制约本地用户。视情况使用
匿名用户其它配置
2.4配置验证用户
[[email protected] ~]# mkdir -p /ftp/zhang //创建共享目录
[[email protected] ~]# useradd -d /ftp/zhang/ ftper //新建用户,并且指定家目录
[[email protected] ~]# echo "ftper123" |
passwd --stdin ftper //修改用户密码
[[email protected] ~]# usermod -s /sbin/nologin ftper //修改用户的登录shell,禁止此用户登录系统
[[email protected] ftp]# chown ftper.ftper
/ftp/zhang/ //更改目录的权限
[[email protected] ftp]# vim
/etc/vsftpd/vsftpd.conf //修改配置文件
anonymous_enable=NO //禁止匿名用户登录,开启后用匿名用户登录就会提示身份验证失败
local_enable=YES //开启本地用户
chroot_list_enable=YES //开启禁锢,即只能在自己的
家目录范围内活动
chroot_list_file=/etc/vsftpd/chroot_list //指定禁锢文件
[[email protected] ftp]# vim
/etc/vsftpd/chroot_list //添加需要禁锢的用户
Ftper
[[email protected] ftp]# usermod -s
/usr/bin/passwd ftper //用户在远程连接后只能修改密码
1:这个经过我实验,是不能登录的,修改密码后只可以再次修改密码,但是,用来登录ftp提示验证失败,使用之前的密码也是提示验证失败。
2:也可以把用户加入一个组,因为这个文件夹的权限是所有者和所属组分配的,当你需要权限时,所有者不是自己,但是加入所属组以后会继承组成员的权限。
3:如果是linux不能识别的乱码文件,即使有权限,也不能删除。
4:一般本地用户登录后,默认配置就基本够了,一些基本权限都可以实现。
5:本地账户ftp,默认共享路径为自己的家目录
3.访问ftp
3.1Windows访问ftp
3.1.1在dos环境下直接访问ftp
1:在window里边也可以直接打ftp,表名这个软件是可以用的
2:格式 ftp IP地址输入用户名和密码就可以了。匿名的话直接输入ftp,回车就可以了。
3:在window里可以打help查看命令。
4:在进ftp之前的当前目录下!命令,临时调用/执行系统命令
3.1.2浏览及下载工具
浏览器,wget,curl等
专用的ftp管理工具
Filezilla CuteFTp WinSCp等
Wget ftp://192.168.4.5/passwd
Wget http://www.hao.com/a.txt 下载东西直接把链接粘过来就可以了
Firefox ftp://user:[email protected]/passwd
4.出现的错误
4.1bool值出错
我在修改了配置文件之后,重启服务,报如下的错误,原来是配置文件中tcp_wrappers=YE
这一行少了一个字母。像这种的它=后面识别的是bool值,bool值有YES和NO,而YES和NO也可以写为1和0。将S加上或者将值改为1即可。后边也不能加空格,加空格也会报如下的错,也不能不写,不写的话就会有missing value的报错
4.2账户无法创建目录,但是可以创建文件
这个问题我一开始还以为是配置文件的问题,但是一直以来就没有动过配置文件,一直找不到原因,最后发现磁盘空间满了,删除之后就可以了