构建安全的SSH服务体系

       某公司的电子商务站点由专门的网站管理员进行配置和维护,并需要随时从Internet进行远程管理,考虑到易用性和灵活性,在Web服务器上启用OpenSSH服务,同时基于安全性考虑,需要对 SSH登录进行严格的控制,如图10.4所示。

需求描述

> 允许网站管理员wzadm通过笔记本电脑远程登录Web服务器,笔记本电脑的IP地址并不是固定的,采用密钥对验证方式以提高安全性。

> 允许用户jacky远程登录Web服务器,但仅限于从网管工作站192.168.3.110访问。

> 禁止其他用户通过SSH方式远程登录Web服务器。

创建用户

[root@node01 ~]# useradd wzadm
[root@node01 ~]# passwd wzadm[root@node01 ~]# useradd jacky
[root@node01 ~]# passwd jacky

1.在客户端创建密钥对(一下操作为客户端操作,非root用户也可操作)

     在Linux客户端中,通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为ECDSA 或DSA (ssh-keygen命令的“-t”选项用于指定算法类型)。例如,以 root 用户登录客户端,并生成基于ECDSA算法的SSH密钥对(公钥、私钥)文件,操作如下所示。 

[root@node02 ~]# ssh-keygen -t ecdsa

 

上述操作过程中,提示指定私钥文件的存放位置时,一般直接按Enter键即可,最后生成的私钥、公钥文件默认存放在宿主目录中的隐藏文件夹.ssh下。

[root@node02 ~]# ls -lh /root/.ssh/id_ecdsa*  //确认生成的密钥对

     新生成的密钥对文件中,id_ecdsa是私钥文件,权限默认为600。对于私钥文件必须妥善保管, 不能泄露给他人;id_ecdsa.pub是公钥文件,用来提供给SSH服务器。

2. 将公钥文件上传至服务器

      将上一步生成的公钥文件上传至服务器,并部署到服务器端用户的公钥数据库中,上传公钥文 件时可以选择SCP、FTP、Samba、HTTP甚至发送E-mail等任何方式。例如,可以通过SCP方式将文件上传至服务器的/tmp目录下。

[root@node02 ~]# scp /root/.ssh/id_ecdsa.pub root@192.168.222.128:/tmp

3.在服务器中导入公钥文本(以下操作为服务端root操作)

     在服务器中,目标用户(指用来远程登录的账号wzadm)的公钥数据库位于~/.ssh目录,默认的 文件名是‘authorized_keys"。如果目录不存在,需要手动创建。当获得客户端发送过来的公钥文件以 后,可以通过重定向将公钥文本内容追加到目标用户的公钥数据库。

[root@node01 ~]# mkdir /home/wzadm/.ssh/
[root@node01 ~]# cat /tmp/id_ecdsa.pub >> /home/wzadm/.ssh/authorized_keys
[root@node01 ~]# tail -l /home/wzadm/.ssh/authorized_keys

       在公钥库authorized_keys文件中,最关键的内容是“ecdsa-sha2-nistp256加密字串”部分,当 导入非 ssh-keygen 工具创建的公钥文本时,应确保此部分信息完整,最后“root@node02” 是注释信息。

      由于 sshd 服务默认采用严格的权限检测模式(StrictModes yes),因此还需注意公钥库文件 authorized_keys的权限——要求除了登录的目标用户或root用户,同组或其他用户对该文件不能有写入权限,否则可能无法成功使用密钥对验证。

[root@node01 ~]# ls -l /home/wzadm/.ssh/authorized_keys

登录验证方式

      对于服务器的远程管理,除了用户账号的安全控制以外,登录验证的方式也非常重要。sshd服 务支持两种验证方式——密码验证、密钥对验证,可以设置只使用其中一种方式,也可以两种方式 都启用。

密码验证:对服务器中本地系统用户的登录名称,密码进行验证,这种方式使用最为简便, 但从客户端角度来看,正在连接的服务器有可能被假冒:从服务器角度来看,当遭遇密码 穷举(暴力破解)攻击时防御能力比较弱。

密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥 文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用 公钥,私钥进行加密/解密关联验证,大大增强了远程管理的安全性,该方式不易被假冒,且可以免交互登录,在Shell 中被广泛使用。

      当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服 务器,建议将密码验证方式禁用,只允许启用密钥对验证方式:若没有特殊要求,则两种方式都可 启用。

[root@node01 ~]# vim /etc/ssh/sshd_config

//启用密码认证

//43 启用密钥对认证

//45 将wzadm、jacky用户加入白名单,jacky用户只能在IP为192.168.222.1的主机ssh远程到服务端node01

//49 指定公钥库文件

[root@node01 ~]# systemctl restart sshd //重启sshd服务

4.  在客户端使用密钥对验证(以下为客户端操作,非root也可操作)

       当私钥文件(客户端)、公钥文件(服务器)均部署到位以后,就可以在客户端中进行测试了。 首先确认客户端中当前的用户为root,然后通过ssh命令以服务器端用户wzadm的身份进行远程登录。如果密钥对验证方式配置成功,则在客户端将会要求输入私钥短语,以便调用私钥文件进行匹配(若未设置私钥短语,则直接登入目标服务器)。

验证实验结果

(1)使用jacky的用户名/密码,可以从主机192.168.222.1远程登录网站服务器。

(2)使用wzadm的用户名/密码,在任何主机中均无法远程登录网站服务器。

(3)在生成密钥对的主机中,使用wzadm的用户名、验证私钥短语后可以远程登录网站服务器。

(4)使用root 用户或其他用户(如wangwu)无法远程登录网站服务器。

 

[root@node02 ~]# ssh wzadm@192.168.222.128
[wzadm@node01 ~]$ whoami

验证结果,只有wzadm用户可以ssh到服务端弄node01,root和其他人都没有权限ssh到服务端

jacky用户在IP为192.168.222.1的主机成功ssh远程到服务端node01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/313338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一元函数微分学——刷题(8

目录 1.题目:2.解题思路和步骤:3.总结:小结: 1.题目: 2.解题思路和步骤: 先看A,既然存在,那么f(x)和x属于同阶无穷小,所以f(0)0,没问题 再看C,结…

自行车服务PEDALWAYS 网站bootstrap5模板

一、需求分析 自行车服务网站的作用是为骑行爱好者和自行车用户提供便捷的信息、工具和服务,以满足他们的需求。以下是一些常见的自行车服务网站的功能: 自行车租赁:提供自行车租赁服务,用户可以在线预订自行车并选择租赁期限&am…

华为云创新中心,引领浙南的数字化腾飞

编辑:阿冒 设计:沐由 县域经济是我国国民经济的重要组成部分,是推动经济社会全面发展的核心力量之一。在推进中国式现代化的征程中,县域经济扮演的角色也越来越重要。 毫无疑问,县域经济的良性发展,需要多方…

动态内存管理篇

为什么要动态内存分配? 之前,我们向内存申请空间,有两种方式,一种是定义变量,一种是建立数组;但是,这两种方式都有缺陷,创建的空间大小是固定的,在程序的运行过程中&…

十大排序的个人总结之——选择排序

一、选择排序: 选择排序是所以用到它的时候,数据规模越小越好。 时间复杂度:无最好最坏,永远都是O(n) 不占用额外空间(唯一好处) 还不稳定(几乎已经被淘汰了的排序算法) 1. 算法…

Android 相机库CameraView源码解析 (四) : 带滤镜预览

1. 前言 这段时间,在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位,在项目前期,的确为我们节省了不少时间。 但随着项目持续深入,对于CameraView的使用进入深水区,逐…

【十一】【C++\动态规划】1218. 最长定差子序列、873. 最长的斐波那契子序列的长度、1027. 最长等差数列,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

ROS2第一个节点 引言1 认识ROS2节点1.1 节点之间的交互1.2 节点的命令行指令1.3 工作空间1.4 功能包1.4.1 功能包获取安装1.4.2 功能包相关的指令 ros2 pkg 2 ROS2构建工具—Colcon2.1 安装Colcon2.2 测试编译2.3 Colcon其他指令 3 使用RCLPY编写节点3.1 创建Python功能包3.2 编…

gem5学习(8):创建一个简单的缓存对象--Creating a simple cache object

目录 一、SimpleCache SimObject 二、Implementing the SimpleCache 1、getSlavePort() 2、handleRequest() 3、AccessEvent() 4、accessTiming() (1)缓存命中:sendResponse() (2)缓存未命中: 三、…

idea部署javaSE项目(awt+swing项目)_idea导入eclipse的javaSE项目

一.idea打开项目 选择需要部署的项目 二、设置JDK 三、引入数据库驱动包 四、执行sql脚本 四、修改项目的数据库连接 找到数据库连接文件 五.其他系统实现 JavaSwing实现学生选课管理系统 JavaSwing实现学校教务管理系统 JavaSwingsqlserver学生成绩管理系统 JavaSwing用…

文件分片上传(模拟网盘效果)

文件分片上传(模拟网盘效果) 文章说明简单模拟拖拽文件夹和选择文件的进度条效果效果展示结合后端实现文件上传效果展示加上分片的效果效果展示加上MD5的校验,实现秒传和分片的效果后续开发说明源码下载 文章说明 文章主要为了学习文件上传&a…

Selenium教程04:鼠标+键盘网页的模拟操作

在webdriver 中,鼠标操作都封装在ActionChains类中,使用的时候需要导入这个包。 from selenium.webdriver import ActionChainsActionChains方法列表如下: click(on_elementNone) ——单击鼠标左键click_and_hold(on_elementNone) ——点击…