目标读者
本文档目标读者为使用 Linux 工作站进行访问和管理项目基础设施团队中的系统管理员。
如果你们团队的系统管理员是一名远程办公人员,你可以使用本文档帮助他们确保工作站达到最基本的安全要求,以降低他们受到攻击的风险。
即使你们的系统管理员不是远程办公人员,但是他们也可能会在办公环境下使用自己的笔记本电脑来完成很多的工作,亦或者他们可能会在下班时间或遇到突发状况时,利用家中的设备来访问工作环境。在这些情况下,你可以适当调整本套规范以适应你当前的环境。
局限
但请注意,这不是一份详尽的“工作站加固”文档,而是尝试提出一组基本建议,以避免出现一些明显的安全问题从而导致损失。当你读到这份文档时可能会觉得有些偏执,也可能会觉得太肤浅。但安全就像驾车行驶在高速公路上,你会认为任何速度比你慢的都是傻瓜,而比你快的都是疯子。这份指南仅仅是一套基础安全规范,既不详尽,也不能代替经验、警觉和常识。
文档结构
文档每一章节都分为两个部分:
1.适用于你项目需求的清单
2.解释为什么要这么做的原因
安全等级
每一个清单条目都会给出一个安全等级,我们希望这能帮助你做出决定:
1.高(ESSENTIAL) 该条目应该要被高度重视。如果存在问题,它会导致工作站处在一个高风险中。 2.中(NICE) 该条目有助于提升工作站整体的安全性,但可能会影响到你的工作习惯,需要你重新培养工作习惯。 3.低(PARANOID) 该条目为保留项,我们觉得其将大大提升工作站的安全性,但也需要进行大量的调整。
请牢记,这些仅仅只是参考。如果你觉得这个安全等级没有影响到你项目的安全,你可以自己调整它们为合适值。
选择正确的硬件
我们不要求我们的管理员使用指定的供应商或特定的模式,所以本章将主要讨论选择工作系统时的注意事项。
清单
1.系统支持SecureBoot功能(高) 2.系统没有火线(firewire),雷电(thunderbolt)和ExpressCard 接口(中) 3.系统拥有TPM安全芯片(中)
原因
SecureBoot 功能
尽管其还存在一些争议,但SecureBoot功能还是能够抵御一些针对工作站的攻击(如:Rootkits和“Evil Maid”等等)而不引入其他的麻烦。SecureBoot功能并不能阻止APT攻击,但有总比没有强吧。
另外,你也可以选择额外部署 Anti Evil Maid ,其针对SecureBoot攻击提供更加完善的防护措施,但这需要更多的投入和维护。
火线(firewire),雷电(thunderbolt)和ExpressCard 接口
Firewire是一种标准,允许任何连接的设备直接访问系统内存( 百度百科 )。Thunderbolt 和 ExpressCard 也同样存在类似的问题,虽然之后有限制 Thunderbolt 访问内存的能力。如果你的系统上没有这些接口那是最好的,不过即使有也没关系,它们通常可以通过 UEFI 关闭或者内核中禁用。
TPM 安全芯片
TPM(Trusted Platform Module)安全芯片是主板上独立于处理器的加密芯片,其可以提供系统额外的安全性(例如存储全盘加密密钥),但其基本不会用于工作站操作中。换句话说,TMP安全芯片也只是一个有则更好的东西,除非你有特殊的安全需求需要使用它来增强安全性。
安装前的环境
下面是一组在为工作站安装操作系统前的建议。
清单
1.使用 UEFI 引导模式(不使用传统的 BIOS)(高) 2.设置进入 UEFI 配置的密码(高) 3.启用SecureBoot功能(高) 4.开机时需要输入 UEFI 密码(中)
原因
UEFI 尽管也存在一些缺点,但其提供一些 BIOS 所没有的安全功能,例如:SecureBoot。目前大多数现代系统默认都是使用 UEFI 模式。
确保进入 UEFI 配置模式所需的是一个高强度的密码。注意,由于许多厂商悄悄限制了可使用密码的长度,所以你可能需要选择使用短的密码(password)或者长的密码短语(passphrases)。
根据你所选择的 Linux 发行版,你可能需要或不需要导入额外的安全密钥,来启动该发行版。现在很多的发行版已经与微软进行合作,使用大多数厂商所公认的密钥来对他们的内核进行签名,从而为使用者减少麻烦。
作为一个额外的措施,让那些想进入引导区尝试做坏事的人在进入前必须输入密码。这个密码应该不同于 UEFI 的管理密码,以防止出现肩窥。如果你需要经常关闭和启动系统,你可以无视这条,因为你已经需要输入进入系统的密码了,无需在输入一些额外的其他密码。
发行版的选择
你可能会选择一个广泛使用的发行版,例如:Fedora,Ubuntu,Arch,Debian或者基于它们的其他发行版。无论你选择哪一个发行版,选择前你都应该考虑下面的事项:
清单
1.具有强大的 MAC/RBAC 功能(SELinux/AppArmor/GrSecurity)(高) 2.发布安全公告(高) 3.及时推送安全补丁(高) 4.提供软件包加密验证(高) 5.完全支持 UEFI 和 SecureBoot功能(高) 6.提供强大的本地全盘加密支持(高)
原因
强制访问控制(MAC)和基于角色的访问控制(RBAC)是老式 POSIX 系统中一种对基本用户/用户组安全机制的扩展。当前不少数的发行版都已经内建了MAC/RBAC 功能(Fedora,Ubuntu)或者将 MAC/RBAC 作为安装后可选的附加项提供给用户(Gentoo,Arch,Debian)。很显然,我们强烈建议你选择一个已内建 MAC/RBAC 功能的发行版,不过如果你对使用其他的发行版有强烈的意愿,那么也请在安装好系统后在安装 MAC/RBAC 功能。
应该坚决避免使用不提供 MAC/RBAC 功能的发行版,在今日像传统 POSIX 基于用户和用户组的安全措施已被证明不在是可靠的了。如果你想建立一个 MAC/RBAC 工作站,AppArmor 和 GrSecurity/PaX 通常被认为要比 SELinux 更加简单。此外,在工作站中,很少甚至没有对监听程序的守护进程,GrSecurity/PaX 在应对来自用户运行程序的高风险上的安全措施也要强于 SELinux。
大多数广泛使用的发行版都有向用户发布安全公告的机制,但是如果你喜欢钻研,你可以检查开发人员是否有基于文档提示用户关于安全漏洞和补丁的机制。如果一个发行版缺乏相应安全公告机制是一个非常危险的信号,说明这个发行版还不够成熟不具有担当主服务器的能力。
大多数广泛使用的发行版都具备及时推送安全补丁的能力,但是还是应该经常检查更新以确保及时安装推送的安全补丁。应当避免使用“衍生版”和“社区重建版”,因为他们需要等待原生版发布相应的安全补丁才能进行推送,这就会延误补丁到达用户的速度。
现在已经很难在看到一个不使用加密签名的软件包,不更新元数据,或者包含两者的发行版。这就是说,常见的发行版早已经都知道推出这些基本的安全措施(Arch,说你呢),所以这是一件值得检查的事情。
查看发行版是否支持 UEFI 和 SecureBoot功能。找出看是否需要额外输入一个密钥或者是否需要启动一个使用大多数厂商认可的密钥签名的内核(例如同微软合作的发行版)。一些发行版不支持 UEFI/SecureBoot 但是却会提供其他安全措施以不防止启动环境被篡改或破坏(Qubes-OS 使用Anti Evil Maid,前面有提过)。如果一个发行版既不支持 SecureBoot 也没有其他预防 Boot 级别攻击的措施,那还是看看别的发行版吧。
全盘加密是对数据进行安全防护的一个要求,现在大部分的发行版都支持全盘加密。作为替代品,安装在带有自加密功能的硬盘上的系统也是可以使用的(一般通过使用 TPM 安全芯片实现),其提供更高层次的安全和更快的运行速度,但是也要求更高的成本。
发行版安装指南
所有发行版的安装都是不一样的,这里给出的只是一般的准则:
清单
1.使用一个复杂的密码进行全盘加密(LUKS)(高) 2.确保对 swap 交换分区也进行加密(高) 3.确保编辑启动程序也需要密码(可以跟LUKS使用相同的密码)(高) 4.设置一个复杂的 root 密码(可以跟LUKS使用相同的密码)(高) 5.使用普通用户作为管理员组中的一部分(高) 6.要求用户密码必须为复杂密码且不能同于 root 密码(高)
原因
除非你使用具有自加密功能的硬盘,不然你很有必要设置全盘加密,这样将可以极大的保护提升用户数据和系统文件的完整性。简单的自动挂载 cryptfs 文件是不够的(老版 Ubuntu,说你呢),因为这样没有提供对系统二进制文件和交换分区的保护,而这其中可能会包含大量的敏感数据。推荐的加密措施是加密 LVM 设备,这样在启动过程中只需要一个密码。
/boot 分区通常会保持未加密状态,因为引导程序需要在加载解密程序前先启动系统内核。部分发行版也会支持对 /boot 分区进行加密(如 Arch),但这可能会增加系统更新的复杂度。是否对 /boot 分区进行加密不是我们选取发行版的关键,因为通常内核镜像不会泄露隐私数据,而且 SecureBoot 也会检查加密签名以防止篡改数据。
现代操作系统基本对密码长度没有限制,所以唯一限制你密码长度的是你的偏执和固执。如果你经常启动系统,你可能会需要输入两个不同的密码:一个用于解锁 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 密码和 LUKS 使用相同的密码(除非你于他人共享一台笔记本,允许他解锁硬盘但却不能使用root登录你的系统)。如果你是这台笔记本唯一的用户,那么 root 密码和 LUKS 使用不同的密码从安全角度来说没有更多优势的。通常来说,你可以在 UEFI 管理,硬盘加密和 root 账户上使用相同的密码,因为攻击者只需要获取到上述任何一个密码都可以完全控制你的机器,所以在单用户的工作站上使用不同的密码在安全方面并没有什么特别的好处。
你应该使用另一个同样具有复杂密码的账户来完成日常的工作。这个用户应当属于管理员组中(例如wheel或其他类似的,这取决于你使用的发行版),可以使用 sudo 命令来提升权限。
换句话说,如果你是工作站唯一的用户,你应当拥有两个独特的且复杂的密码需要记住:
管理员级别应用于:
1.UEFI 管理 2.引导程序(GRUB) 3.硬盘加密(LUKS) 4.管理工作站(root 用户)
用户级别应用于:
1.用户账户和 sudo 2.密码管理器的主密码
很明显,以上这些应当使用不同的密码。
安装完后的加固
安装完系统后的安全加固取决于你所使用的发行版,所以无法在这种通用文档中具体来说。不过,下面这些步骤你应该要知道:
清单
1.全局禁用火线和雷电模块(高) 2.检测防火墙确保过滤所有传入端口(高) 3.确保 root 邮件转发到一个你经常查看的账户上(高) 4.设置系统自动更新任务或者更新提醒(高) 5.确认默认情况下 sshd 服务被禁用(中) 6.设置空闲时自动锁屏(中) 7.设置 logwatch 监控日志(中) 8.安装并使用 rkhunter 查杀后门(中) 9.安装入侵检测系统(IDS)(中)
原因
将火线和雷电模块列入黑名单,将下面两行加入文件 /etc/modprobe.d/blacklist-dma.conf:
blacklist firewire-core blacklist thunderbolt
重启后这些模块就会被禁用。即使你没有这些模块也可以这么做。
通常,Root 邮件都仅仅只是存储在系统中而从未有人去读取过。确保修改 /etc/aliases 文件转发 Root 邮件到一个你真的会查看的邮箱中,否则你可能会错过一些重要的系统通知和报告:
# Person who should get root's mail root: bob@example.com
在编辑完后执行命令 newaliases 以测试确能转发成功,因为一些邮件厂商会拒绝接收来自不存在或不可路由域名的邮件。
防火墙的默认配置取决于你使用的发行版,但大部分都会允许来自 sshd 端口的传入。除非你有什么无可反驳的理由,不然你应该过滤并禁用 sshd 进程。
systemctl disable sshd.service systemctl stop sshd.service
如果你需要使用它随时都可以启用。通常来说,你的系统不应当监听任何端口,除了回应 ping。这将会帮助降低来自 0day的攻击威胁。
建议开启自动更新,除非你有更好的理由不这么做,例如你害怕自动更新会导致系统的崩溃(这并非杞人忧天,以前的确发生过)。但是至少你也应该开启自动通知当前可用的更新。大部分的发行版默认都会开启这些服务,所以你什么都不用做。具体的你可以查看发行版的相关文档。
你应当尽可能的关注所有明显的勘误(errata),即使有些没有特别的标明是“安全更新”或者有相应的 CVE 编号。所有的 bug 都可能成为潜在的安全问题或者导致其他新的问题,未知的 bug 通常只比已知的要安全一些。
你应当对你系统上发生的事情产生浓厚的兴趣。所以,你应当安装 logwatch 并配置它在每天晚上发送关于你系统上发生所有事情的报告。这并不能阻止一些有针对性的攻击者,但这是一个不错的安全习惯。
请注意,有些发行版系统不再自动安装 logwatch 所需的 syslog 服务(因为systemd 会存在它们自己的日志中),所以你需要安装并启用 rsyslog ,然后确保在使用 logwatch前你的 /var/log 不是空的。
安装 Rkhunter 和 一个IDS(如: aide 或 tripwire )并没有什么太大的左右,除非你真的了解它们的工作原理并进行正确的配置(例如:分离数据库在外部介质上,从可信的环境中运作检测,在执行系统更新和修改配置后更新哈希数据库,等等)。如果你不愿意执行这些步骤并调整对你工作站的工作方式,那么这些工具只会增加麻烦而起不到任何的安全作用。
我们建议你安装 rkhunter 并每晚运行一次。它易学易用,虽然不能帮你阻止一个经验丰富的攻击者,但是却能让你发现自己的错误。
备份个人工作站
工作站的备份往往会被忽视或者很随意进行备份,这都是很不安全的。
清单
1.对工作站备份进行加密并存储在外部存储上(高)
2.使用零知识备份工具进行异地或云备份(中)
原因
使用一个外部移动硬盘可以很方便的拷贝出所有的备份,而无需担心带宽和上行速度(目前,大部分的供应商仍然提供明显不对称的上行/下载速度)。无需多言,这个硬盘本身也是需要加密的(再说一次,使用 LUKS),或者你应该使用备份工具创建加密的备份,例如: duplicity 或者其 GUI 版本 deja-dup 。我建议使用后一种方式,并使用一个不错的随机密码存放在一个安全离线的地方。你过你带上笔记本外出旅游,那么把硬盘放在家里,这样万一丢失笔记本还可以恢复部分数据。
除了你的 home 目录外,你还应当备份 /etc 和可用于取证的 /var/log 目录。
最重要的是,避免将 home 目录拷贝到一个没有加密的存储设备上,即使这是在两个系统间最快的拷贝方式,一旦完成你肯定会忘记删除它,这样你就会暴露潜在的个人隐私和其他敏感的安全数据给监听者。特别是当你把这个存储设备跟笔记本放在同一个包内。
进行异地备份也是相当重要的,你既可以通过要求老板提供异地存储的空间,也可以寻找云供应商提供相应的服务。你可以单独设置一个 duplicity/deja-dup 仅仅只备份重要的文件,这样可以避免由于备份大量不需要备份数据而在异地备份中产生的巨大流量(网络缓存,音乐或者下载数据等等)。
或者,你可以使用零知识备份工具,例如: SpiderOak ,它提供一个优秀的 Linux GUI 工具和很多实用的功能,包括可以在多系统和平台间进行数据同步。
最佳实践
下面是一系列我认为你应该采用的最佳实践的列表。并不是很详细,但却试图提供实用的建议,来帮助在安全和易用之间找到一个平衡。
浏览器
毫无疑问,Web 浏览器是你系统上最为容易受到攻击的软件。它是一个专门下载和执行不可信代码甚至是恶意代码的工具。它们也试图通过使用多种机制例如沙箱和代码过滤来保护你免受这些危害,但是之前它们已经被击败过很多次了。你应当知道任何时候使用浏览器都是最不安全的时刻。
下面几种方法可以减少来自浏览器的安全威胁,但是真正有效的方法还是改变你对工作站的使用方法。
这是最容易做到的,但安全效果也很小。并不是所有的浏览器都可以抵御攻击者不受限制的浏览你的系统,有时他们限制只能读取本地浏览器的存储,从其他标签中窃取活动的会话,捕获浏览器的输入。同时使用两个浏览器,一个用于在访问工作和高安全站点,另一个则用于其他方面,这样可以防止攻击者窃取到所有的 Cookies。但是同时使用两个浏览器会消耗大量的内存。
火狐用于访问工作和高安全站点
使用火狐登录工作相关的站点,应当格外注意像 Cookies ,会话,登录信息和按键记录等等数据千万不能落入攻击者的手里。你不应当使用这个浏览器访问其他任何网站,除了少数几个例外。
你也应该安装以下火狐浏览器的插件:
NoScript (高)
NoScript 阻止加载除白名单外所有活动内容。如果作为默认浏览器这会非常的麻烦(但是提供了很好的安全性),所以我们建议只在访问工作和高安全站点的浏览器上使用它。
Privacy Badger (高)
用来拦截广告商和其他第三方跟踪商的扩展,保护用户在浏览网页时免受密码跟踪(广告站点和跟踪的扩展经常成为受攻击的目标,因为通过它们可以快速的感染全球成千上万的系统)。
HTTPS Everywhere (高)
这个插件会确保通过安全连接访问大部分的网站,即使你输入的是 http 链接(可以避免很多的攻击,例如SSL-strip)。
Certificate Patrol (中)
这个工具会在你访问的站点最近更换 TLS 证书时发出警告,特别是当原证书没有接近过期时间或者新证书来自不同的认证机构。这个警报有助于你防范中间人攻击,但是也会出现很多的误报。
你不应该使用火狐作为你默认的浏览器打开连接,因为 NoScript 会阻止加载或执行大多数的活动。
Chrome/Chromium 用于其他
Chromium 的开发者在增加更好的安全性方面走在火狐的前面(至少 Linux 上是这样),例如:seccomp 沙箱,内核中用户命名空间等等,这就为你访问的网站和你的系统之间增加了一个隔离层。Chromium 是上游的开源项目,而 Chrome 是谷歌构建的专有的二进制包(插入一个偏执的提醒,不要使用它来做任何你不想让谷歌知道的事)。
另外推荐你在 Chrome 上安装 Privacy Badger 和 HTTPS Everywhere 插件,然后使用一个区别于火狐的主题,以此来表明这是你“不受信任”的浏览器。
使用两个不同的浏览器,一个在专用虚拟机中 (中)
这个跟上面推荐的做法很相似,除了你需要将运行一切其他事情的浏览器放入一个专用的虚拟机中,然后通过一个快速的协议来共享剪切板和转发声音事件(例如:Spice 或 RDP)。这将会在不受信任的浏览器和你的工作环境之间增加一个隔离层,使得攻击者在攻破浏览器后必须在设法在攻破 VM 隔离层才能危害到你的系统。
这是一个不错的可行方案,但是却需要大量的内存和快速的处理器来处理增加的负载,同时也需要管理员去改变他们的工作习惯。
使用虚拟化技术隔离工作和游戏环境 (低)
参见 Qubes-OS project ,其致力于通过将应用划分到完全隔离的虚拟机中,以此来提供高安全的工作环境。
密码管理工具
清单
1.使用一个密码管理工具(高) 2.在不相关的网站上使用不同的密码(高) 3.使用一款支持群组共享的密码管理工具(中) 4.给非网站的账户使用一个单独的密码管理工具(中)
原因
使用好的、唯一的密码应当成为团队内每一个成员都遵守的重要规则。窃取凭证是每时每刻都在发生的事情,无论是通过攻破计算机,窃取网站数据库,站点远程利用或其他各种方法。凭证绝对不能跨站重复使用,特别是在关键应用上。
每个浏览器内都有一个相当安全的保存密码的机制,而且可以通过加密的数据传输跟云存储保持数据的同步。然而,这一机制有些严重的缺陷:
1.不能跨浏览器工作
2.不提供任何群组共享凭证的方法
当然也有一些免费或廉价的具有良好支持性的密码管理工具可以跨浏览器、跨平台使用,而且支持群组共享功能(这通常属于付费服务)。具体方案可以很容易的通过搜素引擎找到。
任何浏览器内的密码管理工具都有一个很大的缺点,即作为浏览器的一部分它们很容易遭受入侵者的攻击。如果这宁你很不舒服,那么你应该选择同时使用两个不同的密码管理工具,一个为集成到浏览器内的,另一个则作为独立的应用程序。其中,后者主要用于存储高风险凭证,例如: root 密码,数据库密码和其他 shell 账户凭证等等。
这样的工具在团队内与其他成员共享超级用户凭证会非常有用(服务器 root 密码,ILO 密码数据库管理员密码,引导程序密码等等)。
下面几款工具可以帮助到你:
1.KeePassX,在第二版中改进了群组共享功能 2.Pass,使用文本和 PGP 文件,并集成了 git 3.Django-Pstore,使用 GPG 在管理员之间共享凭证 4.Hiera-Eyaml,如果你已经在你的设备上使用 Puppet,通过存储加密 Hiera 数据可以很方便的跟踪你服务器/服务的凭证
加固 SSH 和 PGP 私钥安全
个人加密密钥包括 SSH 和 PGP 私钥是你工作站上最重要的东西,同时也是攻击者最感兴趣的东西,因为这使他们可以进一步攻击你的设备或者在其他管理员面前冒充你。你应该采取额外的措施来确保这些密钥的安全不被他人所窃取。
清单
1.使用强口令保护私钥(高) 2.使用移动存储设备保存 PGP 主密钥(中) 3.将用于认证、签名和加密的密钥存储到智能卡设备上(中) 4.配置 SSH 使用 PGP 认证密钥作为私钥(中)
原因
最好保护私钥不被窃取的方法就是使用智能卡存储加密使用的私钥并且坚决不在工作站上留有备份。下面是几家提供支持 OpenPGP 设备的厂商:
1. Kernel Concepts :如果你需要一个,这里可以采购到支持 OpenPGP 的智能卡和 USB 读卡器。
2. Yubikey NEO :它们不仅提供 OpenPGP 智能卡还提供很多不错的功能(U2F,PIV,HOTP等等)。
确保 PGP 主密钥没有存储在主工作站上并且只是使用子密钥同样非常重要。主密钥只有在签名其他密钥和创建子密钥时才被使用,而这些操作并不会经常出现。你可以参考 Debian的子密钥指南 ,来学习如何将主密钥移动到移动存储设备上以及如何创建子密钥。
然后,你应当配置 gnupg 代理作为 ssh 代理,并使用基于智能卡的 PGP 认证密钥作为你 ssh 的私钥。这里我们发布过一个 详细指南 介绍如何使用智能卡读卡器或Yubikey NEO 来完成这些。
如果你不愿意做这些,那么至少给你的 PGP 私钥和 ssh 私钥配置一个强大的密码,这样可以增加攻击者窃取并使用它们的难度。
休眠或关机,不要挂起
当系统挂起时,内存中的内容依旧保存在存储芯片上面并且可以被攻击者读取到,通过使用一种称为 冷启动攻击(Cold boot attack) 的攻击手段。如果你需要离开系统一段时间,比如离开一天时间,你最好关机或者休眠而不是挂起它。
工作站使用 SELinux
如果你正在使用捆绑有 SELinux 的发行版(如 Fedora),下面这些建议可以帮助你最大限度的提高安全性。
清单
1.确保你的工作站上强制启用了 SELinux(高) 2.经常检查,永远不要盲目的执行 audit2allow -M(高) 3.永远不要执行 setenforce 0(中) 4.将你的账户切换至 SELinux 用户 staff_u(中)
原因
SELinux 是一种为扩展核心 POSIX 权限设计的强制访问控制(MAC)。它非常成熟、强大,而且自推出后已经走过了很长的路。不过,现在还有不少的系统管理员依旧重复着过时的口头禅“关闭它就行了”。
也就是说,SELinux 对工作站安全的贡献微乎其微,因为大部分你运行的应用程序在运行时都不会受到限制。但它能提供网络更高的安全性,因为它能有效的阻止攻击者通过利用存在漏洞的服务进行提权操作,从而以 root 权限继续访问。
这里我们的建议是强制开启使用 SELinux。
使用 setenforce 0 命令可以临时使 SELinux 进入许可模式,尽管这操作很诱人但你永远不应该使用它。这样做实际上是关闭了整个系统的 SELinux,而你的目的也仅仅只是为了定位一个应用程序或者进程的错误。
替代 setenforce 0 的命令你可以使用 semanage permissive -a [somedomain_t] ,这样只会将需要的进程假如到许可模式中。首先,通过执行命令 ausearch 来定位是哪个进程导致了错误:
ausearch -ts recent -m avc
然后找到 scontext= (源于 SELinux 的内容)的行,像这样:
scontext=staff_u:staff_r:gpg_pinentry_t:s0-s0:c0.c1023
这就告诉你被拒绝的部分为 gpg_pinentry_t ,所以你想要解决这个问题的方法就是将它加入许可模式:
semange permissive -a gpg_pinentry_t
这将允许你使用程序并收集余下的 AVCs 数据,然后你可以配合 audit2allow 自己配置本地策略。一旦完成后你发现没有新的 AVC 的拒绝信息,你就可以执行下列命令将其移除许可:
semanage permissive -d gpg_pinentry_t
以 SELinux 角色 staff_r 使用工作站
SELinux 原生支持配置角色(roles),用户账户基于角色被禁止或赋予相应的权限。作为管理员你应当使用 staff_r 角色,这将限制你访问很多的配置及安全相关的敏感文件,除非你使用 sudo 命令。
默认情况下,账户会被标记为 unconfined_r ,并且执行的大部分应用都不会受到限制,也不会(或很少)受到来自 SELinux 的约束。将用户切换至 staff_r 角色可以执行以下命令:
usermod -Z staff_u [username]
这时你应当注销并重新登录以启用新角色,然后如果你执行 id -Z 命令你会看到:
staff_u:staff_r:staff_t:s0-s0:c0.c1023
当执行 sudo 时,你需要记得增加一个额外的标识告诉 SELinux 你要切换至 “sysadmin” 角色,命令如下:
sudo -i -r sysadm_r
这时你在执行 id -Z 命令你会看到:
staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
警告: 在执行角色切换前你应当使用 ausearch 和 audit2allow 命令,因为你的部分应用可能会在你切换到 staff_r 角色后停止工作。在本文档写作时,下列流行软件如果不调整策略会在切换至 staff_r 时停止工作:
Chrome/Chromium Skype VirtualBox
切换回 unconfined_r 只需执行如下命令:
usermod -Z unconfined_u [username]
然后注销并重新登录即可。
扩展阅读
IT 安全就是一个无底洞,如果你想继续深入挖掘或者了解更多关于特定发行版的安全特性,你可以参阅以下链接:
Fedora 安全指南
CESG Ubuntu 安全指南
Debian 安全手册
Arch Linux 安全维基
Mac OSX 安全
许可证
本文档遵循 以相同方式共享的知识共享许可协议 4.0 国际许可证 。
*原文:[ github ],FB小编xiaix编译,转自须注明来自FreeBuf黑客与极客(FreeBuf.COM)