0

0

如何限制Linux用户SSH访问 sshd_config配置方法

P粉602998670

P粉602998670

发布时间:2025-07-08 09:08:02

|

378人浏览过

|

来源于php中文网

原创

要限制linux用户ssh访问,核心方法是编辑/etc/ssh/sshd_config文件并重启ssh服务。1. 推荐使用allowusers或allowgroups设置白名单,仅允许特定用户或用户组ssh登录;2. 可用denyusers或denygroups黑名单机制禁止特定用户或用户组访问;3. 需注意规则优先级为denyusers > allowusers > denygroups > allowgroups;4. 修改配置后需重启ssh服务使更改生效。此外,还可结合match块实现更细粒度控制、使用chrootdirectory限制用户目录、集成pam增强认证、配合防火墙规则及禁用密码认证等方式进一步提升安全性。

如何限制Linux用户SSH访问 sshd_config配置方法

限制Linux用户SSH访问,主要是通过编辑SSH守护进程的配置文件sshd_config来实现。这包括明确允许或拒绝特定用户或用户组,甚至可以结合更高级的匹配规则来精细控制谁能登录,以及他们登录后能做什么。核心在于利用AllowUsersDenyUsersAllowGroupsDenyGroups这些指令,或者更灵活的Match块。

如何限制Linux用户SSH访问 sshd_config配置方法

解决方案

要限制Linux用户SSH访问,核心操作是编辑/etc/ssh/sshd_config文件,然后重启SSH服务。

如何限制Linux用户SSH访问 sshd_config配置方法

1. 仅允许特定用户或用户组访问: 这是最常见也最推荐的做法,采用白名单机制。

  • 允许特定用户:sshd_config中添加一行(如果已存在,则修改):

    如何限制Linux用户SSH访问 sshd_config配置方法
    AllowUsers user1 user2 admin_user

    这表示只有user1user2admin_user可以SSH登录。所有未列出的用户都将被拒绝。

  • 允许特定用户组: 如果你的用户很多,或者希望基于角色管理访问权限,使用用户组会更方便。

    AllowGroups dev_team ops_team

    这意味着只有属于dev_teamops_team的用户才能SSH登录。

2. 拒绝特定用户或用户组访问: 这种方式是黑名单机制,通常用于禁止少数已知的不应该有SSH权限的用户。

  • 拒绝特定用户:

    DenyUsers guest_user test_account

    guest_usertest_account将无法SSH登录。

  • 拒绝特定用户组:

    DenyGroups guests_group

    属于guests_group的用户将无法SSH登录。

3. 规则优先级:AllowUsersDenyUsersAllowGroupsDenyGroups同时存在时,它们的处理顺序很重要: DenyUsers > AllowUsers > DenyGroups > AllowGroups。 这意味着,如果一个用户在DenyUsers中,即使他也在AllowUsersAllowGroups中,他依然会被拒绝。反之,如果一个用户在AllowUsers中,即使他属于DenyGroups,他依然会被允许。

4. 应用更改: 修改完sshd_config后,必须重启SSH服务才能使配置生效。 对于Systemd系统(如CentOS 7/8, Ubuntu 16.04+):

sudo systemctl restart sshd

对于SysVinit系统(如CentOS 6, Ubuntu 14.04-):

sudo service sshd restart

为什么我们需要限制SSH访问?这不仅仅是安全考量,更是系统管理的艺术

说实话,限制SSH访问,这事儿真不是为了显得我们多“专业”或者“安全狂”,它更多的是一种深思熟虑的系统管理哲学。我个人觉得,这就像给你的房子装门一样,你不会希望谁都能随便进来,对吧?

从最直接的层面讲,当然是安全。未经授权的访问,哪怕只是一个好奇的探头,都可能成为潜在的漏洞。想想那些没完没了的暴力破解尝试,日志里密密麻麻的失败登录记录,看着都心烦。限制了访问者,直接就把大部分噪音给过滤掉了。这不仅仅是防止恶意攻击,更是减少了意外操作的风险。一个不小心,某个没权限的测试账号可能就执行了不该执行的命令,然后……嗯,你就得加班了。

但更深层次的,这其实是“最小权限原则”在实践中的体现。一个用户,他应该只拥有完成他工作所必需的权限,不多也不少。SSH作为远程管理的核心工具,它的权限控制尤为关键。如果每个用户都能SSH到任何服务器,那权限管理就成了一团浆糊。我见过不少团队,因为初期没做好这块,导致后期不得不花大量精力去梳理权限,甚至重构整个访问策略。那真是劳民伤财。

Replit Ghostwrite
Replit Ghostwrite

一种基于 ML 的工具,可提供代码完成、生成、转换和编辑器内搜索功能。

下载

所以,这不仅仅是技术上的一个配置项,它反映的是我们对系统边界的认知,对数据和服务的敬畏。它迫使我们思考:谁真正需要访问?他们需要访问哪些资源?访问的目的是什么?当你把这些问题想清楚了,你的系统架构,包括安全策略,自然而然就变得更清晰、更健壮。这是一种主动的防御,也是一种对未来负责的态度。

sshd_config中限制访问的核心指令有哪些?它们各自的适用场景和潜在坑点

我们刚才提到了AllowUsersDenyUsersAllowGroupsDenyGroups这几条指令,它们确实是sshd_config里控制访问的基石。理解它们的适用场景和那些容易踩的坑,能让你少走很多弯路。

  • AllowUsers

    • 适用场景: 当你需要明确指定少数几个用户可以登录时,比如只有管理员账号或者特定的开发人员账号才能SSH。这是最严格的白名单策略,简洁明了。
    • 潜在坑点: 如果用户列表很长,维护起来会比较麻烦。更要命的是,如果你不小心把自己当前登录的用户排除在外,重启sshd后你就被自己锁在外面了。经验之谈: 永远在测试环境验证,或者至少保持一个控制台会话,或者通过其他方式(比如另一个SSH会话)来验证配置是否生效且没有把自己锁死。
  • DenyUsers

    • 适用场景: 用于排除少数不应该有SSH权限的用户,比如一些服务账号(如www-datanobody)或者临时创建的测试账号。
    • 潜在坑点: 这是黑名单策略,默认是允许所有,只拒绝指定的。如果系统用户很多,你可能无法穷尽所有不应该登录的用户。而且,如果用户改了名,或者创建了新的不安全用户,这个列表可能就需要频繁更新。
  • **AllowGroups

    • 适用场景: 当你需要基于用户组来管理SSH权限时,这非常方便。比如,所有属于developers组的用户都可以SSH。这在企业环境中非常实用,可以与LDAP或AD集成,动态管理用户组。
    • 潜在坑点: 用户可能同时属于多个组。如果一个用户既在AllowGroups允许的组里,又在DenyGroups拒绝的组里,或者被DenyUsers拒绝了,那么优先级规则就显得尤为重要。记住前面提到的优先级:DenyUsers > AllowUsers > DenyGroups > AllowGroups
  • DenyGroups

    • 适用场景: 拒绝特定用户组的SSH访问。比如,禁止所有属于guests组的用户SSH登录。
    • 潜在坑点:DenyUsers,黑名单的通病,容易遗漏。

一个常见的“坑”就是优先级问题。 我见过有人配置了AllowUsers some_user,但这个some_user又恰好属于一个被DenyGroups拒绝的组。结果就是some_user依然能登录,因为AllowUsers的优先级高于DenyGroups。所以,在设计SSH访问策略时,务必先理清你的目标,是白名单(推荐)还是黑名单,然后根据优先级规则来安排你的指令。不要把规则搞得过于复杂,那样只会给自己挖坑。

除了sshd_config,还有哪些高级方法可以进一步强化SSH访问控制?

光靠sshd_config里的Allow/Deny指令,虽然能解决大部分问题,但对于更复杂的场景,我们还有些“高级玩法”来进一步强化SSH访问控制。这些方法往往能提供更细粒度的控制,或者在不同层面提供防护。

1. Match块: 这是sshd_config里一个非常强大的特性,允许你根据用户、组、主机名或IP地址等条件,为特定的连接应用不同的配置规则。

  • 示例:

    Match User restricted_user
        ForceCommand /usr/bin/restricted_script.sh
        X11Forwarding no
        AllowTcpForwarding no
        PermitTTY no
    
    Match Group sftp_users
        ChrootDirectory /var/sftp/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no
        PermitTTY no
        X11Forwarding no
  • 价值: 你可以为特定用户(如restricted_user)强制执行某个命令后立即断开,或者为SFTP用户组(sftp_users)设置chroot环境,并限制他们只能使用SFTP。这极大地提高了灵活性和安全性,确保用户只能做他们被允许做的事情。

2. ChrootDirectory 这个指令在Match块中尤其有用,它能将用户“囚禁”在文件系统的某个特定目录中。用户登录后,他们能看到和操作的只有这个目录及其子目录下的内容。

  • 价值: 对于提供SFTP服务或者给第三方提供有限访问权限的场景,chroot是金标准。它能有效防止用户通过SSH访问到系统其他敏感文件。
  • 挑战: 设置chroot环境并不简单。chroot目录内需要包含用户登录所需的所有必要文件,包括shell、必要的库文件(如/lib, /lib64)、以及一些基本命令(如ls, cd)。这通常需要手动复制或创建符号链接,并且需要确保权限设置正确,否则用户可能无法登录或无法执行任何操作。

3. PAM (Pluggable Authentication Modules) 集成: SSH服务通常会与PAM集成,这意味着你可以利用PAM的强大功能来增强认证和授权。

  • 价值: 你可以通过PAM模块实现更复杂的认证逻辑,比如:
    • 与LDAP、Kerberos等集中式认证系统集成。
    • 实现双因素认证 (2FA)。
    • 根据时间段限制登录。
    • 限制并发登录会话数。
  • 挑战: 配置PAM需要对Linux认证系统有深入了解,错误配置可能导致所有用户都无法登录。

4. 防火墙规则: 虽然不是sshd_config的配置,但防火墙(如firewalld, ufw, iptables)是SSH访问控制的第一道防线。

  • 价值: 你可以直接在网络层面限制哪些IP地址可以尝试连接到SSH端口。例如,只允许来自公司内部IP段的SSH连接,这能有效阻挡来自全球的扫描和暴力破解尝试。
  • 结合使用: 这是一个非常有效的组合拳。先用防火墙过滤掉大部分无效流量,再用sshd_config进行用户级别的精细控制。

5. 禁用密码认证,强制使用密钥认证:

  • 价值: 密钥认证比密码认证安全得多,因为它不容易被暴力破解,而且密钥通常更长、更复杂。禁用密码认证能显著提高安全性。
  • 配置:sshd_config中设置PasswordAuthentication no
  • 注意事项: 确保所有需要登录的用户都已正确配置了SSH公钥,并且私钥管理得当。一旦禁用密码认证,没有密钥的用户将无法登录。

这些高级方法,虽然配置起来可能更复杂一些,但它们为我们提供了更强大的工具来构建一个既安全又灵活的SSH访问体系。选择哪种方法,最终还是取决于你的具体需求和对安全级别的考量。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1352

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

704

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

777

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

573

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

297

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

381

2023.07.25

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

2

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.6万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号