系统加固-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是一个使用 …

健康养生生活

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

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

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

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

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

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

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

界面控件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)…

yarn : 无法加载文件 E:\node\node_global\yarn.ps1,因为在此系统上禁止运行脚本

先确保安装了yarn —— npm install -g yarn 终端输入set-ExecutionPolicy RemoteSigned 若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,请使用以下命令将计算机上的执行策略更改为RemoteSigned 再去使用yarn okk~

python学opencv|读取视频(二)制作gif

【1】引言 前述已经完成了图像和视频的读取学习,本次课学习制作gif格式动图。 【2】教程 实际上想制作gif格式动图是一个顺理成章的操作,完成了图像和视频的处理,那就自然而然会对gif的处理也产生兴趣。 不过在opencv官网、matplotlib官网…

高校心理教育辅导|基于springBoot的高校心理教育辅导系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 随着Internet技术的发展,心理教育辅导系统应运而生&…

网络安全、Web安全、渗透测试之笔经面经总结(一)

本篇文章总结涉及以下几个方面: 一:对称加密非对称加密? 对称加密:加解密用同一密钥,密钥维护复杂n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数据。 非…

Nginx静态资源配置

基本配置原则 明确资源目录:为不同类型的静态资源指定不同的路径,这样可以避免路径冲突,并且便于管理。正确设置文件权限:确保 Nginx 具有读取静态资源的权限。缓存优化:为静态资源设置缓存头(如 expires&…

华为NPU服务器昇腾Ascend 910B2部署通义千问Qwen2.5——基于mindie镜像一路试错版(三)

文章目录 前言纯模型推理启动服务后面干什么?这可咋整啊?愁死了!总结前言 这是咱这个系列的第三个文章了。 毕竟,这是我好几天摸索出的经验,能帮助各位在几个小时内领会,我觉得也算是我的功劳一件了。 所以,一是希望大家耐心看下去,耐心操作下去;而是恳请各位多多关…

Pixtral Large开源:Mistral AI的1240亿参数多模态模型超越GPT-4o等竞争对手

Pixtral Large是什么 Pixtral Large是由法国人工智能初创公司Mistral AI开发的超大多模态模型,拥有1240亿参数,2024年11月18日正式对外发布。它基于Mistral Large 2开发而成,具备1230亿参数的多模态解码器和10亿参数的视觉编码器。这个模型能…

阿里云整理(二)

阿里云整理 1. 访问网站2. 专业名词2.1 域名2.2 域名备案2.3 云解析DNS2.4 CDN2.5 WAF 1. 访问网站 用户使用浏览器访问网站大体分为几个过程: 用户在浏览器输入域名URL,例如www.baidu.com。 不过,浏览器并不知道为该域名提供服务的服务器具…

【联表查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

标贝科技受邀出席2024东湖国际人工智能高峰论坛并入选数据要素合作伙伴名单

近日,备受瞩目的2024东湖国际人工智能高峰论坛在中国光谷科技会展中心隆重召开。会议以“智联世界,共创未来”为主题,省市相关单位、专家学者、产学研各界百余家联合体单位齐聚一堂,共话人工智能领域的最新技术及产业发展趋势。会…

使用AI工具Screenshot to Code将UI设计图翻译成代码

一、获取openAI apikey。 一般有两种方式,一种是到openAI官网注册账号,付费申请GPT4的apikey。另一种是某宝买代理。我这里采用第二种。 二、安装Screenshot to Code 1.到github下载源码。 2.启动,两种方式:源码启动和docker启动…