目录
SSH(Secure Shell)协议定义
- 是一种安全通道协议
- 对通信数据尽心了加密处理,用于远程管理
OpenSSH
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
服务监听选项
- 端口号、协议版本、监听ip地址
- 禁用反向解析
[root@localhost ~]# vi /etc/ssh/sshd_config
......
Port 22
LisenAddress 172.16.16.22
Protocol 2
UseDNS no
用户登录控制
- 禁用root用户、空密码用户。
- 限制登录验证时间、重试次数。
- AllowUsers、DenyUsers。
[root@localhost ~]# vi /etc/ssh/sshd_config
LoginGraceTime 2m
PermitRootLogin no
MaxAuth Tries 6
PermitEmptyPasswords no
......
AllowUsers jerry admin@61.23.24.25 //AllowUsers不要与DenyUsers同时使用
登录验证方式
- 密码验证:核对用户名、密码是否匹配。
- 密钥对验证:核对客户的密钥、服务端公钥是否匹配。
[root@localhost ~]# vi /etc/ssh/sshd_config
......
PasswordAuthenticaation yes
PubkeyAuthentication yes //启用密码验证、密钥对验证、指定公钥库位置
AuthorizedKeyFile .ssh/authorized_keys
公钥加密技术是PKI的基础
公钥与私钥关系
- 公钥与私钥是成对生成的,互不相同,互相加密与解密
- 不能根据一个密钥来推算出另一个密钥
- 公钥对外公开,私钥只对私钥持有人才知道
- 私钥应该由密钥的持有人妥善保管
根据实现的功能不同,可分为数据加密和数字签名
PKI概念
- 公钥基础设施
- 通过使用公钥技术和数字签名来确保信息安全
- 由公钥加密技术、数字证书、CA、RA组成
PKI体系能够实现的功能
- 身份验证
- 数据完整性
- 数据机密性
- 操作的不可否认性
数据加密
- 发送方使用接收方的公钥加密数据
- 接收方使用自己的私钥加密技术
- 数据加密能保证所发送数据的机密性
发送方
- 对原始数据执行HASH算法得到摘要值
- 发送方用自己私钥加密摘要值
- 将加密的摘要值与原始数据发送给接收方
数字签名保证数据完整性、身份验证和不可否认
ssh命令——远程安全登录
[root@localhost ~]# ssh user@host //加-p 为端口选项
scp命令——远程安全复制
[root@localhost ~]# scp user@host:file1 file2
[root@localhost ~]# scp file1 user@host:file2
sftp命令——安全FTP上下载
[root@localhost ~]# sftp user@host
Xshell
- Windows下一款功能非常强大的SSH客户端软件
构建密钥对验证的SSH体系
整体实现过程:
- 第一步:创建密钥对(由客户端的用户zhangsan在本地创建密钥对)
私钥文件:id_rsa
公钥文件:id_rsa.pub - 第二步:上传公钥文件 id_rsa.pub
- 第三步:导入公钥信息(导入到服务器用户lisi的公钥数据库)
公钥文件:~/.ssh/authorized_keys - 第四步:使用密钥对验证方式 (以服务端的用户lisi的身份进行登录)
在客户机中创建密钥对
- ssh-keygen命令
- 可用的加密算法:RSA、ECDSA或DSA
[root@localhost ~]# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id_ecdsa):
Created directory '/home/zhangsan/.ssh'.
Enter passpjrase(empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zhangsan/.ssh/id_ecdsa.
Your public key has been saved in /home/zhangsan/.ssh/id_ecdsa.pub.
......
将公钥文件上传至服务器
- 任何方式均可(FTP、Email、SCP、HTTP…)
[root@localhost ~]# scp ~/.ssh/id_ecdsa.pub root@172.16.16.22:/tmp
在服务器中导入公钥文本
- 将公钥文本添加至目标用户的公钥库
- 默认公钥库位置:~/.ssh/authorized_keys
[root@localhost ~]# mkdir /home/lisi/.ssh/
[root@localhost ~]# cat /tmp/id_ecdsa.pub >>/home/lisi/.ssh/authorized_keys
[root@localhost ~]# tail -1 /home/lisi/.ssh/authorized_keys
ecdsa-sha2-nistp256
AAAAE2VjZHNhLXNoYTltbmlzdHAyNTYAAAAlbmlzdHAyNTYAAABBBLJSnBhscYBfnnHxSYAJEBD4sNkTLMF7itcFGM33RdeXU89QNQkMnCrCJHzAlZURrzpXG6Mp62mz9gRXUnARk8s=zhangsan@localhost
客户端使用密钥对验证登录
- 验证用户:服务端的用户lisi
- 验证密码:客户端的用户zhangsan的私钥短语
[zhangsan@localhost ~]$ ssh lisi@172.16.16.22
[lisi@localhost ~]$ whoami
lisi
TCP Wrappers
保护原理
保护机制的实现方式
- 方式1:通过tcpd程序对其他服务程序进行包装。
- 方式2:由其他服务程序调用libwrap.so.*链接库
访问控制策略的配置文件
- /etc/hosts.allow
- /etc/hosts.deny
设置访问控制策略
- 策略格式:服务程序列表:客户端地址列表
- 服务程序列表
- 多个服务以逗号分隔,ALL表示所有服务 - 客户端地址列表
-多个地址以逗号分隔,ALL表示所有地址
-允许使用通配符?和*
网段地址,如192.168.4. 或者192.168.4.0/255.255.255.0
-区域地址,如.benet.com
策略的应用顺序
- 检查hosts.allow,找到匹配则允许访问
- 再检查hosts.deny,找到则拒绝访问
- 若两个文件中均无匹配策略,则默认允许访问
策略应用示例
- 仅允许从以下地址访问sshd服务
-主机61.63.65.67
-网段192.168.2.0/24 - 禁止其他所有地址访问受保护的服务
[root@localhost ~]# vi /etc/hosts/allow
sshd:61.63.65.67, 192.168.2.*
[root@localhost ~]# vi /etc/hosts.deny
sshd:ALL