如同世界正在经历的疫情,由于网络攻击的大幅增加,许多公司也遭受着“网络疫情”,保障代码安全迫在眉睫。在之前的文章中我们了解了安全使用 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. ubuntu系统安装到U盘便捷启动

    1.前言 实现u盘系统即插即用,便捷带走.这里需要使用到VM虚拟机进行安装,这里选择64位的ubuntu系统. 2.运行VM虚拟机 以管理员运行VM虚拟机,创建一个ubuntu系统,然后选中相关的镜像 ...

  2. JAVA多线程(2)——锁(对象锁和类锁)

    1.如下代码 1 public class TestSync1 implements Runnable { 2 Timer1 timer = new Timer1(); 3 public static ...

  3. 题解 CF1004C

    题意描述: 给定 \(n\) 个数,从前往后找,看看能和后面的数组成多少个不同的数对. 若两个数对仅仅是位置不同,我们也认为是两个不同的数对. 题目分析: 阅读题目,我们不难看出,若前面有一个数已经出 ...

  4. Python输入三个整数x,y,z,请把这三个数由小到大输出。

    break_out = False while 1: s = [] for i in range(3): x = int(input('请输入一个数:\n')) if x == -1: # 设计一个退 ...

  5. WPS JS宏

    WPS JS宏 1 JS宏基础 1.1 JS宏基础 1.1.1 JS录制新宏 如果在WPS表格中要编写控制表格的代码,却又不知道如何编写,那么可以使用JS录制新宏功能,接下来录制几个常用的操作: 录制 ...

  6. MongoDB (操作数据库,操作集合,操作文档)的笔记

    https://www.bilibili.com/video/BV1gV411H7jN/?spm_id_from=333.999.0.0&vd_source=92305fa48ea41cb7b ...

  7. 常用sql语句(不定时更新)

    --查询数据库所有表名与表说明 select a.name tableName, b.value tableComment from sysobjects a LEFT JOIN sys.extend ...

  8. Android Studio 学习-第三章 Activity 第二组

    事先申明:所有android 类型的学习记录全部基于<第一行代码 Android>第三版,在此感谢郭霖老师的书籍帮助. 1.注册activity 在第一组中,我创建了一个activity, ...

  9. 第一章 JavaEE应用和开发环境

    1.1 java EE应用概述 1.java EE的分层模型 数据库--[提供持久化服务]-->Domain Object层 --[封装]--〉DAO层--[提供数据访问服务]-->业务逻 ...

  10. MybatisPlus高级特性之SimpleQuery工具类

    1.是很么? SimpleQuery可以对selectList查询后的结果使用Stream流进行操作,使其可以返回指定的结果,简洁了api的调用 2.怎么玩? 案例演示 (1) list操作 /** ...