Linux不是一个安全的桌面操作系统。但是,可能很多条件下,必不可少需要使用Linux桌面的图形界面来工作,尤其是一些有密机要求的办公环境下。
可以采取一些措施来加强它、减少它的攻击面并提高它的隐私性。但是某些安全措施中,不可避免要使用非发行官方构建的软件包,如linux‑hardened、akmod、hardened_malloc等。使用非官方构建的包意味着增加更多的信任方,并且必须评估和安全均衡取舍:是否值得为潜在的隐私/安全利益这样做。
安装
全盘加密
大多数Linux发行版在其安装程序中都有一个选项,用于启用LUKS全盘加密。
值得注意的是,全盘加密是在磁盘分区之后,在文件系统创建之前应用进行的,如果在安装时没有设置这个选项,后续需要启动该功能,则需要备份全盘数据,然后重新安装。
默认情况下,不设置经过身份验证的加密。如果使用命令行配置分区,需要使用cryptsetup命令启用完整性-integrity选项。
交换分区加密
考虑使用加密的交换分区或ZRAM,可以避免敏感数据被推送到交换空间导致的潜在安全问题。虽然ZRAM可以在安装后设置,但如果想使用加密交换,则应该在磁盘分区时进行设置。
根据的发行版,如果选择加密驱动器,可能会自动设置加密交换。Fedora默认使用ZRAM ,无论是否启用驱动器加密。
隐私保护
NetworkManager可追踪性
大多数桌面Linux发行版,包括Fedora、openSUSE、Ubuntu等,默认都带有 NetworkManager来配置以太网和Wi-Fi设置。NetworkManager中有些设置中可以用减少被跟踪性可能,从而提高安全。
一般而言:
可以设置 /etc/NetworkManager/conf.d/00-macrandomize.conf,将对外暴露的Mac地址随机化:
[device]wifi.scan-rand-mac-address=yes[connection]wifi.cloned-mac-address=randomethernet.cloned-mac-address=random
然后,重新启动NetworkManager服务:
sudo systemctl restart NetworkManager
最后,将主机名设置为localhost:
sudo hostnamectl hostname \"localhost\"
请注意,随机化Wi-Fi MAC地址取决于Wi-Fi卡固件的支持。
其他标识符
可能希望注意其他系统标识符么,也有可能会导致系统暴露或泄密,在密级较高的电脑需要注意:
用户名
用户名在系统中以多种方式使用。考虑使用诸如“User”之类的通用术语,而非真实姓名。
机器编号
安装过程中会生成一个唯一的机器ID并将其存储在设备上。考虑将其设置为通用ID 。
系统计数
许多Linux发行版默认发送一些遥测数据来计算有多少系统正在使用他们的软件。考虑根据威胁模型禁用此功能。
Fedora项目提供了一个 “countme”变量, 可以在不涉及唯一ID的情况下更准确地计算访问其镜像的唯一系统。虽然当前默认禁用,但可以添加 countme=false到 /etc/dnf/dnf.conf以防将来默认更改。在 Fedora Silverblue和Kinoite等rpm‑ostree系统上,countme来禁用该选项可以通过屏蔽 rpm-ostree-countme 计时器 。
openSUSE 使用唯一的 ID 来统计系统 ,可以通过删除 /var/lib/zypp/AnonymousUniqueId文件。
Zorin OS 也使用唯一ID来统计系统。可以通过运行来选择退出
sudo apt purge zorin-os-census
并可选择将该包封住,以避免意外重新安装:
sudo apt-mark hold zorin-os-census
snapd (Snap) 为的安装分配一个唯一的ID并将其用于遥测。虽然这通常不是问题,但如果要求匿名,应该避免使用Snap包并卸载snapd。可以防止在Ubuntu上意外重新安装
sudo apt-mark hold snapd.
当然,上述只是部分Linux发行版遥测设置和方法,其他的发行版,请参考对应发行版的官方文档说明。
按键匿名化
当使用键盘时可能会根据软生物识别特征进行指纹识别。Kloak软件可以帮助减轻这种威胁。Kloak可通过Kicksecure存储库.deb包和AUR包进行安装。
当然,如果系统必须要Kloak之类来保证安全(保密要求的化),我们更建议使用Whonix之类的系统。
应用限制
对桌面linux来说,应用级别的安全才是最重要,而且也是最容易出现差错的地方。针对此类问题,可以使用的沙盒解决方案,但是相对安全功能都比较弱一些,比如使用发行包管理器(DNF、APT 等)安装的软件通常没有任何沙盒或限制。
Flatpak
Flatpak的目标是成为 Linux 的一个与发行版无关的包管理器。它的主要目标之一是提供一种可以在大多数Linux发行版中使用的通用包格式。它提供了一些权限控制策略。
可以通过设置Flatpak overrides进一步限制应用程序。这可以通过命令行或使用Flatseal 来完成。请注意,这仅有助于解决松散的高级默认权限,无法解决低级问题,例如/proc和/sys访问或 eccomp 黑名单不足。
注意一些敏感权限:
--share=network: 网络和互联网接入
--socket=pulseaudio:PulseAudio 套接字,授予对所有音频设备(包括输入)的访问权限
--device=all:访问所有设备(包括网络摄像头)
--talk-name=org.freedesktop.secrets:D‑Bus 访问存储在钥匙串上的秘密
如果应用程序在本地使用Wayland(不兼容层运行通过XWayland),请考虑撤销其对X11的访问权限(--nosocket=x11) 和进程间通信 (IPC)套接字 ( --unshare=ipc)也是如此。
许多Flatpak应用程序附带广泛的文件系统权限,例如 --filesystem=home和 --filesystem=host. 一些应用程序实现了Portal API,它允许文件管理器将文件传递给Flatpak应用程序(例如 VLC),而无需特定的文件系统访问权限。
可以使用的策略是首先撤销所有文件系统访问,然后测试应用程序是否可以在没有它的情况下工作。如果是,则表示该应用程序已在使用门户,无需进一步操作。如果没有,则开始授予对特定目录的权限。
听起来很奇怪,不应该启用(盲)无人值守的Flatpak包更新。如果或 Flatpak前端(应用商店)简单地执行flatpak update -y,Flatpaks将自动授予上游声明的任何新权限而无需通知。使用GNOME软件的自动更新很好,因为它不会自动更新带有权限更改的Flatpaks,而是通知用户。
Snap
Snap是另一个与发行版无关的包管理器,具有一些沙盒支持。它由Canonical 开发,并在Ubuntu中大力推广。
Snap包有两种变体:经典的,没有限制的,以及严格限制的,其中AppArmor和cgroups v1用于促进沙盒。如果快照使用经典限制(“经典快照”),如果可能,最好从发行版的存储库中安装等效的软件包。如果系统没有AppArmor,那么应该完全避免使用Snap。
此外,Ubuntu 及其衍生产品之外的大多数现代系统默认使用cgroups v2,因此必须设置systemd.unified_cgroup_hierarchy=0在内核参数中让cgroups v1工作。
Snap权限可以通过Snap Store或Ubuntu的自定义补丁GNOME控制中心进行管理。
在Ubuntu上,可以用严格限制的快照替换各种.deb 包,以最大限度地减少攻击面。这些包的一些例子是CUPS和UFW:
使用Snap包的一个警告是只能控制在其清单中声明的接口。例如,Snap 有单独的接口用 audio-playback和audio-record, 但有些包只会声明pulseaudio允许访问播放和录制音频的界面。同样,一些应用程序可能与Wayland一起工作得很好,但包维护者可能只在他们的清单中声明X11接口。对于这些情况,需要联系快照的维护者以相应地更新清单。
Firejail
Firejail 是另一种沙盒方法。 由于它是一个大型setuid二进制文件,因此具有较大的攻击面,这增加了对特权升级漏洞的敏感性。
如果要使用Firejail,Firetools 可以帮助快速管理应用程序权限和启动沙盒应用程序。请注意,Firetools配置是临时的,没有保存配置文件供长期使用的选项。
Firejail还可以使用Xpra或Xephr限制X11窗口,这是Flatpak和Snap做不到的。
使用Firejail配置文件启动应用程序的一个技巧是使用 udo firecfg命令。 该命令将创建一个符号链接 /usr/local/bin/app_name_here指向 Firejail,它将被大多数 .desktop 文件(不指定其二进制文件的绝对路径)自动使用,将通过符号链接启动应用程序,并以这种方式让 Firejail 对其进行沙盒处理。
强制访问控制
常见的Linux强制访问控制(MAC) 框架需要策略文件才能对系统施加约束。最著名的两个是SELinux(用于基于Android和Fedora的发行版)和AppArmor(用于基于Debian的发行版和大多数openSUSE变体)。
Fedora包含预配置了一些策略的SELinux,以限制系统守护进程(后台进程)。应该将其保持在强制模式。
openSUSE中,可以在安装过程中选择SELinux或AppArmor的。可以使用发行版的默认设置既可:Tumbleweed使用AppArmor。MicroOS 用的是SELinux 。 openSUSE 的SELinux。。
Arch及其衍生产品通常不附带强制访问控制系统,需要手动安装和配置AppArmor 。
请注意,与Android不同,传统的桌面Linux发行版通常没有完整的系统强制访问控制策略;实际上只有少数系统守护进程受到限制。
个性化的配置
可以制作自己的AppArmor配置文件、SELinux策略、bubblewrap 配置文件和 seccomp 黑名单等,以更好地适应本地化的环境和限制应用程序。
保护Linux容器
如果正在运行服务器,可能听说过容器。它们在构建各个服务以独立运行的服务器环境中更为常见。 但是,有时也会在桌面系统上看到它们,特别是用于开发目的。
Docker是最流行的容器解决方案之一。它没有提供适当的沙箱,这意味着内核攻击面很大。我们应该遵循Docker和OCI强化指南 来缓解此问题。
简而言之,可以做一些事情,例如使用无root容器(通过配置更改或 Podman),使用为每个容器提供伪内核的运行时 (gVisor),等等。
另一种选择是Kata Containers ,它将虚拟机伪装成容器。每个Kata容器都有自己的内核,并且与主机隔离。