《Linux 工作站安全检查清单》——来自 Linux 基金会内部

Mricon 等 的头像

·

·

·

13,923 次阅读

目标受众

这是一套 Linux 基金会为其系统管理员提供的推荐规范。

这个文档用于帮助那些使用 Linux 工作站来访问和管理项目的 IT 设施的系统管理员团队。

如果你的系统管理员是远程员工,你也许可以使用这套指导方针确保系统管理员的系统可以通过核心安全需求,降低你的IT 平台成为攻击目标的风险。

即使你的系统管理员不是远程员工,很多人也会在工作环境中通过便携笔记本完成工作,或者在家中设置系统以便在业余时间或紧急时刻访问工作平台。不论发生何种情况,你都能调整这个推荐规范来适应你的环境。

限制

但是,这并不是一个详细的“工作站加固”文档,可以说这是一个努力避免大多数明显安全错误而不会导致太多不便的一组推荐 基线 baseline 。你也许阅读这个文档后会认为它的方法太偏执,而另一些人也许会认为这仅仅是一些肤浅的研究。安全就像在高速公路上开车 — 任何比你开的慢的都是一个傻瓜,然而任何比你开的快的人都是疯子。这个指南仅仅是一些列核心安全规则,既不详细又不能替代经验、警惕和常识。

我们分享这篇文档是为了将开源协作的优势带到 IT 策略文献资料中。如果你发现它有用,我们希望你可以将它用到你自己团体中,并分享你的改进,对它的完善做出你的贡献。

结构

每一节都分为两个部分:

  • 核对适合你项目的需求
  • 形式不定的提示内容,解释了为什么这么做

严重级别

在清单的每一个项目都包括严重级别,我们希望这些能帮助指导你的决定:

  • 关键(ESSENTIAL) 该项应该在考虑列表上被明确的重视。如果不采取措施,将会导致你的平台安全出现高风险。
  • 中等(NICE) 该项将改善你的安全形势,但是会影响到你的工作环境的流程,可能会要求养成新的习惯,改掉旧的习惯。
  • 低等(PARANOID) 留作感觉会明显完善我们平台安全、但是可能会需要大量调整与操作系统交互的方式的项目。

记住,这些只是参考。如果你觉得这些严重级别不能反映你的工程对安全的承诺,你应该调整它们为你所合适的。

选择正确的硬件

我们并不会要求管理员使用一个特殊供应商或者一个特殊的型号,所以这一节提供的是选择工作系统时的核心注意事项。

检查清单

  • [ ] 系统支持 安全启动 SecureBoot (关键)
  • [ ] 系统没有 火线 Firewire 雷电 thunderbolt 或者 扩展卡 ExpressCard 接口 (中等)
  • [ ] 系统有 TPM 芯片 (中等)

注意事项

安全启动 SecureBoot

尽管它还有争议,但是安全引导能够预防很多针对工作站的攻击(Rootkits、“Evil Maid”,等等),而没有太多额外的麻烦。它并不能阻止真正专门的攻击者,加上在很大程度上,国家安全机构有办法应对它(可能是通过设计),但是有安全引导总比什么都没有强。

作为选择,你也许可以部署 Anti Evil Maid 提供更多健全的保护,以对抗安全引导所需要阻止的攻击类型,但是它需要更多部署和维护的工作。

系统没有 火线 Firewire 雷电 thunderbolt 或者 扩展卡 ExpressCard 接口

火线是一个标准,其设计上允许任何连接的设备能够完全地直接访问你的系统内存(参见维基百科)。雷电接口和扩展卡同样有问题,虽然一些后来部署的雷电接口试图限制内存访问的范围。如果你没有这些系统端口,那是最好的,但是它并不严重,它们通常可以通过 UEFI 关闭或内核本身禁用。

TPM 芯片

可信平台模块 Trusted Platform Module ,TPM 是主板上的一个与核心处理器单独分开的加密芯片,它可以用来增加平台的安全性(比如存储全盘加密的密钥),不过通常不会用于日常的平台操作。充其量,这个是一个有则更好的东西,除非你有特殊需求,需要使用 TPM 增加你的工作站安全性。

预引导环境

很有可能你会坚持一个广泛使用的发行版如 Fedora,Ubuntu,Arch,Debian,或它们的一个类似发行版。无论如何,以下是你选择使用发行版应该考虑的。

检查清单

  • [ ] 拥有一个强健的 MAC/RBAC 系统(SELinux/AppArmor/Grsecurity) (关键)
  • [ ] 发布安全公告 (关键)
  • [ ] 提供及时的安全补丁 (关键)
  • [ ] 提供软件包的加密验证 (关键)
  • [ ] 完全支持 UEFI 和安全引导 (关键)
  • [ ] 拥有健壮的原生全磁盘加密支持 (关键)

注意事项

SELinux,AppArmor,和 GrSecurity/PaX

强制访问控制 Mandatory Access Controls,MAC 或者 基于角色的访问控制 Role-Based Access Controls,RBAC 是一个用在老式 POSIX 系统的基于用户或组的安全机制扩展。现在大多数发行版已经捆绑了 MAC/RBAC 系统(Fedora,Ubuntu),或通过提供一种机制一个可选的安装后步骤来添加它(Gentoo,Arch,Debian)。显然,强烈建议您选择一个预装 MAC/RBAC 系统的发行版,但是如果你对某个没有默认启用它的发行版情有独钟,装完系统后应计划配置安装它。

应该坚决避免使用不带任何 MAC/RBAC 机制的发行版,像传统的 POSIX 基于用户和组的安全在当今时代应该算是考虑不足。如果你想建立一个 MAC/RBAC 工作站,通常认为 AppArmor 和 PaX 比 SELinux 更容易掌握。此外,在工作站上,很少有或者根本没有对外监听的守护进程,而针对用户运行的应用造成的最高风险,GrSecurity/PaX 可能 会比SELinux 提供更多的安全便利。

发行版安全公告

大多数广泛使用的发行版都有一个给它们的用户发送安全公告的机制,但是如果你对一些机密感兴趣,去看看开发人员是否有见于文档的提醒用户安全漏洞和补丁的机制。缺乏这样的机制是一个重要的警告信号,说明这个发行版不够成熟,不能被用作主要管理员的工作站。

及时和可靠的安全更新

多数常用的发行版提供定期安全更新,但应该经常检查以确保及时提供关键包更新。因此应避免使用 附属发行版 spin-off 和“社区重构”,因为它们必须等待上游发行版先发布,它们经常延迟发布安全更新。

现在,很难找到一个不使用加密签名、更新元数据或二者都不使用的发行版。如此说来,常用的发行版在引入这个基本安全机制就已经知道这些很多年了(Arch,说你呢),所以这也是值得检查的。

发行版支持 UEFI 和安全引导

检查发行版是否支持 UEFI 和安全引导。查明它是否需要导入额外的密钥或是否要求启动内核有一个已经被系统厂商信任的密钥签名(例如跟微软达成合作)。一些发行版不支持 UEFI 或安全启动,但是提供了替代品来确保 防篡改 tamper-proof 防破坏 tamper-evident 引导环境(Qubes-OS 使用 Anti Evil Maid,前面提到的)。如果一个发行版不支持安全引导,也没有防止引导级别攻击的机制,还是看看别的吧。

全磁盘加密

全磁盘加密是保护静止数据的要求,大多数发行版都支持。作为一个选择方案,带有自加密硬盘的系统也可以用(通常通过主板 TPM 芯片实现),并提供了类似安全级别而且操作更快,但是花费也更高。

发行版安装指南

所有发行版都是不同的,但是也有一些一般原则:

检查清单

  • [ ] 使用健壮的密码全磁盘加密(LUKS) (关键)
  • [ ] 确保交换分区也加密了 (关键)
  • [ ] 确保引导程序设置了密码(可以和LUKS一样) (关键)
  • [ ] 设置健壮的 root 密码(可以和LUKS一样) (关键)
  • [ ] 使用无特权账户登录,作为管理员组的一部分 (关键)
  • [ ] 设置健壮的用户登录密码,不同于 root 密码 (关键)

注意事项

全磁盘加密

除非你正在使用自加密硬盘,配置你的安装程序完整地加密所有存储你的数据与系统文件的磁盘很重要。简单地通过自动挂载的 cryptfs loop 文件加密用户目录还不够(说你呢,旧版 Ubuntu),这并没有给系统二进制文件或交换分区提供保护,它可能包含大量的敏感数据。推荐的加密策略是加密 LVM 设备,以便在启动过程中只需要一个密码。

/boot分区将一直保持非加密,因为引导程序需要在调用 LUKS/dm-crypt 前能引导内核自身。一些发行版支持加密的/boot分区,比如 Arch,可能别的发行版也支持,但是似乎这样增加了系统更新的复杂度。如果你的发行版并没有原生支持加密/boot也不用太在意,内核镜像本身并没有什么隐私数据,它会通过安全引导的加密签名检查来防止被篡改。

选择一个好密码

现代的 Linux 系统没有限制密码口令长度,所以唯一的限制是你的偏执和倔强。如果你要启动你的系统,你将大概至少要输入两个不同的密码:一个解锁 LUKS ,另一个登录,所以长密码将会使你老的更快。最好从丰富或混合的词汇中选择2-3个单词长度,容易输入的密码。

优秀密码例子(是的,你可以使用空格):

  • nature abhors roombas
  • 12 in-flight Jebediahs
  • perdon, tengo flatulence

如果你喜欢输入可以在公开场合和你生活中能见到的句子,比如:

  • Mary had a little lamb
  • you’re a wizard, Harry
  • to infinity and beyond

如果你愿意的话,你也应该带上最少要 10-12个字符长度的非词汇的密码。

除非你担心物理安全,你可以写下你的密码,并保存在一个远离你办公桌的安全的地方。

Root,用户密码和管理组

我们建议,你的 root 密码和你的 LUKS 加密使用同样的密码(除非你共享你的笔记本给信任的人,让他应该能解锁设备,但是不应该能成为 root 用户)。如果你是笔记本电脑的唯一用户,那么你的 root 密码与你的 LUKS 密码不同是没有安全优势上的意义的。通常,你可以使用同样的密码在你的 UEFI 管理,磁盘加密,和 root 登录中 — 知道这些任意一个都会让攻击者完全控制您的系统,在单用户工作站上使这些密码不同,没有任何安全益处。

你应该有一个不同的,但同样强健的常规用户帐户密码用来日常工作。这个用户应该是管理组用户(例如wheel或者类似,根据发行版不同),允许你执行sudo来提升权限。

换句话说,如果在你的工作站只有你一个用户,你应该有两个独特的、 强健 robust 强壮 strong 的密码需要记住:

管理级别,用在以下方面:

  • UEFI 管理
  • 引导程序(GRUB)
  • 磁盘加密(LUKS)
  • 工作站管理(root 用户)

用户级别,用在以下:

  • 用户登录和 sudo
  • 密码管理器的主密码

很明显,如果有一个令人信服的理由的话,它们全都可以不同。

安装后的加固

安装后的安全加固在很大程度上取决于你选择的发行版,所以在一个像这样的通用文档中提供详细说明是徒劳的。然而,这里有一些你应该采取的步骤:

检查清单

  • [ ] 在全局范围内禁用火线和雷电模块 (关键)
  • [ ] 检查你的防火墙,确保过滤所有传入端口 (关键)
  • [ ] 确保 root 邮件转发到一个你可以收到的账户 (关键)
  • [ ] 建立一个系统自动更新任务,或更新提醒 (中等)
  • [ ] 检查以确保 sshd 服务默认情况下是禁用的 (中等)
  • [ ] 配置屏幕保护程序在一段时间的不活动后自动锁定 (中等)
  • [ ] 设置 logwatch (中等)
  • [ ] 安装使用 rkhunter (中等)
  • [ ] 安装一个 入侵检测系统 Intrusion Detection System (中等)

注意事项

将模块列入黑名单

将火线和雷电模块列入黑名单,增加一行到/etc/modprobe.d/blacklist-dma.conf文件:

blacklist firewire-core
blacklist thunderbolt

重启后的这些模块将被列入黑名单。这样做是无害的,即使你没有这些端口(但也不做任何事)。

Root 邮件

默认的 root 邮件只是存储在系统基本上没人读过。确保你设置了你的/etc/aliases来转发 root 邮件到你确实能读取的邮箱,否则你也许错过了重要的系统通知和报告:

# Person who should get root's mail
root:          bob@example.com

编辑后这些后运行newaliases,然后测试它确保能投递到,像一些邮件供应商将拒绝来自不存在的域名或者不可达的域名的邮件。如果是这个原因,你需要配置邮件转发直到确实可用。

防火墙,sshd,和监听进程

默认的防火墙设置将取决于您的发行版,但是大多数都允许sshd端口连入。除非你有一个令人信服的合理理由允许连入 ssh,你应该过滤掉它,并禁用 sshd 守护进程。

systemctl disable sshd.service
systemctl stop sshd.service

如果你需要使用它,你也可以临时启动它。

通常,你的系统不应该有任何侦听端口,除了响应 ping 之外。这将有助于你对抗网络级的零日漏洞利用。

自动更新或通知

建议打开自动更新,除非你有一个非常好的理由不这么做,如果担心自动更新将使您的系统无法使用(以前发生过,所以这种担心并非杞人忧天)。至少,你应该启用自动通知可用的更新。大多数发行版已经有这个服务自动运行,所以你不需要做任何事。查阅你的发行版文档了解更多。

你应该尽快应用所有明显的勘误,即使这些不是特别贴上“安全更新”或有关联的 CVE 编号。所有的问题都有潜在的安全漏洞和新的错误,比起停留在旧的、已知的问题上,未知问题通常是更安全的策略。

监控日志

你应该会对你的系统上发生了什么很感兴趣。出于这个原因,你应该安装logwatch然后配置它每夜发送在你的系统上发生的任何事情的活动报告。这不会预防一个专业的攻击者,但是一个不错的安全网络功能。

注意,许多 systemd 发行版将不再自动安装一个“logwatch”所需的 syslog 服务(因为 systemd 会放到它自己的日志中),所以你需要安装和启用“rsyslog”来确保在使用 logwatch 之前你的 /var/log 不是空的。

Rkhunter 和 IDS

安装rkhunter和一个类似aide或者tripwire入侵检测系统(IDS)并不是那么有用,除非你确实理解它们如何工作,并采取必要的步骤来设置正确(例如,保证数据库在外部介质,从可信的环境运行检测,记住执行系统更新和配置更改后要刷新散列数据库,等等)。如果你不愿在你的工作站执行这些步骤,并调整你如何工作的方式,这些工具只能带来麻烦而没有任何实在的安全益处。

我们建议你安装rkhunter并每晚运行它。它相当易于学习和使用,虽然它不会阻止一个复杂的攻击者,它也能帮助你捕获你自己的错误。

个人工作站备份

工作站备份往往被忽视,或偶尔才做一次,这常常是不安全的方式。

检查清单

  • [ ] 设置加密备份工作站到外部存储 (关键)
  • [ ] 使用 零认知 zero-knowledge 备份工具备份到站外或云上 (中等)

注意事项

全加密的备份存到外部存储

把全部备份放到一个移动磁盘中比较方便,不用担心带宽和上行网速(在这个时代,大多数供应商仍然提供显著的不对称的上传/下载速度)。不用说,这个移动硬盘本身需要加密(再说一次,通过 LUKS),或者你应该使用一个备份工具建立加密备份,例如duplicity或者它的 GUI 版本 deja-dup。我建议使用后者并使用随机生成的密码,保存到离线的安全地方。如果你带上笔记本去旅行,把这个磁盘留在家,以防你的笔记本丢失或被窃时可以找回备份。

除了你的家目录外,你还应该备份/etc目录和出于取证目的的/var/log目录。

尤其重要的是,避免拷贝你的家目录到任何非加密存储上,即使是需要快速的在两个系统上移动文件时,一旦完成你肯定会忘了清除它,从而暴露个人隐私或者安全信息到监听者手中 — 尤其是把这个存储介质跟你的笔记本放到同一个包里。

有选择的零认知站外备份

站外备份 Off-site backup 也是相当重要的,是否可以做到要么需要你的老板提供空间,要么找一家云服务商。你可以建一个单独的 duplicity/deja-dup 配置,只包括重要的文件,以免传输大量你不想备份的数据(网络缓存、音乐、下载等等)。

作为选择,你可以使用 零认知 zero-knowledge 备份工具,例如 SpiderOak,它提供一个卓越的 Linux GUI工具还有更多的实用特性,例如在多个系统或平台间同步内容。

最佳实践

IT 安全的世界是一个没有底的兔子洞。如果你想深入,或者找到你的具体发行版更多的安全特性,请查看下面这些链接:

许可

这项工作在创作共用授权4.0国际许可证许可下。


via: https://github.com/lfit/itpol/blob/bbc17d8c69cb8eee07ec41f8fbf8ba32fdb4301b/linux-workstation-security.md

作者:mricon 译者:wyangsun 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

4 条回复

  1. 来自北京的 Chrome 42.0|Windows 10 用户 的头像
    来自北京的 Chrome 42.0|Windows 10 用户

    王Y大神…猜猜我是谁?

    来自北京
  2. wyangsun [Chrome 46.0|Windows 7] 的头像
    wyangsun [Chrome 46.0|Windows 7]

    Windows 10 用户 一定是个非主流

    来自北京
  3. Nic [Firefox 43.0|Windows 7] 的头像
    Nic [Firefox 43.0|Windows 7]

    很好~~~~支持

    来自佛山
  4. ak2008 [Chrome 48.0|Windows 7] 的头像
    ak2008 [Chrome 48.0|Windows 7]

    这个需要MARK,赞!!!!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注