Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
chef-ssh-hardening — 这本 chef cookbook 提供了安全的 ssh-client 和 ssh-server 配置。 | Kitploit
工具/GitHubGitHub/dev-sec/chef-ssh-hardening
云基础设施安全配置审计网络安全DevSecOps身份验证
GitHubdev-sec/chef-ssh-hardening

chef-ssh-hardening

这本 chef cookbook 提供了安全的 ssh-client 和 ssh-server 配置。

查看仓库
1686697天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

ssh-hardening(Chef cookbook)

Supermarket Build Status Code Coverage Gitter Chat

描述

该 cookbook 提供安全的 ssh-client 和 ssh-server 配置。此 cookbook 不提供用户和/或 SSH 密钥的管理功能,请使用其他 cookbook 来实现。

要求

  • Chef >= 14.13.11

平台

  • Debian 8, 9, 10
  • Ubuntu 16.04, 18.04
  • RHEL 6, 7
  • CentOS 6, 7
  • Oracle Linux 6, 7
  • Fedora 29, 30
  • OpenSuse Leap 42
  • Amazon Linux 1, 2

属性

下面您可以找到属性文档及其默认值。

注意:此 cookbook 的部分属性默认值在 recipes 中设置。您应使用更高的属性优先级级别来覆盖此类属性。此类属性在下面的列表中标记为 #override attribute#。覆盖此类属性的示例:

root@kitploit:~
override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
  • ['ssh-hardening']['network']['ipv6']['enable'] - false。如果需要 IPv6,请设置为 true
  • ['ssh-hardening']['ssh']['ports'] - 22。ssh-server 应监听的端口以及 ssh-client 应连接的端口
  • ['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil 以根据服务器版本计算最佳密钥交换(KEX),否则指定一个 Kex 值字符串
  • ['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil 以根据服务器版本计算最佳消息认证码(MACs),否则指定一个 Mac 值字符串
  • ['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil 以根据服务器版本计算最佳密码套件,否则指定一个 Cipher 值字符串
  • ['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - false。如果密码套件需要 CBC,请设置为 。这通常仅在较旧的 M2M 机制需要与 SSH 通信时才必要,这些机制未启用任何已配置的安全密码套件。CBC 是一种较弱的替代方案。任何更弱的方案都应避免,因此不可用。

用法

将 recipes 添加到 run_list:

root@kitploit:~
"recipe[ssh-hardening]"

这将安装 ssh-server 和 ssh-client。您也可以仅选择其中一个:

root@kitploit:~
"recipe[ssh-hardening::server]"
"recipe[ssh-hardening::client]"

配置属性:

root@kitploit:~
"ssh-hardening": {
  "ssh" : {
    "server" : {
      "listen_to" : "10.2.3.4"
    }
  }
}

listen_to 的默认值为 0.0.0.0。强烈建议更改该值。

SFTP

要启用 SFTP 配置,请将以下 recipes 之一添加到 run_list:

root@kitploit:~
"recipe[ssh-hardening]"
或
"recipe[ssh-hardening::server]"

配置属性:

root@kitploit:~
"ssh-hardening": {
  "ssh" : {
    "server": {
      "sftp" : {
      "enable" : true,
      "chroot" : "/home/sftp/%u",
      "group"  : "sftusers"
    }
    }
  }
}

这将启用 SFTP 服务器,并将 sftpusers 组中的每个用户 chroot 到 /home/sftp/%u 目录。

额外配置选项

可以将额外的配置选项附加到客户端或服务器配置文件中。这可用于覆盖静态设置的值,或添加通过属性无法获得的配置选项。

语法如下:

root@kitploit:~
# => 额外服务器配置
default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
  extra['#Some Comment'] = 'Heres the Comment'
  extra['AuthenticationMethods'] =  'publickey,keyboard-interactive'
end

# => 额外客户端配置
default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
  extra['PermitLocalCommand'] = 'no'
  extra['Tunnel'] =  'no'
end

sshd 的 Match 配置选项

Match 块必须放置在 sshd_config 的末尾。这可以通过使用 match_blocks 属性树来实现:

root@kitploit:~
default['ssh-hardening']['ssh']['server']['match_blocks'].tap do |match|
  match['User root'] = <<~ROOT
    AuthorizedKeysFile .ssh/authorized_keys
  ROOT
  match['User git'] = <<~GIT
    Banner none
    AuthorizedKeysCommand /bin/false
    AuthorizedKeysFile .ssh/authorized_keys
    GSSAPIAuthentication no
    PasswordAuthentication no
  GIT
end

本地测试

请安装 chef-dk、VirtualBox 或 VMware Workstation 以及 Vagrant。

使用 rubocop 和 foodcritic 检查代码风格:

root@kitploit:~
$ chef exec rake lint
.....

单元/规范测试使用 chefspec 完成:

root@kitploit:~
$ chef exec rake spec
.....

集成测试使用 test-kitchen 和 inspec 完成:

root@kitploit:~
$ chef exec rake kitchen
.....
# 或者您可以直接使用 kitchen
$ kitchen test

常见问题 / 陷阱

我无法登录我的账户。我已经注册了客户端密钥,但仍然无法登录。

如果您已经排查了所有典型问题(防火墙、网络、密钥缺失、密钥错误、账户禁用等),可能是您的账户被锁定了。最快的排查方法是查看您用户的密码哈希:

root@kitploit:~
sudo grep myuser /etc/shadow

如果哈希中包含 !,则您的账户已被锁定:

root@kitploit:~
myuser:!:16280:7:60:7:::

正确的解决方法是解锁账户(passwd -u myuser)。如果该用户没有密码,您可以通过以下方式解锁:

root@kitploit:~
usermod -p "*" myuser

或者,如果您打算使用 PAM,您可以通过 ['ssh-hardening']['ssh']['use_pam'] = true 启用它。PAM 将允许被锁定的用户使用密钥登录。

为什么我的应用程序无法再通过 SSH 连接?

始终先查看日志文件,如果可能,查看连接时客户端与服务器之间完成的协商过程。

我们遇到过一些应用程序(基于 python 和 ruby)的问题,这是由于它们使用了过时的加密套件。这与本加固模块相冲突,该模块将密码套件、消息认证码(MACs)和密钥交换(KEX)算法的列表缩减为更安全的选择。

如果您发现这还不够,请根据您希望支持的位置,在命名空间 ['ssh-hardening']['ssh']['client'] 或 ['ssh-hardening']['ssh']['server'] 中激活属性 cbc_requires(用于密码套件)、weak_hmac(用于 MACs)和 weak_kex(用于 KEX)。

为什么我将用户添加到我的 SFTP 组后无法登录 SFTP 服务器?

这是 ChrootDirectory 所有权问题。sshd 将拒绝为被设置为 chroot 到任何 sshd 认为所有权/权限不安全的目录的账户提供 SFTP 连接。sshd 严格的所有权/权限要求规定,chroot 路径中的每个目录都必须由 root 拥有,并且仅所有者可写。因此,例如,如果 chroot 环境是 /home,则 /home 必须由 root 拥有。

请参见 https://wiki.archlinux.org/index.php/SFTP_chroot

贡献者 + 致谢

  • Dominik Richter arlimus
  • Christoph Hartmann chris-rock
  • Bernhard Weisshuhn(又名 bernhorst)bkw
  • Patrick Munch atomic111
  • Edmund Haselwanter ehaselwanter
  • Dana Merrick dmerrick
  • Anton Rieder aried3r
  • Trent Petersen Rockstar04
  • Petri Sirkkala sirkkalap
  • Jan Klare jklare
  • Zac Hallett zhallett
  • Petri Sirkkala sirkkalap
  • stribika
  • Siddhant Rath sidxz

此 cookbook 主要基于以下指南:

  • NSA: Guide to the Secure Configuration of Red Hat Enterprise Linux 5
  • Deutsche Telekom, Group IT Security, Security Requirements (German)

感谢所有人!!

贡献

请参见贡献者指南。

许可证与作者

  • 作者:: Dominik Richter [email protected]
  • 作者:: Deutsche Telekom AG

根据 Apache License, Version 2.0("许可证")授权; 除非遵守许可证,否则您不得使用此文件。 您可以在以下位置获取许可证副本:

root@kitploit:~
http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件按"原样"分发, 不附带任何明示或暗示的保证或条件。 请参阅许可证以了解管理权限和限制的具体语言。

下载工具
true
  • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false。如果需要较弱的 HMAC 机制,请设置为 true。这通常仅在较旧的 M2M 机制需要与 SSH 通信时才必要,这些机制未启用任何已配置的安全 HMAC。
  • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false。如果需要较弱的密钥交换(KEX)机制,请设置为 true。这通常仅在较旧的 M2M 机制需要与 SSH 通信时才必要,这些机制未启用任何已配置的安全 KEX。
  • ['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - ssh-client 可以连接的一个或多个主机。
  • ['ssh-hardening']['ssh']['client']['password_authentication'] - false。如果应启用密码认证,请设置为 true。
  • ['ssh-hardening']['ssh']['client']['roaming'] - false。如果应启用实验性客户端漫游,请设置为 true。已知这可能导致机密信息泄露给恶意服务器的潜在问题,默认情况下处于禁用状态。
  • ['ssh-hardening']['ssh']['client']['extras'] - {}。添加额外的配置选项,详情请参见下文
  • ['ssh-hardening']['ssh']['server']['host_key_files'] - nil 以根据服务器版本计算最佳主机密钥配置,否则指定一个文件路径数组(例如 /etc/ssh/ssh_host_rsa_key)
  • ['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - /etc/ssh/moduli 中可接受的最小素数长度(以位为单位)。低于此数字的素数将被移除。(更多信息和背景请参见此处)
  • ['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - 是否应构建自己的素数。此重建仅发生一次,且需要大量时间(在现代硬件上生成 4096 长度约需 1.5 - 2 小时)。
  • ['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - 应生成的素数长度。此选项仅在启用 dh_build_primes 时有效。
  • ['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - ssh-server 应监听的一个或多个 IP 地址。默认监听所有接口。出于安全原因,应进行配置!
  • ['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false 以完全禁用 root 登录。设置为 true 以允许 root 通过基于密钥的机制登录
  • ['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false。设置为 true 以允许 TCP 转发
  • ['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false。设置为 true 以允许代理转发
  • ['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false。设置为 true 以允许 X11 转发
  • ['ssh-hardening']['ssh']['server']['permit_tunnel'] - false 以禁用 tun 设备转发。设置为 true 以允许 tun 设备转发。其他可接受的值:'yes'、'no'、'point-to-point'、'ethernet'。具体行为请参见 man sshd_config。注意:您还需要启用 allow_tcp_forwarding。
  • ['ssh-hardening']['ssh']['server']['use_pam'] - true。设置为 false 以禁用 sshd 的 pam 认证
  • ['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false。设置为 true 以启用质询响应认证。
  • ['ssh-hardening']['ssh']['server']['deny_users'] - [] 以配置 DenyUsers,如果指定,则与任一模式匹配的用户名将被禁止登录。
  • ['ssh-hardening']['ssh']['server']['allow_users'] - [] 以配置 AllowUsers,如果指定,则仅允许与任一模式匹配的用户名登录。
  • ['ssh-hardening']['ssh']['server']['deny_groups'] - [] 以配置 DenyGroups,如果指定,则主组或附加组列表与任一模式匹配的用户将被禁止登录。
  • ['ssh-hardening']['ssh']['server']['allow_groups'] - [] 以配置 AllowGroups,如果指定,则仅允许主组或附加组列表与任一模式匹配的用户登录。
  • ['ssh-hardening']['ssh']['server']['print_motd'] - false。设置为 true 以启用 MOTD 的打印
  • ['ssh-hardening']['ssh']['server']['print_last_log'] - false。设置为 true 以启用上次登录信息的打印
  • ['ssh-hardening']['ssh']['server']['banner'] - nil。设置类似 '/etc/issue.net' 的路径以启用横幅
  • ['ssh-hardening']['ssh']['server']['os_banner'] - false 以在协议握手期间禁用版本信息(仅限 Debian 系列)。设置为 true 以启用
  • ['ssh-hardening']['ssh']['server']['use_dns'] - nil 以使用 openssh 默认值。设置为 true 或 false 以启用/禁用远程主机的 DNS 查找和检查
  • ['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil 以根据服务器版本计算最佳值,否则设置为 true 或 false
  • ['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s。登录应在该时间内成功,否则用户将被断开连接。
  • ['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2。每次连接的认证尝试次数
  • ['ssh-hardening']['ssh']['server']['max_sessions'] - 10 每次连接的会话数
  • ['ssh-hardening']['ssh']['server']['password_authentication'] - false。如果应启用密码认证,请设置为 true
  • ['ssh-hardening']['ssh']['server']['log_level'] - verbose。sshd 的日志级别。可能的值请参见 man 5 sshd_config 中的 LogLevel。
  • ['ssh-hardening']['ssh']['server']['sftp']['enable'] - false。设置为 true 以启用 OpenSSH 守护进程的 SFTP 功能
  • ['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly。设置 SFTP 的 Match Group 选项,以仅允许专用用户使用 SFTP
  • ['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u。设置 SFTP 用户应被 chroot 的目录
  • ['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil。如果不为 nil,则为将设置在 Match Group 内用于仅 SFTP 访问的一个或多个空格分隔的 authorized keys 文件的完整路径
  • ['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false。如果应启用密码认证,请设置为 true
  • ['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil。如果不为 nil,则期望一个或多个空格分隔的 authorized keys 文件的完整路径。
  • ['ssh-hardening']['ssh']['server']['extras'] - {}。添加额外的配置选项,详情请参见下文
  • ['ssh-hardening']['ssh']['server']['match_blocks'] - {}。匹配配置块,详情请参见下文