AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 502249
Accepted
Martin
Martin
Asked: 2019-02-23 00:26:57 +0800 CST2019-02-23 00:26:57 +0800 CST 2019-02-23 00:26:57 +0800 CST

用于脚本的安全只读自托管 git 存储库

  • 772

我需要构建一个 git 服务器,其中某些用户对存储库具有读写访问权限,并且使用此存储库运行某些脚本的管理服务器对 git 服务器中的同一存储库具有只读访问权限:

git 服务器拓扑

设置应尽可能安全。目前,我使用gitolite完成了此操作,其中devices存储库具有以下配置:

repo devices
    RW     =   eng1
    RW     =   eng2
    RW     =   eng3
    R      =   graphs

用户的SSH 密钥对graphs存储在mgmt-svr用户graphs主目录的服务器中,私钥仅对用户可读和可写graphs。此私钥不受密码保护。

有没有更安全的方法来实现这一点?我考虑过使用 HTTPS 访问devicesgit 服务器中的存储库和基本访问身份验证,但我看不出与当前基于 SSH 的设置相比有任何优势——我仍然需要将访问凭据存储在用户graphs主目录中的某个位置。

security git
  • 2 2 个回答
  • 431 Views

2 个回答

  • Voted
  1. Michael D.
    2019-02-23T05:11:42+08:002019-02-23T05:11:42+08:00

    您可以使用gitlabCI 的部署密钥功能。此功能也可用于社区版 (ce)。

    全局共享部署密钥允许在整个 GitLab 安装中的任何存储库上配置只读或读写(如果启用)访问。

    这对于将存储库集成到安全、共享的持续集成 (CI) 服务或其他共享服务非常有用。GitLab 管理员可以在 GitLab 中设置 Global Shared Deploy 密钥并将私钥添加到任何共享系统。当项目维护者(或更高级别)授权全局共享部署密钥用于其项目时,各个存储库选择使用这些密钥公开其存储库。

    与按项目部署密钥相比,全局共享密钥可以提供更高的安全性,因为目标集成系统的管理员是唯一需要知道和配置私钥的人。

    GitLab 管理员在部署密钥部分下的管理区域中设置全局部署密钥。确保密钥具有有意义的标题,因为这将是项目维护人员和所有者识别要添加的正确 Global Deploy 密钥的主要方式。例如,如果密钥授予对 SaaS CI 实例的访问权限,则在密钥名称中使用该服务的名称(如果这就是它的全部用途)。在创建 Global Shared Deploy 密钥时,请考虑密钥的粒度——它们可能具有非常狭窄的用途,例如仅用于特定服务,也可能具有更广泛的用途,例如“您需要授予对存储库的读取访问权限的任何地方”。

    GitLab 管理员添加全局部署密钥后,项目维护者和所有者可以通过展开部署密钥部分并单击任何项​​目可用的公共部署密钥下列出的相应密钥旁边的启用,将其添加到项目的设置 > 存储库页面中。

    https://docs.gitlab.com/ee/ssh/#deploy-keys


    编辑:
    gitea与gitlab. 它只有一个没有任何依赖关系的静态单个二进制文件 - 使用 go 编程(当然,您需要添加配置文件和 systemd 服务或类似服务)。该网站对其功能有一个很好的概述: https ://docs.gitea.io/en-us/

    • 4
  2. Best Answer
    Philip Couling
    2019-03-01T14:04:17+08:002019-03-01T14:04:17+08:00

    您的设置听起来很安全。尽管只要有足够的时间,黑客总会找到方法。 ...如果有人黑了你,不要起诉我。 它可能适合小型设置。对于大型企业中的大型团队,这可能不太合适(请参阅下面的“社会工程”)。

    关于它有一些优点,也有一些要点供您考虑以使其变得更好。

    关于您的设置的积极点

    • Gitolite 本身重量很轻,并且在不断更新的情况下使用得很好。(最后一次提交是在撰写本文时 23 天前)。这很安全。
    • Gitolite 搭载 OpenSSH 服务器,该服务器得到很好的支持并且非常安全。
    • 公钥(例如 SSH 密钥)比密码安全得多
    • 设置非常简单,可以减少出错的可能性,并且是一种廉价的解决方案。

    改进的考虑

    未加密的密钥

    存储未加密的私钥并不完美,尽管这很常见。正如您所说,您必须将它们存储在某个地方。但是,这可能是备份或物理上不安全的服务器的问题。有些选项要求您在重新启动服务器时手动解密您的私钥。其中最简单的可能是ssh 代理,并在您重新启动时手动将您的加密密钥添加到其中。

    SSH服务器加固

    请记住,Gitolite 在 OpenSSH 服务器下运行。您可以做很多事情来强化 ssh 服务器本身。

    您甚至可以考虑在chroot环境下运行 Gitolite。有很多关于如何chroot使用 OpenSSH 进行设置的教程。请记住,结果将需要访问这样的程序,python因此这将使其在技术上比许多教程让您相信的更复杂。

    社会工程学

    每个系统管理员都在寻找黑客可以进入的技术途径,但现实世界中的许多黑客都归结为人。

    也许您的解决方案的最弱点是 ssh 密钥的管理。 这在许多企业中被广泛认为是一个安全问题。Gitolite 将所有 SSH 密钥的管理工作交给管理员。这带来了一些重大影响:

    • 由于不支持单点登录,系统管理员可能不知道当有人离开时他们需要删除对该特定框的访问权限。例如:如果您的团队为自己运行这个盒子,他们会在员工被解雇的那一刻得到通知吗?
    • Gitolite 配置中的命名约定不是很好。很容易出错并删除或替换错误的密钥。你需要为自己想出一个目录结构,让你清楚地知道你在做什么。
    • 用户何时停止使用密钥可能不会告诉您。他们接下来使用该密钥执行的操作可能并不安全。其他更大的软件,例如 Github Enterprise,实际上内置了审核 SSH 密钥的功能,方法是批量禁用它们并要求用户重新批准它们。
    • 2

相关问题

  • 无法使用 git 克隆 https 网址

  • 加强 rhel6/7 服务器的安全性 [关闭]

  • 如果某人被授予 root 访问权限,是否可以劫持服务器作为人质?[关闭]

  • git:仅在 GUI 中使用视觉差异(融合)

  • 是否有实现 RFC 5848“签名系统日志消息”的系统日志守护程序?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve