目录
[scp命令 ------ 远程安全复制](#scp命令 —— 远程安全复制)
[sftp命令 ------ 安全FTP上下载](#sftp命令 —— 安全FTP上下载)
[四、TCP Wrappers控制](#四、TCP Wrappers控制)
[4.1.TCP Wrappers概述:](#4.1.TCP Wrappers概述:)
一、SSH远程管理
1.1.SSH协议:
Linux系统的SSH的全称为Secure Shell,表示安全的shell。SSH是一种用于安全访问远程服务器的协议,为客户机提供安全的Shell环境,用于远程管理的工具。
理解SSH是如何保证安全的之前,我们先来了解几个密码学相关概念:
对称加密算法(DES)
-
发送方使用"密钥"将"明文数据"加密成"密文",然后发送出去
-
接收方收到密文后,使用"同一个密钥"将密文解密成明文进行读取
非对称加密算法(RSA、DSA)
-
发送方使用接收方发送过来的"公钥"将"明文数据"加密成"密文",然后发送出去
-
接收方收到密文后,使用自己本地留存的"私钥"将密文解密成明文进行读取
对称加密算法与非对称加密算法区别
对称加密
-
使用"同一个密钥"进行加密和解密,密钥容易泄露
-
加密速度快,效率高,数据传输速度快,安全性较低
非对称加密
-
使用"不同的密钥"(公钥和私钥)进行加密和解密
-
加密速度远远慢于对称加密,数据传输速度慢,安全性较高
1.2.ssh服务端:
SSH是Linux下远程管理的工具,相比Telnet更加安全,与windows中远程桌面类似。
默认端口:22
使用协议:TCP
依赖软件:OpenSSH(OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现,在Linux中默认安装)
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
OpenSSH服务端配置
#1、服务监听选项

#2、用户登录控制

登入OpenSSH服务端验证
验证对象
服务器中的本地用户账号:
验证方式
密码验证:核对用户名、密码是否匹配。
服务器中本地系统用户的登录名称,密码进行验证,使用最为简便,从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇暴力破解,防御能力较弱。
密钥对验证:核对客户的私钥、服务端公钥是否匹配
要求提供匹配的的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥,私钥)然后将公钥文件放到服务器中的指定位置,远程登录时,系统将使用公钥,私钥进行加密,解密关联验证,增强了远程管理的安全性。
开启服务端验证

二、SSH远程登入
2.1.SSH客户端命令:
ssh命令 ------ 远程安全登录
格式:ssh user@host
-l:指定连接用户
-p:指定端口
注意:当前本机用户是root,如果不指定连接用户,那么会让你输入远程主机的root密码。如果指定了连接用户zhangsan,那么不管你当前是什么用户就只让你输入远程主机的zhangsan用户密码。
实例:

说明:当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts文件中,下次再访问就直接通过密码登录,不需要再确认公钥。

scp命令 ------ 远程安全复制
格式1:scp user@host:file1 file2 //将远程文件拷贝到本地
格式2:scp file1 user@host:file2 //将本地文件拷贝到远程
-r:递归拷贝目录
-P:指定远程服务器的端口
实例:

sftp命令 ------ 安全FTP上下载
格式:sftp user@host
实例:

2.2.基于用户名密码登入验证原理:
-
SSH客户端向SSH服务端发起一个登录请求
-
SSH服务端将自己的公钥发送给SSH客户端
-
SSH客户端使用服务端发过来的公钥将自己的密码加密并且发送给SSH服务端
-
SSH服务端收到SSH客户端发过来的加密密码后使用本地留存的私钥进行解密
-
SSH服务端将解密出来的密码和/etc/shadow 文件里的用户密码对比认证
-
SSH服务端认证成功,则返回登录成功结果,并发送一个随机会话口令给客户端,该口令用于后面两台主机进行数据传输的一个临时加密会话口令
2.3.Windows下常用SSH客户端程序:
Xshell

MobaXterm

2.4.设置及登入实例:
实例环境:创建用户并授权
环境:开发部门3个员工,zhangsan,lisi,wanwu
#1) 创建组和相应用户
useradd zhangsan
useradd lisi
useradd wanwu

#2) 使用非交互式设置密码
echo "qm123.com" | passwd --stdin zhangsan
echo "qm123.com" | passwd --stdin lisi
echo "qm123.com" | passwd --stdin wanwu

#3) 测试验证
测试新终端中是否可以登入
实例一:禁止root远程登录
注意:在生产服务器server端完成
#1. 根据需求修改配置文件
vim /etc/ssh/sshd_config

#2. 重启服务
service sshd restart 或者 # service sshd reload

#3. 测试验证
ssh root@192.168.1.1
ssh lisi@192.168.1.1

实例二:更改默认端口
端口默认更改为:2222
#1. 确定当前服务器端口没有被占用
netstat -anptu | grep ":2222"

- 修改配置文件
vim /etc/ssh/sshd_config

- 重启服务
service sshd restart 或者 # service sshd reload

4.测试验证(需要客户机)
ssh wangwu@192.168.1.1
#解决:指定端口 -p参数
# ssh -p 2222 zhangsan@192.168.1.1

实例三:其它配置及命令
#1. 验证次数
vim /etc/ssh/sshd_config

ssh zhangsan@192.168.1.1

三、密钥对验证的SSH体系
3.1.实现过程介绍:

第一步:创建密钥对
私钥文件:id_rsa
公钥文件:id_rsa.pub
由客户端的用户zhangsan在本地创建密钥对
第二步:上传公钥文件
id_rsa.pub
第三步:导入公钥信息
公钥库文件:~/.ssh/authorized_keys
导入到服务端用户lisi的公钥数据库
第四步:使用密钥对验证方式
以服务端的用户lisi的身份进行登录
3.2.密钥对验证的SSH体系实施:
第一步:在客户机中创建密钥对
命令:ssh-keygen -t 加密算法
加密算法:RSA或DSA
$ ssh-keygen -t rsa

第二步:将公钥文件上传至服务器
方式:任意方法方式,如(共享、FTP、Email、SCP、......)
$ scp ~/.ssh/id_rsa.pub root@server:/tmp/

第三步:将公钥文本添加至目标用户的公钥库(服务器上操作)
默认公钥库位置:~/.ssh/authorized_keys
mkdir -p /home/lisi/.ssh/
cat /tmp/id_rsa.pub >> /home/lisi/.ssh/authorized_keys
tail -1 /home/lisi/.ssh/authorized_keys

第四步:客户端使用密钥对验证登录
验证用户:服务端的用户lisi
验证密码:客户端的用户zhangsan的私钥短语
$ ssh lisi@192.168.4.254

简洁方法:第2步和第3步可以采用另外一种方法合并执行
命令:ssh-copy-id -i 公钥文件 user@host
选顶:-i 指定公钥文件
提示:执行该命令需验证密码,之后会将公钥自动添加到目标主机user宿主目录下的.ssh/authorized_keys文件内
$ ssh-copy-id -i ~/.ssh/id_rsa.pub lisi@192.168.4.254

常见错误
设置免秘钥登录后,仍然不能免秘钥登录的问题
ssh目录权限说明
因为sshd为了安全,对属主的目录和文件权限有所要求。如果权限不对,则ssh的免密码登陆不生效。用户目录权限为 755 或者 700,不能是77x、777,要保障other用户不能有w权限
.ssh目录权限一般为755或者700。
rsa_id.pub 及 authorized_keys 权限一般为644
rsa_id权限必须为600
例如:
.ssh目录权限
drwx------ 2 root root 4096 Apr 9 2015 .ssh
.ssh目录下文件的权限
-rw-r--r-- 1 root root 1609 Mar 2 14:05 authorized_keys
-rw------- 1 root root 1675 Dec 12 2014 id_rsa
-rw-r--r-- 1 root root 405 Dec 12 2014 id_rsa.pub
-rw-r--r-- 1 root root 4701 May 25 2016 known_hosts
这里的权限指的是服务端的权限,如从A主机通过ssh连接B主机,B主机权限按照上边的设置进行。
四、TCP Wrappers控制
4.1.TCP Wrappers概述:
TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。
保护原理
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。

保护机制的实现方式
方式1:通过tcpd主程序对其他服务程序进行包装
方式2:由其他服务程序调用libwrap.so.*链接库
4.2.访问控制策略:
访问控制策略配置文件
/etc/hosts.allow
/etc/hosts.deny
策略编写格式
服务列表:客户机地址列表
服务列表
多个服务以逗号分隔,ALL 表示所有服务
客户机地址列表
多个地址以逗号分隔,ALL表示所有地址
允许使用通配符 ? 和 *
网段地址,如 192.168.4. 或者 192.168.4.0/255.255.255.0
区域地址,如 .lancy.com
策略的应用顺序
先检查hosts.allow,找到匹配则允许访问
否则再检查hosts.deny,找到则拒绝访问
若两个文件中均无匹配策略,则默认允许访问
4.3.策略应用示例:
仅允许从以下地址访问sshd服务
主机61.63.65.67
网段192.168.2.0/24
vi /etc/hosts.allow

禁止其他所有地址访问受保护的服务
vi /etc/hosts.deny
