用户:Pursuable1652

来自 Alpine Linux

你好,我是 Pursuable1652,我喜欢脚本编写、一些不同类型的开发、修改硬件/软件,喜欢学习关于家庭服务器或网络(或通用服务器管理)/(家庭实验室),也喜欢学习一些安全和隐私,以及更多(我对计算机非常热情),我帮助制作了这些维基页面

正在为 openrc 的 init 服务开发 AppArmor 配置文件,必须在 initramfs 中运行,或者至少在作为 PID1 运行 openrc 之前运行...(这里有 systemd 服务 AppArmor 配置文件:https://github.com/roddhjav/apparmor.d,但我没有看到任何公开可用的 openrc init 服务 AppArmor 配置文件...)

可以运行只读镜像(不可变?)(由于它是不可变的,必须使用提供升级文件的服务器进行升级,并更新 init 脚本以调用更新系统。)没有 root 访问权限的 Linux 系统(在没有任何其他方式下使用没有 doas、sudo 或成为 root 的系统),通过将您的用户设置为 docker 组的一部分(以及可能更多)。但这很有挑战性,因为我必须创建一个作为 init 服务运行的电源服务(因为我想在没有 root 权限的情况下控制服务器的电源),并回调到它(使用非 root 用户)到 /run/*.socket,因为我没有 root 访问权限。

可以使用 dm-verity 强制执行只读系统来运行系统。理想情况下,只读镜像应该将 [usr,sbin,bin,lib] 设置为只读。其他所有内容(内核虚拟文件系统:[dev,proc,sys,tmp,run])和(用户可写目录 [var,etc,home])只是 erofs 镜像中的空目录。(它们是空的,因为您应该将文件系统挂载到这些目录...)

使用 dm-verity 和只读镜像(基本上是不可变的发行版?),将受益于升级服务器。基本上是一个服务器,提供只读镜像以及升级 Linux 系统所需的任何其他文件。这可能类似于为 Alpine Linux 设置 APK 仓库,但只是将您的压缩(tar'ed?)只读镜像和其他文件放在 Web 目录中,以便其他服务器/设备可以从中升级。

我的主要目标是使 Linux 更加安全和更好(并且作为副作用,非常不同于传统的 Linux 发行版)。我的指南更适合服务器用例,而不是桌面。

这些指南仍然适用于服务器和桌面,但桌面通常具有更大的攻击面,因为应用程序生态系统必须与其设计中的安全性相结合(相比之下,服务器可以只是 dockerized + gvisored + apparmored/selinuxed 或虚拟化)。

桌面上的 Flatpak 有些缺陷,因为它是先允许权限,而不是先拒绝权限。

可能会有人认为,您编译了软件,该软件是开源的,因此它一定是安全的,对吗?(这是不正确的,因为软件,尤其是代码行数 (LOC) 较大的软件,将更加复杂,因此可能存在更多难以通过人眼检测到的错误,并且这些错误可能会对您的系统执行任何恶意操作。)

桌面可能在控制软件安全性方面有更困难的方法,因为您需要一个已经在一个预定义的、以安全为中心的平台上工作的应用程序生态系统的支持,因此并非所有应用程序都在没有沙箱/虚拟机的情况下运行(理想情况下没有 VM(全部在沙箱中运行)或者可能只有一个,因为使用虚拟机有性能损失)。

老实说,我建议使用 Android/AOSP 和 ChromeOS/ChromiumOS 作为基于 Linux 内核的安全操作系统,因为它们已经拥有一个庞大的应用程序生态系统,该生态系统使用 Java 和 Kotlin 构建,基于默认启用验证启动的 SELinux 平台,并且默认情况下不允许 root 访问。


一些我没有编写但可能有助于 Alpine Linux 安全(或只是杂项)的维基

关于保护 Alpine Linux 安全的更多信息

通过将 hidepid 附加到 proc 来减少非 root 用户的 procfs 信息

/etc/fstab 的内容

... proc /proc proc nosuid,nodev,noexec,hidepid=2 0 0 ...

通过删除对某些文件的读取访问权限来减少 procfs 和 sysfs 信息(可能会破坏您的系统)

chmod 400 /proc/$FILE chmod 400 /sys chmod 400 /sys/$ANY_FILE_IN_DIR

将尽可能多的目录和文件设置为不可执行、只读。并将文件系统挂载为不可执行和只读。

在 AppArmor 和 SELinux 之间考虑。AppArmor 更方便使用,但不如基于路径的 SELinux 细致。SELinux 是基于标签的,它更细致,明显的权衡是它更难使用(对于大多数人而言)。linux-lts 软件包仅启用 AppArmor。

尽可能应用 最小权限原则 (PoLP)

在您的系统上尽可能少地安装软件包,最小化系统上的软件数量。

摆脱调试工具。

如果需要 root 权限,请使用 doasdoasedit。(我相信 doasedit 在 testing 仓库中。)

显而易见的是,禁用对特定沙箱化/虚拟化应用程序的互联网访问,或者在实际情况下为设备完全禁用互联网。(基本上是防火墙/VLAN)

显而易见的是进行完整备份

文件加密可以与 FDE 结合使用,以实现细粒度的加密。

对于文件/目录的只读完整性也可以这样说。

始终使用 HTTPS 下载系统的仓库软件包。


不幸的是,保护传统的 Linux 服务器需要做的事情太多了。并非不可能,只是遗漏了很多本可以完成的保护传统 Linux 操作系统的工作。(顺便说一句,传统的 Unix 操作系统也是如此...)

安全应该默认完成,如果不是,当您为安全配置操作系统时,您从一开始就已经受到威胁。更安全的用户比更少的用户更好,例如,当您与其他安全用户通信时,您也受到保护,保护您与他人的通信。

按照 DM-Verity 维基尝试在 Alpine Linux 上实现完全验证/可信启动。


在这一点上,它将成为它自己的 Linux 发行版