文章目录
io
网络io
存储io
交互式(键盘鼠标)
DAS(direct attached storage) 直接附加存储
直接附加存储就是通过sata,scsi,usb等线连接到我们的pc,server上
他是以block,块的形式给我们呈现的,他可以分区格式化
设备sata,scsi,usb
NAS (network attached storage) 网络附加存储
通过名字看出来他是网络共享存储,也就是将别人共享出来的文件系统挂载到本地,他们是远程存储设备,他已经是一个文件系统,对方输出的接口不是块接口,他的接口格式是文件,我们可以访问,存储,但是不能格式化
协议:CIFS(samba),NFS(network file system),
他们都是通过RPC (remote procedure call)远程过程调用,远程过程调用,是调用远程服务器上的函数
SAN (storage area network)
他的接口类型是块,他是通过网络共享的,
协议:ISCSI(IP-SAN), FC-SAN
scsi硬盘转速每分钟1w上下,而且比IDE设备耐用,而且scsi的总线可以接7个target,也就是7块硬盘,硬盘通过总线传输的时候也会封装,封装他是哪一个设备,在那一个位子,通过什么线缆传输,可以理解成存储网络,但是他的传输距离不能很长,iscsi是scsi的扩展,他把物理层传输层换成了tcp/ip协议传输,如果我们用网线传输那就是ip-san 用光纤传输
我们的ftp不能是说是一个san,das,nas,ftp是一个应用,他是客户端通过api与服务器相连
ftp
ftp是一个应用层协议,全称file transfer protocol,在tcp协议诞生不久ftp就诞生了,当时主要不是安全,而是可用
ftp有2类连接 ,ftp协议是明文传输的
当我们需要使用ftp协议进行文件传输的时候,客户端向服务端固定端口发请求,服务端相应,然后二者之间就有会话了,这个会话主要用来传递客户端命令 get 。。。,然后再开一个新连接(新的套接字,新的端口)
首先客户端随便使用一个端口(这个随便的端口是大于41951的,端口号一共有16位,也就是2个字节,一共可以表示65535个数字 0~1023是root使用的是众所周知的端口, 102441951是注册端口可以让普通用户去注册要求不是很严,4195165535是服务器随机分配的端口比如http服务的client端)去访问server端的21号端口,然后server端回应client端后就建立连接了,如果client向server端发送get等命令,server端不会再21号端口回复,他会另开一个端口20向client端口回复专门做数据传输,而client使用发送的端口+1来接受,发一次请求,进行一次连接,当然以上是一个理想模型,因为这样,20号端口常开非常的不安全所以现在实际的模型是
首先客户端向服务端发送请求,访问服务端的tcp/21号端口,这样建立了一个会话,然后客户端发送get等命令请求,服务端收到后,服务端告诉客户端自己将开启一个随机端口(55781),让客户端专门的进行指令传输,和文件传输(通过21号端口将消息传给client,服务端会传给client端2个数字比如217,229 这两个数字的意思是217*256+229正好就是端口号),client收到后就访问服务端的随机端口(55781)。
命令连接就是我们上面的一条线 ,而数据连接就是下面的一条线(数据连接传一个文件就断掉了)
命令连接
数据连接
两种模式
主动模式 portserver:20/tcp主动连接客户端
被动模式
server打开随机端口让客户端访问
ftp认证
httpd是模块化的认证功能可以通过模块加载到服务端,可以将账号密码加载到本地,mysql数据库里面
当我们登陆linux的时候我们想过怎么认证的吗?
首先他不是一个shell,他是一个程序login,
我们查看login是什么软件安装的
我们再看util-linux是否会生成/etc/shadow文件
并没有,为什么了?httpd可以根据模块化进行认证,只要安装相应的模块,而我们的login认证是通过调用第三方的软件pam来进行认证,我们的ftp也是基于pam认证的
PAM (pluggable authenticate module)
pam是高度模块化的一下全是pam的模块
我们的ftp完全可以借助pam认证,但是我们ftp的账号是不是/etc/passwd了?这个取决于你是怎么配置的
大多数的应用程序都可以使用pam的
/etc/pam.d/下都是为程序认证的比如我们的login 有的模块可以让login使用passwd
ftp server
ftp是一个协议我们使用ftp的server有
windows:serv-u,iis,filezilla
开源的: wuftpd, pureftpd,vsftpd,filezilla
client:
windows:ftp,filezilla
开源的: lftp,ftp,filezilla,gftp(图形化的),浏览器大多是ftp客户端
我们讲的就是vsftpd
vsftpd (very secure ftp daemon)
vsftpd可以独立当成一个进程,也可以托管
独立就是vsftpd使用非常的繁忙,我们一开机就启动vsftpd服务
托管就是让systemd托管他,当我们使用的时候才开启
ftp也是要遵循url协议的
协议://地址:端口/路径
或者 协议://username:passwd@地址:端口/路径
他的路径也是一个相对路径,
用户家目录:每个用户的URL的/默认映射到当前用户的家目录
vsftpd默认不支持匿名登陆我们需要更改配置文件/etc/vsftpd/vsftpd.conf
匿名用户的默认路径为ftp用户的家目录,因为vsftp用ftp运行进程
而且vsftp的ftp用户家目录为/var/ftp
而且不支持上传只支持下载
ftp实现共享我们要考虑2个维度 ,他的生效权限是2个维度的交集
1,文件权限
2,共享权限
例如
[root@zhr ~]# cp 1 /var/ftp/
[root@zhr ~]# cd /var/ftp/
[root@zhr ftp]# chown -R ftp:ftp 1 //更改属于人和属组
·····················client上---------------------
lftp 192.168.2.88:/> rm 1
rm: Access failed: 550 Permission denied. (1)
用户类别
匿名用户:anonymous --> ftp /var/ftp
系统用户:至少禁止系统用户访问ftp服务,/etc/vsftpd/ftpuser , PAM(/etc/pam.d/vsftpd)
虚拟用户:非系统用户,用户账号非为可登陆操作系统的用户账号(非 /etc/passwd);
配置文件/etc/vsftpd.conf
man vsftpd.conf
匿名用户
anon_other_write_enable //除了上传文件,和创建文件,其他的权限都由他来定义
anon_mkdir_write_enable //可以让匿名用户删除文件
anon_upload_enable //可以上传文件
chown _upload=... //定义任何人上传文件的属主,属组是谁
系统用户:
local_enable= //系统用户可以使用
write_enable= //系统用户可写
ftp不支持对系统可以操作的用户登陆,比如root,他也是通过pam来定义的
[root@zhr ftp]# cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed //就在这一行定义第三列代表使用的模块后面的选项代表设置比如读取/etc/vsftpd/ftpuser里面的用户,然后deny他
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
lftp (client of ftp)
[root@zhr ~]# lftp 192.168.2.88
lftp 192.168.2.88:~>
lftp 192.168.2.88:~>
lftp 192.168.2.88:~> help //查看帮助
!<shell-command> (commands) alias [<name> [<value>]] attach [PID]
bookmark [SUBCMD] cache [SUBCMD] cat [-b] <files> cd <rdir>
chmod [OPTS] mode file... close [-a] [re]cls [opts] [path/][pattern] debug [OPTS] [<level>|off]
du [options] <dirs> edit [OPTS] <file> exit [<code>|bg]
get [OPTS] <rfile> [-o <lfile>] glob [OPTS] <cmd> <args> help [<cmd>]
history -w file|-r file|-c|-l [cnt] jobs [-v] [<job_no...>] kill all|<job_no> lcd <ldir>
lftp [OPTS] <site> ln [-s] <file1> <file2> ls [<args>] mget [OPTS] <files>
mirror [OPTS] [remote [local]] mkdir [OPTS] <dirs> module name [args] more <files>
mput [OPTS] <files> mrm <files> mv <file1> <file2>
mmv [OPTS] <files> <target-dir> [re]nlist [<args>] open [OPTS] <site>
pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>] pwd [-p] queue [OPTS] [<cmd>]
quote <cmd> repeat [OPTS] [delay] [command] rm [-r] [-f] <files> rmdir [-f] <dirs>
scache [<session_no>] set [OPT] [<var> [<val>]] site <site-cmd> source <file>
torrent [OPTS] <file|URL>... user <user|URL> [<pass>] wait [<jobno>] zcat <files>
zmore <files>
lftp 192.168.2.88:/> **