一、SSH介绍
SSH(Secure Shell) 是一种安全的通道协议,主要用来实现字符界面的远程登录、远程复制等功能。
软件:openssh、openssh-server等(默认已安装)
服务名称:sshd
端口:默认端口是22
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
1.服务监听选项
[[email protected] ~]# vi /etc/ssh/sshd_config
……
Port 22 //监听端口号为22
Protocol 2 //使用SSH V2协议
ListenAddress 192.168.4.254 //监听地址为192.168.4.254
UseDNS no //禁用DNS方向解析(提高服务器的响应速度)
……
注意:为了提高安全性,监听端口和监听地址可以根据需求进行修改。
2.用户登录控制
[[email protected] ~]# vi /etc/ssh/sshd_config
……
PermitRootLogin no //禁止root用户登录
PermitEmptyPasswords no //禁止空密码用户登录
LoginGraceTime 2m //登录验证时间为2分钟
MaxAuthTries 6 //最大重试次数为6
……
注意:sshd服务默认允许root用户登录(不安全),普遍做法:先以普通用户远程登入,进入安全的shell环境后,根据实际需要可以使用su 命令切换root用户。
AllowUsers jerry [email protected] //只允许jerry和admin用户登录,且admin用户仅能够从IP地址 为61.23.24.25的主机远程登录。
注意:当希望只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似,但不能同时使用。
3.登录验证方式
[[email protected] ~]# vi /etc/ssh/sshd_config
……
PasswordAuthentication yes //启用密码验证
PubkeyAuthentication yes //启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys //指定公钥数据文件
密码验证:以服务器中本地系统用户的登录名称、密码进行验证。
密钥对验证:要求提供相同匹配的密钥信息才能通过,创建方式主要有三步。
注意:密码验证使用方法简单,但是不安全,对于安全性较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可以启用,服务器优先使用密钥对验证。
3.SSH客户端程序(密码验证)
软件包:openssh-clients(默认已安装)
ssh命令 —— 远程安全登录
格式:ssh [email protected]
scp命令 —— 远程安全复制
格式1:scp [email protected]:file1 file2 //下行
格式2:scp file1 [email protected]:file2 //上行
sftp命令 —— 安全FTP上下载
格式:sftp [email protected] //与FTP类似
注意:任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如windows平台中的Xshell、SecureCRT、Putty等。
4.密钥对验证的SSH体系
(1)在客户端创建密钥对
[[email protected] ~]$ ssh-keygen -t rsa//在客户机为用户zhangsan生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id_rsa):
//指定私钥位置
Enter passphrase (empty for no passphrase): //设置私钥短语
Enter same passphrase again: //确认所设置的短语
Your identification has been saved in /home/zhangsan/.ssh/id_rsa.
Your public key has been saved in /home/zhangsan/.ssh/id_rsa.pub.
……
注意:在指定私钥存放位置时,一般直接回车,默认位置为宿主目录下的.ssh文件夹下;
私钥短语对私钥文件进行保护,当使用该私钥验证登录时必须正确提供此处所设置的短语。如果,直接回车不设置私钥短语,可以实现无口令登录,相比较安全性稍差。
(2)将公钥文件上传至服务器
[[email protected] ~]$ scp ~/.ssh/id_rsa.pub [email protected]:/tmp///上传方法随意
(3)在服务器导入公钥文本
[[email protected] ~]# mkdir -p /home/lisi/.ssh/
[[email protected] ~]# cat /tmp/id_rsa.pub >> /home/lisi/.ssh/authorized_keys
注意:这里用来远程登录的账号是lisi,所以先在lisi的宿主目录中创建.ssh文件夹,然后将用户zhangsan的公钥追加到该文件夹下的authorized_keys文件中。
二、TCP Wrappesr访问控制
TCP Wrappers将其他的TCP服务程序“包裹”起来,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
1.访问控制策略的配置文件
/etc/hosts.allow //允许个别,拒绝所有,需要在hosts.deny中设置ALL:ALL
/etc/hosts.deny //允许所有,拒绝个别
2.策略配置格式
服务器程序列表:客户机地址列表
服务列表--ALL:代表所有服务
单个服务程序
多个服务程序,用逗号分隔
客户机地址列表--ALL:代表任何客户机地址
LOCAL:代表本机地址
单个IP地址
网络段地址:如192.168.4. 或者 192.168.4.0/255.255.255.0
以”.”开始的域名,如”.benet.com”,匹配benet.com域中所有主机。
多个地址以逗号分隔
允许使用通配符 ? 和 *
3.策略的应用顺序
先检查hosts.allow,找到匹配则允许访问。
否则再检查hosts.deny,找到则拒绝访问。
若两个文件中均无匹配策略,则默认允许访问。
实验案例:
某公司的电子商务站点由站门的网站管理员进行配置和维护,并需要随时从Internet进行远程管理。考虑到易用性和灵活性,在web服务器上启用OpenSSH服务,同时基于安全性考虑,需要对SSH登录进行严格的控制。
需求描述:
允许用户wzadm从任意地址登录,采用密钥对验证
允许用户jacky从主机192.168.3.110登录
禁止其他所有用户远程登录
环境拓扑如下:
1.准备实验环境
一共四台电脑,一台internet测试机,一台网站服务器,一台网关服务器(添加两块网卡),使用真机做网管工作站。
(1)正确配置各主机的网络参数(IP地址、子网掩码、默认网关),网关服务器的内网卡使用vm1,ip地址是192.168.1.254,外网卡使用vm8,ip地址是218.29.30..31,Internet测试机ip地址是218.29.30.218,网卡vm8,配置网关指向218.29.30.31,网站服务器的地址是192.168.1.1,网卡vm1,网关指向192.168.1.254。
(2)在linux上配置网关的临时方式例如:route add default gw 192.168.1.254
(3)在网关服务器上开启路由转发。
echo “1” > /proc/sys/net/ipv4/ip_forward //临时开启路由功能
修改/etc/sysctl.conf文件 //永久开启路由功能
net.ipv4.ip_forward = 1
修改完毕后执行sysctl -p执行,让sysctl.conf配置文件即使生效。
(4)测试内外网之间可以ping通
(5)在网站服务器上添加测试用户jacky、wzadm,并设置好密码。
2、创建密钥对文件,分发公钥
(1)在Internet测试用机218.29.30.218上创建SSH密钥对文件。
[[email protected] ~]# ssh-keygen -t rsa
(2)将其中的公钥文件发送给网站Web服务器(使用FTP等任何方式)。
3、配置OpenSSH服务端
(1)在网站服务器中,开启SSH密钥对验证、密码验证,并限制登录用户。
[[email protected] ~]# vi /etc/ssh/sshd_config
…… //省略部分内容
PermitRootLogin no
AllowUsers [email protected] wzadm
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_key
[[email protected] ~]# service sshd reload
(2)将客户机发过来的公钥文本导入wzadm用户的公钥数据库。
[[email protected] ~]# mkdir -p /home/wzadm/.ssh/
[[email protected] ~]# cat id_rsa.pub >> /home/wzadm/.ssh/authorized_keys
(3)锁定用户账号wzadm,以禁止其直接使用口令验证。
[[email protected] ~]# passwd -l lisi
Locking password for user lisi.
passwd: Success
4、验证实验结果
(1)使用jacky的用户名/密码,可以从主机192.168.3.110远程登录网站服务器。
(2)使用wzadm的用户名/密码,在任何主机中均无法远程登录网站服务器。
(3)在生成密钥对的主机中,使用wzadm的用户名、验证私钥短语后可以登录网站服务器。(4)使用root用户或其他用户(如wangwu),无法远程登录网站服务器。