【学习笔记】Linux系统中SSH服务安全配置

一、背景知识

以ubuntu为例,查看ssh服务是否安全并配置,执行

ssh -V

ssh的配置文件路径:/etc/ssh/sshd_config

二、SSH服务配置文件

1.端口和监听设置

  • Port 22  

    • 含义:指定SSH服务监听的端口号(默认是22)。  

    • 解释:从安全角度,默认端口22容易成为攻击目标,建议改为非标准端口以减少扫描风险。从功能角度,如果启用(如Port 2222),则会改变连接端口。

  • AddressFamily any  

    • 含义:控制SSH服务支持的网络地址族(如IPv4或IPv6)。any表示同时支持IPv4和IPv6。  

    • 解释:从兼容性角度,启用该配置可以确保服务在现代网络中正常工作。从安全角度,如果只使用IPv4,可以设为inet以减少潜在攻击面。

  • ListenAddress 0.0.0.0  

    • 含义:指定SSH服务监听的IPv4地址(0.0.0.0表示所有可用IPv4接口)。  

    • 解释:从安全角度,绑定到特定IP(如192.168.1.100)可以减少暴露面。从功能角度,默认设置方便多网卡环境。

  • ListenAddress : :

    • 含义:指定SSH服务监听的IPv6地址(::表示所有可用IPv6接口)。  

    • 解释:类似IPv4设置,默认启用所有接口便于访问,但从安全角度,建议根据网络需求定制。


2.主机密钥设置

  • HostKey /etc/ssh/ssh_host_rsa_key  

    • 含义:指定RSA算法的主机密钥文件路径,用于服务器身份验证。  

    • 解释:从安全角度,RSA密钥提供强加密,是现代SSH的推荐设置。默认路径确保密钥存储可靠。

  • HostKey /etc/ssh/ssh_host_dsa_key  

    • 含义:指定DSA算法的主机密钥文件路径。  

    • 解释:从安全角度,DSA已过时且易受攻击,不建议启用。功能角度,兼容旧系统,但默认禁用是好的做法。

  • HostKey /etc/ssh/ssh_host_ecdsa_key  

    • 含义:指定ECDSA算法的主机密钥文件路径,提供更强的安全性和效率。    

    • 解释:从性能角度,ECDSA比RSA更快速;从安全角度,它基于椭圆曲线密码学,推荐用于现代系统。

  • HostKey /etc/ssh/ssh_host_ed25519_key  

    • 含义:指定Ed25519算法的主机密钥文件路径,这是一种高性能且安全的密钥类型。  

    • 解释:从安全角度,Ed25519提供顶级保护;从功能角度,它适合高安全环境,如云服务器。


3.加密和密钥设置(Ciphers and Keying)

  • RekeyLimit default none  

    • 含义:定义会话密钥重新生成的限制(如数据量或时间),default表示使用系统默认值,none表示不限制。  

    • 解释:从安全角度,定期重新密钥可防止长期攻击;从性能角度,限制过多可能影响连接速度。默认值通常在安全性和效率间平衡。


4.日志设置

  • SyslogFacility AUTH  

    • 含义:指定日志消息的Syslog工具(facility),AUTH用于认证相关消息。    

    • 解释:从审计角度,启用此配置可帮助记录认证事件,但默认未设置,需结合其他配置。

  • SyslogFacility AUTHPRIV  

    • 含义:指定日志消息的Syslog工具为AUTHPRIV(私有认证消息),提供更安全的日志记录。    

    • 解释:从安全角度,AUTHPRIV比AUTH更安全,因为它限制日志访问权限;从功能角度,便于管理员审计SSH事件。

  • LogLevel INFO  

    • 含义:设置日志详细级别,INFO显示常规信息(如连接和认证)。   

    • 解释:从监控角度,INFO级足够日常使用;从性能角度,更高级别(如DEBUG)可能产生大量日志,影响磁盘空间。


5.认证设置(Authentication)

  • LoginGraceTime 2m  

    • 含义:定义用户登录尝试的超时时间(默认2分钟),超时后连接关闭。  

    • 解释:从安全角度,短超时(如1分钟)可防暴力攻击;从可用性角度,默认值避免合法用户因延迟被踢出。

  • PermitRootLogin yes  

    • 含义:控制是否允许root用户直接登录。yes表示允许。  

    • 解释:从安全角度,设为no或without-password(仅密钥登录)可大幅降低风险;从管理角度,默认可能允许root登录,但不推荐。

  • StrictModes yes  

    • 含义:检查用户密钥文件的权限(如.ssh目录必须为700),防止未授权访问。  

    • 解释:从安全角度,启用此选项可防止密钥泄露;功能角度,确保文件权限正确。

  • MaxAuthTries 6  

    • 含义:设置每个连接允许的最大认证尝试次数(默认6次)。  

    • 解释:从安全角度,减少此值(如3次)可防暴力破解;从误操作角度,默认值避免合法用户被锁出。

  • MaxSessions 10  

    • 含义:限制每个网络连接允许的并发会话数(默认10)。  

    • 解释:从资源角度,控制会话数可防DoS攻击;从功能性角度,默认值适合多数场景。

  • PubkeyAuthentication yes  

    • 含义:启用公钥认证(基于密钥对登录)。  

    • 解释:从安全角度,公钥认证比密码更安全;功能角度,它是SSH的主要登录方式。

  • AuthorizedKeysFile .ssh/authorized_keys  

    • 含义:指定用户公钥存储文件的位置(默认.ssh/authorized_keys)。  

    • 解释:从安全角度,固定路径便于管理;功能角度,简化密钥部署。

  • AuthorizedPrincipalsFile none  

    • 含义:定义基于角色的认证文件(如用于多用户管理),none表示禁用。  

    • 解释:从管理角度,此配置适用于复杂环境;安全角度,默认禁用减少攻击面。

  • AuthorizedKeysCommand none  

    • 含义:指定外部命令来获取授权密钥,none表示禁用。    

    • 解释:功能角度,启用此选项可实现动态密钥管理;安全角度,外部命令可能引入风险。

  • AuthorizedKeysCommandUser nobody  

    • 含义:设置运行AuthorizedKeysCommand的用户(默认nobody)。  

    • 解释:从权限角度,指定低权限用户可增强安全;默认未启用,因为主命令未启用。

  • HostbasedAuthentication no  

    • 含义:控制基于主机的认证(信任其他主机),no表示禁用。  

    • 解释:从安全角度,此方法风险高(易受IP欺骗),不建议启用;功能角度,仅用于特殊信任环境。

  • IgnoreUserKnownHosts no  

    • 含义:是否忽略用户的~/.ssh/known_hosts文件(用于主机验证),no表示不忽略。  

    • 解释:从安全角度,启用此选项(设为yes)可防某些攻击,但会降低便利性;功能角度,默认保持主机验证。

  • IgnoreRhosts yes  

    • 含义:是否忽略用户的.rhosts和.shosts文件(旧式认证),yes表示忽略。    

    • 解释:从安全角度,这些文件易被滥用,默认忽略是好的;历史兼容角度,仅在旧系统可能启用。

  • PasswordAuthentication yes  

    • 含义:启用密码认证(用户输入密码登录)。  

    • 解释:冗余行,实际设置由未注释行控制。

  • PasswordAuthentication yes  

    • 含义:启用密码认证。  

    • 解释:从安全角度,密码认证易受暴力破解,建议禁用(设为no)并改用密钥;从可用性角度,启用便于用户初始登录。

  • PermitEmptyPasswords no  

    • 含义:禁止空密码登录,no表示不允许。  

    • 解释:从安全角度,空密码是严重漏洞,默认禁用是必须的。

  • ChallengeResponseAuthentication yes  

    • 含义:启用挑战-响应认证(如一次性密码)。  

    • 解释:冗余行,实际设置由未注释行控制。

  • ChallengeResponseAuthentication no  

    • 含义:禁用挑战-响应认证。    

    • 解释:从安全角度,禁用此选项可简化认证流程;功能角度,如果启用,需额外配置(如PAM)。

  • GSSAPIAuthentication yes  

    • 含义:启用GSSAPI认证(基于Kerberos或类似协议)。   

    • 解释:从安全角度,GSSAPI提供强企业级认证;从集成角度,适用于Active Directory环境。

  • GSSAPICleanupCredentials no  

    • 含义:控制是否在会话结束时清理GSSAPI凭据,no表示不清理。    

    • 解释:从安全角度,清理凭据可防泄露;功能角度,设为no可能提高便利性(如保持单点登录)。

  • GSSAPIStrictAcceptorCheck yes  

    • 含义:严格检查GSSAPI服务名称,yes表示启用严格模式。  

    • 解释:从安全角度,启用可防中间人攻击;性能角度,严格检查可能增加开销。

  • GSSAPIKeyExchange no 和 GSSAPIEnablek5users no  

    • 含义:控制GSSAPI在密钥交换或用户映射中的使用,no表示禁用。    

    • 解释:功能角度,仅在需要Kerberos集成时启用;安全角度,默认禁用避免复杂配置错误。


6.PAM设置

  • UsePAM yes  

    • 含义:启用PAM认证框架,允许集成系统级认证策略。  

    • 解释:从安全角度,PAM支持多因子认证和账户锁定;从功能性角度,它覆盖密码和挑战响应认证(如文本中警告所述),并处理账户与会话管理。警告提到在Red Hat系统中禁用PAM可能导致问题,因此启用是推荐的。


7.转发和X11设置

  • AllowAgentForwarding yes  

    • 含义:允许SSH代理转发(转发本地密钥到远程主机)。  

    • 解释:从便利角度,转发便于跳板机访问;安全角度,可能被滥用,建议在受控环境启用。

  • AllowTcpForwarding yes  

    • 含义:允许TCP端口转发(创建隧道)。  

    • 解释:功能角度,启用便于VPN-like功能;安全角度,转发可能被用于绕过防火墙。

  • GatewayPorts no  

    • 含义:控制转发端口是否绑定到所有接口(no表示仅本地)。  

    • 解释:从安全角度,设为no可防止外部访问转发端口;功能角度,设为yes允许远程共享端口。

  • X11Forwarding yes  

    • 含义:启用X11图形界面转发(显示远程GUI应用)。  

    • 解释:从功能性角度,便于远程桌面;安全角度,X11转发有历史漏洞,建议仅在需要时启用。

  • X11DisplayOffset 10  

    • 含义:设置X11显示端口的偏移量(默认10)。  

    • 解释:功能角度,偏移防止端口冲突;性能角度,默认值通常足够。

  • X11UseLocalhost yes  

    • 含义:绑定X11转发到localhost(仅本地访问)。  

    • 解释:安全角度,绑定localhost可减少网络暴露;默认启用是好的。

  • PermitTTY yes  

    • 含义:允许分配TTY(终端)


三、SSH服务安全配置

1.基础安全配置

(1)修改默认端口
将默认 22 端口改为高位端口(如 1024 以上),降低扫描攻击风险

Port 2222  # 在 /etc/ssh/sshd_config 中修改 

(2)强制使用 SSH-2 协议

禁用不安全的 SSH-1,仅保留最新协议版本:Protocol 2 

(3)限制监听地址

仅绑定必要的内网或特定 IP,减少暴露面:

ListenAddress 192.168.1.100  # 非必要不监听 0.0.0.0

2.认证机制强化

(1)禁用密码认证
全面启用密钥认证,规避暴力破解风险

PasswordAuthentication no 

PubkeyAuthentication yes 

(2)双因素认证(2FA)

结合 Google Authenticator 等工具实现动态验证码+密钥的双重验证

安装 libpam-google-authenticator 后配置
ChallengeResponseAuthentication yes AuthenticationMethods publickey,keyboard-interactive 

(3)禁止 root 直接登录
强制使用普通用户登录后提权:

PermitRootLogin no

3.访问控制策略

(1)用户/IP 白名单
仅允许指定用户或 IP 段访问,例如:

AllowUsers user1 user2@192.168.*.*  # 支持通配符

(2)防火墙规则
使用云平台安全组或 ufw/iptables 限制 SSH 端口的来源 IP:

sudo ufw allow from 192.168.1.0/24 to any port 2222

(3)登录频率限制

通过 Fail2ban 自动封禁异常 IP(如 30 秒内 3 次失败尝试)

4.高级安全参数

(1)会话超时控制
自动断开无响应连接,防止闲置会话占用资源:

ClientAliveInterval 300  # 300 秒检测一次 
ClientAliveCountMax 3

(2)权限分离与日志监控

UsePrivilegeSeparation yes  # 隔离特权操作 
LogLevel VERBOSE  # 记录详细日志

(3)禁用非必要功能
关闭图形转发和空密码登录:

X11Forwarding no 

PermitEmptyPasswords no

5.密钥管理与维护

(1)密钥生成规范

使用高强度算法生成密钥对:

ssh-keygen -t ed25519 -a 100  # 或 RSA-4096

(2)密钥定期轮换

建议每 6-12 个月更换一次密钥,并清理废弃公钥。

(3)文件权限控制

chmod 600 ~/.ssh/authorized_keys  # 用户密钥严格权限

(4)补充工具推荐

SSH 客户端安全配置:在 ~/.ssh/config 中指定私钥路径和保活参数:

ServerAliveInterval 60  # 防止 NAT 超时

SELinux/AppArmor:启用强制访问控制框架限制 SSH 进程权限

---

参考文献:

Linux系统中的SSH服务配置详解与安全配置

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

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

相关文章

FastAPI + Tortoise-ORM + Aerich 实现数据库迁移管理(MySQL 实践)

在 FastAPI 项目中,Tortoise-ORM 是一个轻量的异步 ORM 框架,适用于 async/await 场景。结合数据库迁移工具 Aerich,可以优雅地管理数据库表结构演进,本文将通过完整流程演示如何在 MySQL 环境下使用。📦 一、环境准备…

7.7日 实验03-Spark批处理开发(2)

使用Spark处理数据文件检查数据检查$DATA_EXERCISE/activations里的数据&#xff0c;每个XML文件包含了客户在指定月份活跃的设备数据。拷贝数据到HDFS的/dw目录样本数据示例&#xff1a;<activations><activation timestamp"1225499258" type"phone&q…

C语言可变参数感悟

#include <stdio.h> #include <stdarg.h> #if 1 /* *在C语言中&#xff0c;可变参函数是指参数数量不固定的函数&#xff0c;比如printf\scanf *可变参函数的语法&#xff1a; *返回类型 函数名&#xff08;固定函数&#xff0c;.....) { //函数体 } *1、包含头文件…

LeetCode 1248.统计优美子数组

给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字&#xff0c;我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数目。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2,1,1], k 3 输出&#xff1a;2 解释&#xf…

FastAPI Docker环境管理脚本使用指南

作者: 源滚滚AI编程 创建时间: 2025年07月08日 版本: v1.0.0 文档状态: 完成 版权声明 本文档由源滚滚AI编程创作,版权所有。未经作者书面许可,不得复制、分发或用于商业用途。 免责声明 本文档仅用于技术交流和学习目的。作者不对使用本文档内容导致的任何问题承担责任。…

前端常见 HTTP 状态码

作为前端开发者&#xff0c;与后端 API 交互时&#xff0c;HTTP 状态码是判断请求成败的关键信号。理解常见状态码的含义、责任归属及应对策略&#xff0c;能极大提升调试效率和团队协作。以下是关键状态码的详细解析&#xff1a; 首先说一下如何查看状态码&#xff1a; 如上图…

深度解析C语言内存函数(小米面试题)

目录 一、memcpy1.1 代码演示1.2 memcpy的模拟实现 二、memmove2.1 代码演示2.2 模拟实现&#xff08;小米面试题&#xff09; 三、memset3.1 代码演示3.2 总结 四、memcmp4.1 代码演示4.2 总结 总结 一、memcpy &#xff08;memory copy 内存复制&#xff09; 之前文章中写的…

DK124反激式开关电源芯片

18W 高性能交直流转换芯片 特性 DK124 是一款离线式开关电源芯片&#xff0c;最大输出功率达到 24W。内部集成了 PWM 控制器、700V 功率管和初级峰值电流检测电路&#xff0c;并采用了可以省略辅助供电绕组的专利自供电技术&#xff0c;极大简化了外围应用电路&#xff0c;减…

商品销售数据分析实验

进入虚拟机&#xff0c;启动HDFS和Yarn1.创建表 hive show databases; use test;销售订单表create table t_dml (detail_id bigint,sale_date date, province string,city string,product_id bigint,cnt bigint,amt double )row format delimited fields terminated by ,;商品…

PH热榜 | 2025-07-08

1. TensorBlock Forge 标语&#xff1a;人工智能模型的API 介绍&#xff1a;Forge是一个快速且安全的工具&#xff0c;让你可以跨不同供应商连接和运行AI模型 产品网站&#xff1a; 立即访问 Product Hunt&#xff1a; View on Product Hunt 票数&#xff1a; &#x1f53a…

2025-01)electronjs-v11.2.0升级到新版本electronjs-v37.2.0记录,node版本记录,淘宝镜像配置记录,升级记录

背景:由于22年使用electronjs开发的自助机客户端几年没去维护,现在有需求要修改,电脑也换新了,node环境也没,直接把electron从 之前的 11.2.0 版本 升级到了37.2.0版本,升级最主要的目的是升级谷歌浏览器内核,升级后谷歌浏览器内核直接从87升级到了138,可以支持谷歌最新…

iQOO手机怎样相互远程控制?其他手机可以远程控制iQOO吗?

iQOO是Vivo同一品牌下的产品&#xff0c;它们两款手机都可以使用手机内置的远程控制功能。具体做法是&#xff0c;打开控制端的iQOO手机的【设置】【快捷与辅助】、【远程协助】&#xff0c;然后输入被控端的电话号码&#xff0c;等被控端的手机接受远程协助后&#xff0c;就可…

【入门级-C++程序设计:3、程序基本语句-多层循环语句】

1、定义&#xff1a; 在 C 中&#xff0c;多层循环&#xff08;嵌套循环&#xff09;是指在一个循环体内包含另一个或多个循环语句。它常用于处理多维数据结构&#xff08;如二维数组&#xff09;、复杂的迭代逻辑&#xff08;如矩阵运算、图形打印、组合遍历等&#xff09;。多…

四、jenkins自动构建和设置邮箱

一、jenkins自动构建什么自动构建、有啥用&#xff1a;触发方式代码提交&#xff08;Git push&#xff09;定时任务&#xff08;如每天凌晨构建&#xff09;手动点击等方式&#xff08;立即执行&#xff09;执行内容从 Git/SVN 拉取最新代码运行编译&#xff08;如 Maven/Gradl…

【深度学习新浪潮】深入解析LLM关键概念:架构、优化与最新研究进展

1. Transformer架构与注意力机制 概念解析 Transformer是LLM的核心架构,由编码器和解码器组成,其核心创新是自注意力机制,通过计算输入序列中每个位置的关联权重,动态聚焦关键信息。自注意力机制的计算复杂度为O(n),在处理长序列时成为性能瓶颈。 代码示例:基础Transfo…

RAGflow图像解析与向量化分析

RAGflow图像解析与向量化分析 注:需要提前部署好ragflow,才方便一 一对应代码,部署教程:rag部署教程,这样才会方便后续更改 1. 图像解析流程 RAGflow通过多种解析器处理不同类型的文档,其中图像解析是一个重要组成部分。以下是RAGflow处理图像的主要流程: 1.1 PDF文…

千翼破界,百景赋能 | 2025深圳eVTOL展无人机场景应用专场即将启幕

在技术革新、应用深化、产业链协同升级及低空空域管理改革等多重政策红利驱动下&#xff0c;我国工业级无人机产业正迈入爆发式增长新阶段&#xff0c;持续引领民用无人机市场繁荣。数据显示&#xff0c;2019 至2024年&#xff0c;我国民用无人机市场规模从435.1亿元跃升至1108…

Go语言标识符命名规则详解:工程化实践

引言 Go语言的命名规则是其简洁哲学和工程实用性的集中体现。下面从语法规范、最佳实践到实际应用进行全面解析&#xff1a; 一、基础命名规则 1. 变量命名 // 小驼峰式&#xff08;lowerCamelCase&#xff09; var userName string var maxRetryCount 3 var isConnected bool…

RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?

第一篇&#xff1a;开篇&#xff1a;为什么RISC-V是颠覆性创新&#xff1f; 打破70年架构垄断&#xff0c;开源硬件如何重塑芯片产业规则&#xff1f;一、传统架构的“围城之困”&#xff08;痛点切入&#xff09; ARM/X86的统治代价 授权费暴利模型 &#xff1a; ARM指令集授权…

【机器学习笔记 Ⅱ】7 多类分类

1. 多类分类&#xff08;Multi-class Classification&#xff09; 定义 多类分类是指目标变量&#xff08;标签&#xff09;有超过两个类别的分类任务。例如&#xff1a; 手写数字识别&#xff1a;10个类别&#xff08;0~9&#xff09;。图像分类&#xff1a;区分猫、狗、鸟等。…