系统加固-Linux不允许用户使用密码登录,只能使用密钥登录

一、密码登录的安全隐患

传统的密码登录方式,尽管简单直接,却存在诸多安全隐患。首先,密码本身容易被猜测或通过暴力破解手段获得。特别是当用户设置了过于简单或常见的密码时,系统面临的安全风险将显著增加。其次,密码在传输过程中可能会被截获,尤其是在不安全的网络环境下,这进一步加剧了安全风险。最后,即使密码本身足够复杂且安全,但用户在不同平台间重复使用密码的习惯也容易导致“一损俱损”的连锁反应。

俗话不怕贼偷就怕贼惦记,服务器每天收到近万条尝试登录失败的通知。

image-20241203153231920

二、密钥认证的优势

与密码登录相比,密钥认证机制在安全性方面有着显著的优势。密钥认证基于公钥和私钥的加密技术,用户需要在本地生成一对密钥,其中公钥上传至服务器,私钥则保存在本地且不应泄露。在登录过程中,用户通过私钥对服务器发送的挑战进行签名,服务器则使用对应的公钥进行验证。由于私钥的私密性和不可复制性,这种认证方式极大地提高了登录过程的安全性。

此外,密钥认证还提供了更强的身份验证能力。即使攻击者获得了用户的公钥,也无法直接用于登录,因为私钥始终掌握在用户手中。同时,密钥认证还可以支持多因素认证,如结合密码、生物特征等,进一步提升系统安全性。

image-20241203155625819

生成密钥对

生成 SSH 密钥对(包括公钥和私钥)是用于进行公钥认证的常见操作。以下是在 Linux 或 macOS 中生成 SSH 密钥对的步骤。

1: 生成 SSH 密钥对

  1. 打开终端(Terminal)。

  2. 使用 ssh-keygen 命令生成 SSH 密钥对:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    这里:

    • -t rsa:指定使用 RSA 算法。
    • -b 4096:指定密钥长度为 4096 位(更长的密钥更安全)。
    • -C "your_email@example.com":这是一个可选的标签,用于标识该密钥的用途。
  3. 系统会提示你选择保存密钥的文件路径,默认保存在 ~/.ssh/id_rsa

    Enter file in which to save the key (/home/youruser/.ssh/id_rsa):
    

    如果你不想使用默认路径,可以指定一个路径,或者直接按 Enter 键使用默认路径。

  4. 接下来,系统会提示你输入一个密码(可选),该密码用于保护你的私钥:

    Enter passphrase (empty for no passphrase):
    

    如果你希望设置一个密码保护私钥,输入密码;如果不需要密码保护,直接按 Enter 键。

步骤 2: 查看生成的密钥文件

生成的密钥对包含两个文件:

  • 私钥(默认文件为 ~/.ssh/id_rsa):不要将私钥泄露给任何人。
  • 公钥(默认文件为 ~/.ssh/id_rsa.pub):可以将公钥复制到远程服务器上,用于身份验证。

可以使用以下命令查看它们:

ls -l ~/.ssh/

步骤 3: 将公钥复制到远程服务器

为了使用 SSH 密钥认证登录远程服务器,你需要将公钥添加到远程服务器的 ~/.ssh/authorized_keys 文件中。

手动方式

  1. 复制公钥内容:

    使用 cat 命令查看公钥内容:

    cat ~/.ssh/id_rsa.pub
    

    复制输出的公钥内容(包括 ssh-rsa 开头和结束的部分)。

  2. 将公钥添加到远程服务器:

    登录到远程服务器,进入 root 或目标用户的 ~/.ssh 目录:

    ssh user@your_server_ip
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    nano ~/.ssh/authorized_keys
    

    将复制的公钥粘贴到 authorized_keys 文件中,并保存退出。

  3. 设置权限:

    chmod 600 ~/.ssh/authorized_keys
    

使用 ssh-copy-id 自动复制公钥

如果你有密码登录的权限,可以使用 ssh-copy-id 自动将公钥复制到远程服务器:

ssh-copy-id user@your_server_ip

系统会提示输入远程主机的密码,验证成功后会将公钥自动添加到远程服务器的 ~/.ssh/authorized_keys 中。

步骤 4: 测试 SSH 登录

完成上述步骤后,尝试使用以下命令登录远程服务器,验证公钥认证是否成功:

ssh -i ~/.ssh/id_rsa user@your_server_ip

如果一切配置正确,你应该能够成功登录,无需输入密码(如果没有设置私钥的 passphrase)。

配置服务器SSHD

需求:

centos7系统,不允许root用户等使用密码登录,只能使用密钥登录,公钥为:ssh-rsa ABCd123

image-20241203155919760

1. 配置 SSH 服务

编辑 sshd 配置文件:

vi /etc/ssh/sshd_config
在文件中修改或添加以下参数:
# 禁止密码认证
PasswordAuthentication no# 允许公钥认证
PubkeyAuthentication yes# 禁止 root 用户使用密码登录
PermitRootLogin prohibit-password
  • PasswordAuthentication no:禁止所有用户使用密码登录。
  • PubkeyAuthentication yes:允许使用公钥认证。
  • PermitRootLogin prohibit-password:禁止 root 使用密码登录,但允许其通过公钥登录。

2. 添加公钥到 root 用户

将提供的公钥 ssh-rsa ABCd123 刚才生成的密钥添加到 root 用户的 authorized_keys 文件中。

执行以下命令:

sudo mkdir -p /root/.ssh
sudo chmod 700 /root/.ssh
echo "ssh-rsa ABCd123" | sudo tee /root/.ssh/authorized_keys
sudo chmod 600 /root/.ssh/authorized_keys
sudo chown -R root:root /root/.ssh

3. 重启 SSH 服务

保存修改后,重启 SSH 服务以应用更改:

sudo systemctl restart sshd

4. 测试登录

确保本地有对应的私钥文件,并用以下命令测试登录:

ssh -i /path/to/private_key root@your_server_ip

5. 检查日志

如果遇到问题,可以查看 /var/log/secure 获取详细日志:

sudo tail -f /var/log/secure

注意事项

  • 确保防火墙允许 SSH 连接,必要时检查 firewalldiptables 配置。
  • 使用非 root 用户管理系统,root 权限仅在必要时通过 sudo 提升。

用shell脚本

#!/bin/bash# 定义公钥内容
PUB_KEY="ssh-rsa ABCd123"# 检查是否为root用户执行
if [ "$(id -u)" -ne 0 ]; thenecho "请使用 root 用户执行此脚本!"exit 1
fiecho "开始配置 SSH 服务..."# 设置 root 用户的公钥
echo "配置 root 用户的公钥..."
mkdir -p /root/.ssh
chmod 700 /root/.ssh
echo "$PUB_KEY" >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
chown -R root:root /root/.ssh
echo "公钥配置完成!"# 修改 SSH 配置文件
echo "修改 SSH 配置文件..."
SSHD_CONFIG="/etc/ssh/sshd_config"# 备份原配置文件
if [ ! -f "$SSHD_CONFIG.bak" ]; thencp $SSHD_CONFIG "$SSHD_CONFIG.bak"echo "原配置文件已备份到 $SSHD_CONFIG.bak"
fi# 修改配置项
sed -i 's/^#*\(PasswordAuthentication\).*/\1 no/' $SSHD_CONFIG
sed -i 's/^#*\(PubkeyAuthentication\).*/\1 yes/' $SSHD_CONFIG
sed -i 's/^#*\(PermitRootLogin\).*/\1 prohibit-password/' $SSHD_CONFIG# 确保关键配置存在
grep -q "^PasswordAuthentication no" $SSHD_CONFIG || echo "PasswordAuthentication no" >> $SSHD_CONFIG
grep -q "^PubkeyAuthentication yes" $SSHD_CONFIG || echo "PubkeyAuthentication yes" >> $SSHD_CONFIG
grep -q "^PermitRootLogin prohibit-password" $SSHD_CONFIG || echo "PermitRootLogin prohibit-password" >> $SSHD_CONFIGecho "SSH 配置修改完成!"# 重启 SSH 服务
echo "重启 SSH 服务..."
systemctl restart sshd
if [ $? -eq 0 ]; thenecho "SSH 服务重启成功!"
elseecho "SSH 服务重启失败,请检查配置。"exit 1
fiecho "配置完成!root 用户已禁止密码登录,仅支持公钥认证。"# 测试完成提示
echo "请使用以下命令测试登录:"
echo "ssh -i /path/to/private_key root@your_server_ip"

结尾

通过禁用密码登录并启用密钥认证机制,Linux系统能够显著提升其安全性。这种加固措施不仅减少了因密码泄露或猜测而导致的安全风险,还为用户提供了更为便捷和安全的登录体验。当然,为了保持系统的持续安全,用户还应定期更新密钥、监控系统日志以及采取其他必要的安全措施。在数字化转型的浪潮中,让我们共同努力,为构建更加安全、可靠的数字世界贡献力量。

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

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

相关文章

大数据实验E5HBase:安装配置,shell 命令和Java API使用

实验目的 熟悉HBase操作常用的shell 命令和Java API使用; 实验要求 掌握HBase的基本操作命令和函数接口的使用; 实验平台 操作系统:Linux(建议Ubuntu16.04或者CentOS 7 以上);Hadoop版本:3…

【Vivado】xdc约束文件编写

随手记录一下项目中学到的约束文件编写技巧。 时序约束 创建生成时钟 参考链接: Vivado Design Suite Tcl Command Reference Guide (UG835) Vivado Design Suite User Guide: Using Constraints (UG903) 通过Clocking Wizard IP创建的时钟(MMCM或…

Electron + Vue 简单实现窗口程序(Windows)从零到一

前言 想做一个桌面应用程序,一直没有找到简单快速可上手的框架。刚好有点前端的底子,就发现了Electron。关于Electron的介绍,请移步 https://www.electronjs.org/ 查阅。 简单来说,引用官网的话,Electron是一个使用 …

spring boot整合ArtemisMQ进行手动消息确认

1、SpringBoot整合ArtemisMQ进行手动消息确认使用的是: factory.setSessionTransacted(false); factory.setSessionAcknowledgeMode(ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE); 2、SpringBoot整合ActiveMQ进行手动消息确认使用的是: factory.setSe…

健康养生生活

在快节奏的现代生活中,健康养生愈发成为人们关注的焦点。它不仅是一种生活方式,更是对生命质量的珍视与呵护。 健康养生,饮食为先。合理的膳食结构是维持身体健康的基石。我们应确保每餐营养均衡,增加蔬菜、水果、全谷物以及优质蛋…

开源模型应用落地-安全合规篇-用户输入价值观判断(三)

一、前言 在深度合规功能中,对用户输入内容的价值观判断具有重要意义。这一功能不仅仅是对信息合法性和合规性的简单审核,更是对信息背后隐含的伦理道德和社会责任的深刻洞察。通过对价值观的判断,系统能够识别可能引发不当影响或冲突的内容,从而为用户提供更安全、更和谐的…

如何避免数据丢失:服务器恢复与预防策略

在当今数字时代,数据对于个人和企业来说都至关重要。数据丢失可能会导致严重的财务损失、业务中断甚至法律责任。因此,采取措施防止数据丢失至关重要。本文将讨论服务器数据丢失的常见原因以及如何防止数据丢失的有效策略。 服务器数据丢失的常见原因 服…

LeetCode Hot100 11~20

目录 子串11. 滑动窗口最大值12. 最小覆盖子串 数组13. 最大子数组和14. 合并区间15. 翻转数组16. 除数字自身以外的乘积17. 缺失的第一个正数 矩阵18. 矩阵置零19. 螺旋矩阵20 旋转图像90度 子串 11. 滑动窗口最大值 本题使用deque来维护一个单调队列 注意删除元素和添加元素…

网站访问统计A/B测试与数据分析

在网站运营中,访问统计和数据分析是优化用户体验和提高转化率的关键工具。A/B测试作为一种数据驱动的方法,能够帮助网站运营者验证设计和内容的有效性。A/B测试的基本原理是同时展示两个不同的版本(A和B),通过比较它们…

Spring MVC:深入理解与应用实践

前言 Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个…

C学习:移位幻影之左移一个负数,会发生什么?

C学习:移位幻影之左移一个负数,会发生什么? 问题背景无符号数移位问题有符号数移位操作使低位置零问题 问题背景 C语言中,移位是个简单的问题,但又是个高风险的问题。 简单在于,大部分场景都可以理解为乘或…

芯驰X9SP与汽车麦克风-打造无缝驾驶体验

当今汽车技术的进步不仅提升了驾驶体验,还改变了我们与车辆互动的方式。汽车麦克风作为车内语音控制系统的重要组成部分,正逐渐成为现代汽车的标配。 技术原理 汽车麦克风主要依赖于声音传感技术,通常包括电容式麦克风和动圈式麦克风。这些…

tomcat的Mysql链接字符串问题

tomcat配置mysql链接需要改server.xml或content.xml。 但是server.xml或content.xml中mysql的配置看起来很古怪: url"jdbc:mysql://10.21.0.6:3306/hrdatabase?characterEncodinggbk&autoReconnecttrue" 而使用springboot开发java应用,使用ya…

界面控件Syncfusion Essential Studio®现在已完全支持 .NET 9

Syncfusion Essential Studio现在完全支持 .NET 9,可最新版本2024 Volume 3 版本中使用!通过此更新,Blazor、.NET MAUI、WPF、WinForms、WinUI和ASP.NET Core 平台中的 Syncfusion 组件以及文档处理库已准备好让您利用 .NET 9 中的最新功能。…

剑指offer(专项突破)---字符串

总目录:剑指offer(专项突破)---目录-CSDN博客 1.字符串的基本知识 C语言中: 函数名功能描述strcpy(s1, s2)将字符串s2复制到字符串s1中,包括结束符\0,要求s1有足够空间容纳s2的内容。strncpy(s1, s2, n)…

ORB-SLAM2源码学习:MapPoint.cc:MapPoint::UpdateNormalAndDepth()计算平均观测方向以及观测距离范围1

前言 这个函数是属于地图点属性的一部分。 1.函数声明 void MapPoint::UpdateNormalAndDepth() {.... } 2.函数定义 1.获取观测到该地图点的所有关键帧的信息 map<KeyFrame*,size_t> observations;KeyFrame* pRefKF;cv::Mat Pos;{unique_lock<mutex> lock1(…

【JVM什么时候触发YoungGC和FullGC】

YoungGC 年轻代Eden区满&#xff0c;就会触发YoungGC FullGC 老年代空间不足 经过多次GC后的大年龄对象会被放进老年代&#xff0c;或创建的大对象会直接在老年代分配&#xff0c;此时若老年代空间不足&#xff0c;就会触发FullGC。空间分配担保失败 触发YoungGC的时候会进行…

用“*”构成一个倒三角形:JAVA

输入&#xff1a;5 输出&#xff1a; ******* ***** *** * 代码&#xff1a; import java.util.Scanner; //倒三角 public class FF6 {public static void main(String[] args) {Scanner scannernew Scanner(System.in);while (scanner.hasNextInt()){int nscanner…

充分统计量(Sufficient Statistic)概念与应用: 中英双语

充分统计量&#xff1a;概念与应用 在统计学中&#xff0c;充分统计量&#xff08;Sufficient Statistic&#xff09; 是一个核心概念。它是从样本中计算得出的函数&#xff0c;能够完整且无损地表征样本中与分布参数相关的信息。在参数估计中&#xff0c;充分统计量能够帮助我…

ubuntu环境下安装electron环境,并快速打包

1.配置镜像源 关闭防火墙&#xff0c;命令&#xff1a;sudo ufw disable 1.1配置国内镜像源&#xff1a; vim /etc/apt/source.list deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ jammy main…