保护您的开发环境

2021-07-26 07:27:49

如果您是开发人员,很可能您会处理私有代码或生产机密。如果有人可以访问这些内容,您可能会与您的老板和客户发生严重问题。我将与您分享一些有关如何保护您的开发的技巧环境从您的计算机到您的终端。在这篇文章中,我会推荐一些工具,对于它们的使用,请查看它们各自的文档,或者为您的操作系统搜索替代品。对于一些工具,我可以在 https://github.com/stsewd/dotfiles 上找到我的配置。使用强密码是好的,但每次登录使用相同的密码是不好的,如果一个系统被攻破,你所有的帐户都可能被攻破。最好的密码是你不知道的密码,密码管理器可以提供帮助您为每次登录生成强大且唯一的密码。使用密码管理器需要你有一个主密码,你需要记住这个密码,所以一定要选择一个强密码,并且每年左右轮换一次密码。我推荐 Bitwarden 作为密码管理器,它是开源的。免费版本为您提供了许多在其他服务中通常需要高级帐户的功能,甚至高级版本也很便宜。但即使使用密码管理器还不足以保护您的帐户,生成的密码可能会在您不知情的情况下暴露,或者您的主密码可能会被泄露。多因素身份验证 (MFA) 来救援! MFA 是关于在身份验证中使用两个或多个证据(因素)以能够访问网站或应用程序 1.因素是:您知道的东西(例如密码)、您拥有的东西(例如电话)以及您所拥有的东西是(就像您的指纹)。 MFA 的一种常见方法是将密码(您知道的东西)与您拥有的东西相结合,例如:

这是使用您的电话号码通过短信接收代码以进行身份​​验证。请不要使用这种方法,攻击者很容易劫持您的电话号码2,如果您在旅行中,您将无法收到代码。这是在您的手机中使用一个应用程序,该应用程序为每次登录生成一个有效期为 30 秒的 OTP 3。使用应用程序是一种极好的 MFA 方式,您不需要在手机上连接互联网即可访问令牌。我推荐的一个应用程序是 andOTP,它是开源的,并且具有多种功能,例如使用 PIN 解锁代码以及进行加密的离线备份。在选择应用程序时,不要使用那些将代码同步到云的应用程序,那样会破坏您(并且只有您)拥有的东西的规则。它们类似于应用程序,它们可以提供 OTP,但好处是它们不连接到您的手机。流行的硬件密钥是 YubiKey。如果您决定购买一把,请买两把!第二把钥匙将作为您的备用钥匙,以防您丢失或损坏另一把钥匙。并非所有服务都支持 MFA,但请确保花一些时间为支持 MFA 的服务进行设置。大多数服务都会为您提供恢复代码,以防您无法访问 MFA 设备,将它们离线保存并保存在安全位置!如果有人窃取了您的计算机,他们无需知道您的用户密码即可访问您的所有文件。为防止这种情况发生,请在您的计算机上使用全盘加密。

在 Linux 系统上,这通常是安装时的一个选项,您甚至可以使用 YubiKey 来保护您的磁盘(您的密码 + YubiKey 中的静态密码)。即使您使用全盘加密,如果有人在您登录时窃取您的计算机,他们将可以访问您的所有文件和活动会话。当然,您可以撤销您的活动会话,但这样做可能需要一些时间,并且无法撤销对您文件的访问权限。除了全盘加密之外,您还可以加密单个目录,并设置一个生命周期。这样即使有人可以访问您未锁定的计算机,您的文件也将是安全的。一个简单的归档工具是 encFS(检查 -i选项)。与您的版本控制系统 (VCS) 提供商一起使用 SSH 身份验证是很常见的,以避免每次都输入您的密码,但这为任何可以访问您计算机的人敞开了大门。使用密码保护您的私钥,并为您的 SSH 代理设置生命周期(-t 选项,请参阅 man ssh-agent),这样您就需要每隔 t 分钟/小时重新输入密码。为您的代码使用像 Git 这样的 VCS 很棒(您的代码确实在 VCS 下,对吗?),它允许您跟踪您的更改、还原更改等等!了解谁更改了特定的代码也很有用一段代码和时间,这在对代码库进行审计时非常有用。但实际上,任何人在提交更改时都可以说是您,例如 Git 使用配置文件来设置您的姓名和电子邮件,您不需要提供任何其他内容来说明您是那个人!这意味着您的任何同事都可以冒充您,或者可以访问您的 VCS 提供商的攻击者也可以这样做。您不想为自己没有进行的更改负责!

幸运的是,Git 允许您使用 GPG 密钥签署您的提交。有人仍然可以使用您的电子邮件进行提交,但他们将无法使用您的私人 GPG 密钥签署这些提交。GitLab 有一个关于如何签名的很好的指南您对 GPG 的提交 https://docs.gitlab.com/ee/user/project/repository/gpg_signed_commits/。与 SSH 相同,使用密码保护您的私人 GPG 密钥,并为您的 GPG 代理设置生命周期(default-cache-ttl 和 max-cache-ttl 选项,请参阅 man gpg-agent)。终端是一个很好的朋友,使用 ↑ ↓ 浏览历史记录可以节省一些输入,但该历史记录也可能包含敏感信息。默认的历史条目数通常很高,作为一个快速实验,您可以检查您有多少条目:根据您使用的 Shell,您可以使用环境变量控制最大条目数,对于 zsh,这是完成的与:根据您的意愿选择条目的数量,不要大到可以保存很长时间,也不要小到不节省您的打字时间。有时您需要在终端中输入机密,但又不想将它们保存在历史记录中。您可以通过在命令前加上空格来避免将命令添加到历史记录中。

进入隐身模式的另一种方法是取消设置 $HISTFILE 环境变量(感谢 @WhiteHatTux 提供此提示!)。如果您的文件包含敏感信息而无法加密,因为它需要可读(如配置文件),至少只授予适当的用户/进程访问权限。如果您需要将一些带有秘密的环境变量暴露给您的命令。您可以使用带有加密目录的 direnv。这样,只有当您在该目录中时才会设置环境变量。如果您使用的是您无法控制的网络,请使用 VPN 连接到 Internet。 ProtonVPN 是一个不错的免费选择。默认情况下不要加载外部内容,攻击者可以使用它来进行无害的操作,例如跟踪您,或者进行更复杂的操作,例如利用 CSRF 易受攻击的站点。这通常是您电子邮件客户端中的一个选项,Protonmail 默认启用此选项。有时您需要与其他同事共享密码或私人信息。使用端到端加密的安全通道这样做(并在完成后删除消息),或为您的团队使用密码管理器,或加密使用他们的公共 GPG 密钥获取秘密。在完美的条件下,您应该有一台专用的工作计算机,并使用安全网络连接到 Internet,但这并不总是可行或由您的雇主提供。不过,在处理敏感问题时,拥有多层保护总是好的信息。

你已经知道其中的一些技巧了吗?或者你有更多要分享的吗?请在评论中告诉我!