FTP(File TransferProtocol,文件传输协议)是典型的C/S架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。FTP客户端和服务器之间的连接是可靠的,面向连接的,为数据的传输提供了可靠的保证。
TCP协议:20,21端口
20端口:用于传输数据
21端口:用于传输指令(建立连接)
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard(也就是Active,主动方式),一种是 Passive(也就是PASV被动方式)。
Standard模式FTP的客户端发送PORT命令到FTP server。Passive模式FTP的客户端发送 PASV命令到FTP Server
FTP客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
在建立控制通道的时候和standard模式类似,当客户端通过这个通道发送PASV命令的时候,FTP
server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server将通过这个端口进行数据的传送,这个时候FTp server不再需要建立一个新的和客户端之间的连接。
FTP的作用:
Internet 上用来远程传送文件的协议。
FTP的模式
vsftp全称(very secure FTP)
vsftp模式:c/s模式
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信
20端口用于建立数据连接,并传输文件数据
21端口用于建立控制连接,并传输FTP控制命令
被动模式工作原理: PASV是Passive的缩写,中文成为被动模式。FTP客户端连接到FTP服务器所监听的21号端口,发送用户名和密码,发送PASV命令到FTP服务器,服务器在本地也随机开放一个端口(1024以上),然后把开放的端口告知客户端,而后客户端再连接到服务器开放的端口进行数据传输,原理如图所示。
注:以上的说明主动和被动,是相对于的FTP server端而判断,如果server去连接client开放的端口,说明是主动的,相反,如果client去连接server开放的端口,则是被动。
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #开机自关闭防火墙
setenforce 0 #临时关闭增强型安全功能
设置selinux状态方法有永久和临时两种
永久:
修改配置文件/etc/selinux/config的SELINUX=disabled,然后需要重启服务器生效
临时:
getenforce可以查看当前selinux的状态
setenforce [0|1]可以临时设置selinux的状态,0关闭,1开启
即setenforce可以在enforcing(开)和permissive(关)间切换selinux的状态
yum info vsftpd 或 rpm -qa|grep vsftpd #查看vsftp信息
如果没有安装,使用yum安装
yum install -y vsftpd
systemctl start vsftpd #开启ftp服务
systemctl enable vsftpd #开机自启FTP服务
cd /etc/vsftpd #切换服务配置目录
cp -p vsftpd.conf vsftpd.conf.bak 并且做备份
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #开启匿名用户访问。默认开启
write_enable=YES #开放服务器的写权限(若要上传必须开启)。默认已开启
local_umask=022 #设置匿名用户所上传数据的权限掩码(反掩码)
anon_upload_enable=YES #允许匿名用户上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES #允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enbale=YES #允许删除、重命名、覆盖等操作。需添加
chmod -R 777 /var/ftp/pub/ #为匿名访问ftp的根目录下的pub子目录设置最大权限
以便匿名用户上传数据
systemctl restart vsftpd #重启服务
在windows系统打开开始菜单,输入cmd命令打开命令提示符
ftp 192.168.109.11 #建立ftp连接
匿名访问时,用户名为ftp,密码为空,直接回车即可完成登录
1、首先进入/var/ftp/pub,创建一个新文件
2、进入windows系统,按win+R,输入cmd命令打开命令提示符。在上面创建的文件,这里面查到了。
vim /etc/vsftpd/vsftpd.conf
local_enable=YES #启用本地用户
anonymous_enable=NO #关闭匿名用户访问
write_enable=YES #开放服务器的写权限(若要上传必须开启)
local_umask=077 #可设置仅宿主目录用户拥有被上传的文件的权限(反掩码)
chroot_local_user=YES #将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES #允许被限制的用户主目录下具有写权限
#anon_mkdir_write_enable=YES 注释
#anon_other_write_enable=YES 注释
systemctl restart vsftpd #重启服务
ftp 192.168.109.11
ftp://[email protected]
修改匿名用户、本地用户登陆的默认根目录
anon_root=/var/www/html #anon_root 针对匿名用户
local_root=/var/www/html #local_root 针对系统用户
1、创建张三用户,并设置张三用户权限
2、在windows系统中登录张三用户,并且只能在/www/html下操作,不能切换目录
3、在xshell中可以查看到/var/www/html下,有boy.txt,文件上传成功
公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:
·
加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。
·
·
解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。注意,由公钥加密的内容,只能由私钥进行解密,也就是说,由公钥加密的内容,如果不知道私钥,是无法解密的。
·
公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因),私钥是保密的。大家都以使用公钥进行加密,但是只有私钥的持有者才能解密。在实际的使用中,有需要的人会生成一对公钥和私钥,把公钥发布出去给别人使用,自己保留私钥。
密钥分为两种:对称密钥与非对称密钥。
对称密钥,即信息的发送方和接收方使用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
非对称密钥,需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。
简单来说:
加密的密钥和解密的密钥一样我们称之为对称密钥;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DIm0DAn6-1655966441187)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps1.png)]
加密的密钥和解密的密钥不一样 我们称之为非对称密钥;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zZ1rRUQD-1655966441187)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps2.png)]
非对称密钥加密技术采用一对匹配的密钥进行加密、解密,具有两个密钥,一个是公钥一个是私钥。无论是公钥还是私钥,本质都是密钥,都是用来加密数据的,但是其应用场景不同。
为发送一份保密报文,发送者必须使用接收者的公共密钥对数据进行加密,一旦加密,只有接收方用其私人密钥才能加以解密。
如果一个用户用自己的私人密钥对数据进行了处理,别人可以用他提供的公共密钥对数据加以处理。由于仅仅拥有者本人知道私人密钥,这种被处理过的报文就形成了一种电子签名,一种别人无法产生的文件。数字证书中包含了公共密钥信息,从而确认了拥有密钥对的用户的身份。
数字签名的作用是可以证明:文件来源于可靠,非篡改和伪造。可以看下面的场景:秦始皇想要发一道圣旨给驻守边塞的公子扶苏,但是又担心圣旨在下放过程中,被人篡改和伪造,那么皇帝可以拿出密钥对圣旨进行加密。等圣旨传到扶苏手上之后,他可以使用天下人共知的公钥进行解密,如果能解密成功,那么可以证明此圣旨的确出自父皇之手。秦皇自己的秘钥与公布出来公钥是一对的,其他人即便伪造了圣旨,也无法逃脱公钥的法眼。
证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
在非对称密钥加密技术中,如何确保公钥不被冒充?可以使用数字证书可以确保公钥不被冒充。
数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:
1、由专门的机构签发的数字证书才安全有效。
2、签发数字证书是收费的。
3、不会被冒充,安全可信。
4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。
5、CA的公钥已经集成到操作系统中了。
1、持有人将公钥以及身份信息发送给权威机构。
2、权威机构负责对持有人的身份进行验证,确保公钥和持有人的信息准确无误。
3、权威机构使用自己私钥对持有人公钥进行数字签名,生成数字证书。
4、为了确保证书不被篡改,权威机构对数字证书进行hash计算(指纹算法),生成摘要(指纹),使用自己的私钥对摘要进行数字签名,放到数字证书中。
5、对持有人收费。
Tom计划给Jim写密信,他先生成数字证书,有了数字证书后,给Jim写信时额外地附上数字证书。
Jim收信后,用CA的公钥解密数字证书中的数字签名(CA公钥存在根证书中,根证书是绝对信任的),得到数字签名的原文,再计算数字证书的hash值,对比得到的hash值和得到的数字签名原文,即可验证该数字证书是否可信任。若验证通过了,说明该数字证书上的信息是可信的,进而得到Tom的真实公钥,用Tom的真实公钥来验证Tom的数字签名,若验证通过,则可以确认该信件是Tom发出的了
密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。 18位 密码复杂性(大写、小写、字符、数字) 端口(1023以上叫做高位端口1922) 做好安全 密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在Shell 中被广泛使用。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则 两种方式都可启用
首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下寻找事先放上去的对应用户的公用密钥,然后把它和连接的SSH客户端发送过来的公用密钥进行比较。如果两个密钥一致,SSH服务器就用公钥加密"质询"(challenge)并把它发送给SSH客户端。
有时候我们希望不用每次登录linux服务器都要输入密码,那么这个时候可以选择ssh密钥登录,就是rsa公钥放到服务器上,私钥放在客户端上,每次登录的时候,用密钥登录;这样更方便也更安全
·
先生成一个rsa密钥对
·
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-czOwZpjZ-1655966441188)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps3.jpg)]
默认生成的密钥文件在root/.ssh目录下
·
检查下.ssh目录下authorized_keys文件是否存在,没有的话,创建一个,然后将id_rsa.pub的内容追加到authorized_keys文件尾
·
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLFogZyu-1655966441188)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps4.jpg)]
修改.ssh的权限为700, authorized_keys的权限为600或者更严格的400,否则登录的时候会提示server refuse you key,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWf7zAn8-1655966441189)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps5.jpg)]
修改下ssh的配置
vim /etc/ssh/sshd_config
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVHWhK5a-1655966441189)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps6.jpg)]
vim /etc/ssh/sshd_config
43行 PubkeyAuthentication yes #开启密钥对验证
47 AuthorizedKeysFile .ssh/authorized_keys #注意查看公钥名称是否一致
65 PasswordAuthentication no #密码认证改成no是取消
systemctl restart sshd
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yFIaaDv0-1655966441190)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps7.jpg)]
切换到.ssh目录把指定文件上传到本地服务器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhlSbMyE-1655966441191)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps8.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJNEchiW-1655966441191)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps9.jpg)]
新建一个会话连接,登录root用户,选择密钥登录,然后导入上传到本地服务器的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZdibmJS-1655966441192)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps10.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4fBRbacJ-1655966441192)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps11.jpg)]
点击确定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KNFSy04p-1655966441193)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps12.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NLgS5cP-1655966441193)(C:\Users\sun\AppData\Local\Temp\ksohtml17416\wps13.jpg)]
)]
切换到.ssh目录把指定文件上传到本地服务器
[外链图片转存中…(img-QhlSbMyE-1655966441191)]
[外链图片转存中…(img-cJNEchiW-1655966441191)]
新建一个会话连接,登录root用户,选择密钥登录,然后导入上传到本地服务器的文件
[外链图片转存中…(img-qZdibmJS-1655966441192)]
[外链图片转存中…(img-4fBRbacJ-1655966441192)]
点击确定
[外链图片转存中…(img-KNFSy04p-1655966441193)]
[外链图片转存中…(img-6NLgS5cP-1655966441193)]
点击id_rsa文件选择确认