如同世界正在经历的疫情,由于网络攻击的大幅增加,许多公司也遭受着“网络疫情”,保障代码安全迫在眉睫。在之前的文章中我们了解了安全使用 GitHub 的21条最佳实践。阅读本文,将带您了解在代码发布到 GitHub 之前如何管理用户权限。

1. 了解您的 GitHub 账户类型

GitHub 有三个帐户类型,其访问控制量不等。

  • 个人帐户:此帐户仅允许一个所有者添加项目协作者。

  • 组织帐户:此帐户类型根据团队结构控制访问权限。它允许跨多个团队成员进行更详细的访问。

  • 企业帐户:此帐户类型包括可跨多个组织的强大访问控制。为了提高安全性,它提供了一个本地托管选项。此选项可确保 GitHub 存储库在没有安全的企业网络虚拟专用网络访问下无法在互联网上进行访问。

了解您的开发团队拥有哪种类型的帐户,以便您可以充分利用所有可用的访问权限。

2. 集中访问管理

将访问权限和权限集中给管理员可以简化外部协作者的管理,还可以降低 GitHub 访问成本。

GitHub 服务器访问

GitHub 为开发提供以下类型的访问权限。根据开发人员角色设置访问级别。

  • 阅读:使开发人员可以查看和 Clone 代码库,同时不能对代码进行更改。

  • 分类:使开发人员能够在没有写入访问权限的情况下管理拉取请求。

  • 写入:使开发人员能够同时将新代码提交到存储库。

  • 维护:无需授予访问敏感操作权限,使项目经理能够监督代码库。

  • 管理:使开发人员能够完全控制代码库,包括保障安全性和删除代码库。

避免根据需求设置访问权限。虽然在短期内很方便,但随着项目的发展和时间的推移,项目中的角色和职位可能会发生变化。为了最大化访问安全,请指定一个人来专门处理和授予项目所需的最低权限。

组织管理访问

如果您拥有组织所有者帐户,则可以将新用户添加到存储库并控制其访问级别。您需要确定组织的基本权限配置文件。当您将新成员添加到 GitHub 存储库时,将自动应用基本权限。默认情况下,为了获得最大的安全性,请确保基本权限仅有读取访问权限。仅在需要时授予更广泛的访问权限。

3. 保护您的代码库

根据2019年发布的一项研究,对公共 GitHub 代码库的全面扫描发现该平台上共有超过57万个敏感数据实例。这些实例包括 API 密钥、私有密钥、OAuth ID、AWS 访问密钥 ID 和各种访问 token。这些类型暴露的主要风险包括经济损失、隐私泄露、数据完整性受损以及信息滥用。尝试执行以下做法来保护您的代码库。

限制代码库可见性

配置不当的服务器或访问权限配置不当的开发人员可能会不小心更改代码库的可见性。要避免这种情况并确保最大安全性,请将代码库可见性更改限制为组织的所有者帐户或项目的管理员级别。

实施单点登录

具有 GitHub Enterprise 的组织可以使用单节点登录(Single Sign-On, SSO)。借助 SSO,组织可以使用自己的帐户和访问权限规则,而无需开发人员使用 GitHub 帐户。SSO 可限制潜在的人为错误和密码重用问题。

禁用分叉(fork)

通过有限的只读访问权限,开发人员可以使用 fork 轻松复制整个代码库。代码仓库最初可能是私有的,但 fork 可以快速将所有内容暴露到公共空间中。风险随着每次 Fork 的发生呈指数级增加,通过暴露的敏感数据创建树状的安全漏洞链。为避免这些情况,请禁用 Fork 以获得最大的安全性。

4. 验证访问权限

若要确保 GitHub 帐户和数据的安全,请要求和管理身份验证访问。

双重身份验证

双重身份验证(2FA)通过在对登录进行身份验证时需要多个凭据来保障安全。为了获得最大的安全性,GitHub 建议使用带有使用时间限制的一次性密码(TOTP)服务,例如 LastPass 身份验证器或 Microsoft 身份验证器。

SSH 身份验证

用户设置安全系数较低的密码或在多个服务之间共享密码,从而产生安全风险。为避免此类风险,请使用 SSH 私有密钥/公有密钥对服务器上的操作进行身份验证。为了提高安全性,GitHub 支持自动 SSH 密钥过期和轮换,即使 SSH 密钥泄露,访问窗口也会受到限制。

个人访问令牌

对于较小的项目,请使用个人访问令牌。个人访问令牌的运作原理类似于 SSH 密钥,但不提供自动轮换,GitHub 帐户所有者需要手动设置。

5. 将访问限制在预批准 IP 地址列表

将 GitHub 服务器的访问锁定在预先批准的静态 IP 地址列表中,这种方法是最简单、最直接的安全访问方式之一。有了IP限制,黑客在试图访问你的 GitHub 代码仓库之前,必须识别并渗透到预先批准的名单上的计算机。即使你的登录凭证被泄露,这对他们来说也是一个重大障碍。

6. 及时撤销权限

为了保持最高的安全标准,需要细化管理访问权限,并在项目开发期间定期对其进行评估。当员工离开项目或企业时,请及时修改或撤销其访问权限。此方法遵循最小特权原则,即授予执行特定任务所需的权限。这样做将确保每个有权访问代码的人都只在其权限范围内工作。

7. 密钥管理解决方案

GitHub 代码库面临的最大安全风险之一是开发人员的粗心大意,而不是恶意组织入侵基础架构。为最大化代码库的安全性,可以考虑密钥管理解决方案。这些解决方案会自动阻止敏感信息到达 GitHub 代码库,并在敏感数据已泄露的情况下清理代码库。 多个 GitHub 工具可处理不同的安全模式,例如:

  • git rebase,用于删除意外提交到代码中的已知敏感信息的命令行工具。

  • truffleHog,是一款功能强大的数据挖掘工具,该工具可以帮助广大研究人员轻松从目标 Git 库中搜索出搜索高熵字符串和敏感数据(如 API 密钥,令牌和访问凭据),可以根据这些信息来提升自己代码库的安全性。

  • Git-Secret,用来加密 git 项目中的文件,防止 git 项目传到网上出现泄密的情况。

密钥管理解决方案需要直接集成到 CI/CD 流水线中,还必须使用 AI 和机器学习算法来进行自动识别和阻止,然后再将其推送到 GitHub 存储库。

若要防止机密首先暴露(即便是意外泄露),请实施 “Secret Vault 机密保险库” 安全策略。Secret Vault 是一个独立的系统,用于存储敏感信息。而 Vault 是一种用于保护高度敏感数据的工具,同时提供统一的访问接口。有了 Secret Vault,可以执行更严格的访问控制和审核跟踪,并能够轻松检测漏洞和违规行为。

8. 制定安全计划保护您的代码

在制定安全计划时,请注意以下几点:

  • 在组织内强制实施安全标准,并将所有敏感信息存储在 Secret Vault 或安全密钥存储中。

  • 对组织中使用的敏感信息进行分类。了解组织可能出现漏洞的地方,无论是数据库密码、API 密钥、token 还是管理面板的 URL。

  • 最重要的是,要意识到人为错误通常是安全漏洞的根源。处理安全漏洞的成本之高可能给企业或组织带来“灭顶之灾”。

企业可以尝试使用这些扫描工具,并将此工具集成到 CI/CD 流水线中,来有效阻止敏感信息提交到 GitHub 代码库。

8个方法管理 GitHub 用户权限的更多相关文章

  1. linux 用户管理,用户权限管理,用户组管理

    linux 用户管理,用户权限管理,用户组管理 一:ls -l 命令 解释 第个d表示是目录,如果是文件是-,如果是连接是l 第2到4个 rwx 表示创建者的操作权限 r 读,w 写,x 执行 第5到 ...

  2. Linux运维六:用户管理及用户权限设置

    Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...

  3. RabbitMQ :常用命令与图形管理及用户权限

    RabbitMQ 安装 安装 RabbitMQ 前要先安装 Erlang,可以去 Erlang 官网下载,接着去 RabbitMQ 官网下载安装包,解压缩即可 Mac 用户可以通过 HomeBrew ...

  4. Linux_CentOS用户管理 和 用户权限管理 chmod、ACL、 visudo

    一.用户管理 Linux 系统同时可以支持多个用户,每个用户对自己的文件设备有特殊的权利,能够保 证用户之间互不干扰.就像手机开了助手一样,同时登陆多个 qq 账号,当硬件配置非常高 时,每个用户还可 ...

  5. 详解管理root用户权限的sudo服务程序

    在你想要使用超级权限临时运行一条命令时,sudo 命令非常方便,但是当它不能如你期望的工作时,你也会遇到一些麻烦.比如说你想在某些日志文件结尾添加一些重要的信息,你可能会尝试这样做: $ echo & ...

  6. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第五篇(用户管理之“用户权限分配”)

    一.在做权限分配之前,首先先了解“ZTree”这个插件,我的这个系统没有用Jquery-EasyUI的Tree.用的是”ZTree“朋友们可以试试,也很强大.点击下载ZTree插件.       1. ...

  7. Linux用户组管理及用户权限4

    权限管理:    ls -l        rwxrwxrwx:            左三位:定义user(owner)的权限            中三位:定义group的权限           ...

  8. Linux用户组管理及用户权限3

    用户.组管理命令 安全上下文:        进程以其发起者的身份运行:            进程对文件的访问权限,取决于发此进程的用户的权限 系统用户:为了能够让那些后台进程或服务类进程以非管理员 ...

  9. Linux用户组管理及用户权限2

    用户.组和权限管理    Multi-tasks,Multi-Users,多任务,多用户的计算机    每个使用者:        用户标识.密码:            Authentication ...

  10. Linux用户组管理及用户权限1

    bash的基础特性:    globbing:文件名通配(整体文件名匹配,而非部分)        匹配模式:元字符            *:匹配任意长度的任意字符                例 ...

随机推荐

  1. DFS洛谷4961(求联通块)

    说实话这个题审题把我卡了半天,还是我太菜 直接上代码吧 偷个懒用万能库. #include"bits/stdc++.h" using namespace std; int mp[1 ...

  2. HanLP — Aho-Corasick DoubleArrayTire 算法 ACDAT - 基于双数组字典树的AC自动机

    双数组字典树能在O(1)(1是模式串长度)时间内高速完成单串匹配,并且内存消耗可控,然而软肋在于多模式匹配.如果要匹配多个模式串,必须先实现前缀查询,然后频繁截取文本后缀才可多匹配.比如 ushers ...

  3. 开发现代化的.NetCore控制台程序:(2)创建一个C#项目模板

    前言 上一篇文章(开发一个现代化的.NetCore控制台程序,包含依赖注入/配置/日志等要素)介绍了开发现代化的.NetCore控制台程序的细节,但这还不够,我又创建了一个脚手架模板,并命名为 Flu ...

  4. 在keil MDK中定义非初始化(noini)变量

    具体 可以参考ARM官方资料:ARM: Uninialized Variables Get Initialized 这里是对上述资料的总结, 该方法已在项目中得到验证. 方法: 分散加载文件如下: 定 ...

  5. UVA529 加成序列

    传送门 题目分析 一道 dfs,迭代加深 我们可以很快的猜出来最终 \(m\) 的长度必然是小于 \(10\) 的. 而这种浅深度的问题正好适用于迭代加深. 之后考虑剪枝 优化搜索顺序 : 我们要让序 ...

  6. 神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)

    神经网络的梯度下降 在这篇博客中,讲的是实现反向传播或者说梯度下降算法的方程组 单隐层神经网络会有\(W^{[1]}\),\(b^{[1]}\),\(W^{[2]}\),\(b^{[2]}\)这些参数 ...

  7. 关联规则挖掘:Apriori算法的深度探讨

    在本文中,我们深入探讨了Apriori算法的理论基础.核心概念及其在实际问题中的应用.文章不仅全面解析了算法的工作机制,还通过Python代码段展示了具体的实战应用.此外,我们还针对算法在大数据环境下 ...

  8. 低代码平台解密:探秘MQTT协议的应用之道

    前言 低代码平台作为当今快速发展的技术之一,为开发人员提供了更高效.更简便的工具和方法,以快速构建和部署应用程序.而MQTT协议作为物联网领域的重要通信协议,在低代码平台上的应用也日益受到关注,今天小 ...

  9. Excel数据统计与分析

  10. day01预习-基本语法

    typora-copy-images-to: media 基本语法 JavaScript的历史: ​ 在95年以前,就有很多上网的用户了,当时的带宽只有28.8kb/s,用户要进行表单的验证时,点击提 ...