SSH远程管理及访问控制

目录

一、SSH远程管理

1.1.SSH协议:

对称加密算法(DES)

非对称加密算法(RSA、DSA)

对称加密算法与非对称加密算法区别

1.2.ssh服务端:

OpenSSH服务端配置

登入OpenSSH服务端验证

开启服务端验证

二、SSH远程登入

2.1.SSH客户端命令:

[scp命令 ------ 远程安全复制](#scp命令 —— 远程安全复制)

[sftp命令 ------ 安全FTP上下载](#sftp命令 —— 安全FTP上下载)

2.2.基于用户名密码登入验证原理:

2.3.Windows下常用SSH客户端程序:

Xshell

MobaXterm

2.4.设置及登入实例:

实例一:禁止root远程登录

实例二:更改默认端口

实例三:其它配置及命令

三、密钥对验证的SSH体系

3.1.实现过程介绍:

第一步:创建密钥对

第二步:上传公钥文件

第三步:导入公钥信息

第四步:使用密钥对验证方式

3.2.密钥对验证的SSH体系实施:

第一步:在客户机中创建密钥对

第二步:将公钥文件上传至服务器

第三步:将公钥文本添加至目标用户的公钥库(服务器上操作)

第四步:客户端使用密钥对验证登录

常见错误

[四、TCP Wrappers控制](#四、TCP Wrappers控制)

[4.1.TCP Wrappers概述:](#4.1.TCP Wrappers概述:)

保护原理

保护机制的实现方式

4.2.访问控制策略:

访问控制策略配置文件

策略编写格式

策略的应用顺序

4.3.策略应用示例:

仅允许从以下地址访问sshd服务

禁止其他所有地址访问受保护的服务


一、SSH远程管理

1.1.SSH协议:

Linux系统的SSH的全称为Secure Shell,表示安全的shell。SSH是一种用于安全访问远程服务器的协议,为客户机提供安全的Shell环境,用于远程管理的工具。

理解SSH是如何保证安全的之前,我们先来了解几个密码学相关概念:

对称加密算法(DES)

  1. 发送方使用"密钥"将"明文数据"加密成"密文",然后发送出去

  2. 接收方收到密文后,使用"同一个密钥"将密文解密成明文进行读取

非对称加密算法(RSA、DSA)

  1. 发送方使用接收方发送过来的"公钥"将"明文数据"加密成"密文",然后发送出去

  2. 接收方收到密文后,使用自己本地留存的"私钥"将密文解密成明文进行读取

对称加密算法与非对称加密算法区别

对称加密

  1. 使用"同一个密钥"进行加密和解密,密钥容易泄露

  2. 加密速度快,效率高,数据传输速度快,安全性较低

非对称加密

  1. 使用"不同的密钥"(公钥和私钥)进行加密和解密

  2. 加密速度远远慢于对称加密,数据传输速度慢,安全性较高

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.基于用户名密码登入验证原理:

  1. SSH客户端向SSH服务端发起一个登录请求

  2. SSH服务端将自己的公钥发送给SSH客户端

  3. SSH客户端使用服务端发过来的公钥将自己的密码加密并且发送给SSH服务端

  4. SSH服务端收到SSH客户端发过来的加密密码后使用本地留存的私钥进行解密

  5. SSH服务端将解密出来的密码和/etc/shadow 文件里的用户密码对比认证

  6. 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"

  1. 修改配置文件

vim /etc/ssh/sshd_config

  1. 重启服务

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

​​​​​​​

相关推荐
Uncertainty!!4 小时前
Linux多用户情况下个别用户输入密码后黑屏
linux·远程连接
necessary6534 小时前
使用Clion查看linux环境中的PG源码
linux·运维·服务器
江湖有缘6 小时前
Jump个人仪表盘Docker化部署教程:从0到 搭建专属导航页
运维·docker·容器
小猪佩奇TONY6 小时前
Linux 内核学习(14) --- linux x86-32 虚拟地址空间
linux·学习
Lam㊣6 小时前
Centos 7 系统docker:更换镜像源
linux·docker·centos
FL16238631296 小时前
win11+WSL+Ubuntu-xrdp+远程桌面闪退+黑屏闪退解决
linux·运维·ubuntu
石头5306 小时前
Kubernetes监控全栈解决方案:从零搭建Prometheus+Grafana监控体系
linux
ha20428941946 小时前
Linux操作系统学习记录之---TcpSocket
linux·网络·c++·学习
AOwhisky7 小时前
Linux逻辑卷管理:从“固定隔间”到“弹性存储池”的智慧
linux·运维·服务器