Linux不是一个安全桌面操作系统。而且,可能好多条件下,必不可少须要使用Linux桌面的图形界面来工作,尤其是一些有密机要求的办公环境下。
上一篇文章中我介绍了提升Linux桌面安全方面做法,包括c盘加密、隐私设置和应用限制等。本文我们继续讨论桌面Linux的其他安全问题,包括系统安全加固和安全启动方面的技巧。

安全加固网段077
在一个涉密的桌面Linux中,不仅openSUSE(077会破坏snapper)以外的发行版可以考虑将用户的默umask修改为077(表示权限为u=rwx,g=,o=)。
不同发行版配置方式有差别国内linux主机,一般可以直接更改配置文件:/etc/profile,/etc/bashrc,或则/etc/login.defs。
注意,与macOS不同,这只会修改shell的umask。运行应用程序创建的文件不会将其权限设置为600。
Microcode更新
应当确保系统收到Microcode更新信息,便于及时解决因为因为CPU漏洞导致安全问题,例如Meltdown和Spectre修补和减轻举措。
默认Debian官方不提供Microcode更新,因而请勿必启用非免费储存库并安装microcode打包。
对ArchLinux上,确保安装了intel-ucode或则amd-ucode包。
假如使用GNUGuix发行版,可以订阅Nonguix频道或类似频道来获取Microcode更新。
最要要尽量避开使用Linux-libre内核,该内核主动制止加载仅二补码microcode。
固件更新
为Linux系统提供固件更新许多硬件供应商通过LinuxVendorFirmwareService。可以通过以下命令下载和安装更新:
# 更新元数据
fwupdmgr refresh
# 下载和安装固件升级

fwupdmgr update默认情况下,Debian等个别发行版没有安装fwupd,因而应当检测系统中是否存在它,并在须要时安装它。
几个图形后端与fwupd集成以提供固件更新(GNOME软件、KDEDiscover、SnapStore、GNOME固件、Pop!_OS设置应用程序)。并且,并非所有发行版都默认提供此集成,如有严格要求,须要检测特定系统并在须要时使用systemd计时器或cron设置按计划定期手动更新。
防火墙
防火墙可用于保护与系统的联接RedHat发行版(比如Fedora和openSUSE一般使用firewalld。firewalld及其图形后端firewall-config文档可以参考红帽的文档。

基于Debian或Ubuntu的发行版一般使用UncomplicatedFirewall(ufw)。顾名思义,它比firewalld简单一点。并且缺乏些功能,例如不同的联接应用不同的防火墙规则。

比如要设置默认防火墙区域遗弃数据包。用firewalld可以实现这(IPv6有必要的例外):
firewall-cmd --set-default-zone=drop
firewall-cmd --add-protocol=ipv6-icmp --permanent
firewall-cmd --add-service=dhcpv6-client –permanentfirewalld/ufw及借此为基础的防火墙使用netfilter的框架,因而未能(不支持严格的强制访问控制)制止在系统上运行特权的恶意软件,她们可以插入自己的路由规则来避免firewalld/ufw。
可以使用一些基于二补码的出站防火墙,比如OpenSnitch和Portmaster,和firewalld和ufw一样中国linux操作系统,它们是可以绕开的。
可以使用Flatpak,它可以设置一个覆盖来制止网路访问,这是不可绕开的。
假如在支持适当限制的系统上使用非精典Snap(包括AppArmor和cgroupsv1都存在),可以使用SnapStore撤消网路权限,这样也是不可绕开的。
内核加强
可以采取多种举措来加强Linux内核,包括设置适当的内核参数和将毋须要的内核模块纳入黑名单。

运行时内核参数(sysctl)
建议禁用非特权用户命名空间因为特权升级的重要功击面。并且,Podman和LXC等一些软件依赖于非特权用户命名空间。假如使用这种软件,请不要禁用kernel.unprivileged_userns_clone
假如使用的是Kicksecure或Whonix,则默认情况下包含大部份加强。假如使用的是Debian系,应当考虑将其转变为Kicksecure。在其他发行版上,可以将配置文件从Kicksecure复制到/etc/sysctl.d/(但请注意,这种配置不会禁用非特权用户命名空间)。
须要非常注意的是:
bluetooth和btusb内核模块被禁用。假如使用蓝牙须要注释掉installbluetooth/bin/disabled-bluetooth-by-security-misc和installbtusb/bin/disabled-bluetooth-by-security-misc。
Apple文件系统被禁用。这在非Apple系统上一般没问题;并且,假如使用的是Apple设备,则必须检测的EFI分区使用的文件系统。诸如,假如EFI文件系统是HFS+,则须要注释掉installhfsplus/bin/disabled-filesys-by-security-misc,否则计算机将难以启动Linux。
cdrom和sr_mod模块只是被纳入黑名单(一直可以在运行时加载modprobe).假如无意使用CD-ROM设备,则应来禁用它们通过取消注释相应的选项install线。
在使用配置文件时形成信息性错误,应将相应的10个调试脚本全部复制到/bin/.
引导参数
在rpm‑ostree发行版上,确保使用rpm-ostreekargs而不是直接编辑GRUB配置。
CPU减轻举措
spectre_v2=on spec_store_bypass_disable=on l1tf=full,force mds=full,nosmt tsx=off tsx_async_abort=full,nosmt kvm.nx_huge_pages=force nosmt=force l1d_flush=on mmio_stale_data=full,nosmt同步多线程(SMT)是许多硬件级漏洞的缘由,因而建议禁用。假如该选项可用,还应当在固件中禁用SMT/“超线程”。
但请注意,禁用SMT可能会对性能形成重大影响——因此,Arch的流行linux-hardened内核默认情况下不会禁用SMT。评估风险承受能力,假如选择启用SMTlinux tor polipo,只需删掉所有出现的nosmt和nosmt=force从那些参数。
内核
slab_nomerge init_on_alloc=1 init_on_free=1 pti=on vsyscall=none page_alloc.shuffle=1 randomize_kstack_offset=on extra_latent_entropy debugfs=off oops=panic quiet loglevel=0Kicksecure也不强制执行module.sig_enforce=1或则lockdown=confidentiality默认情况下,由于它们会造成好多硬件兼容性问题。
墒生成
random.trust_cpu=off random.trust_bootloader=off
random指令(CPU通过该指令向操作系统提供随机数生成器)的个别实现已被证明是易受功击的或完全有缺陷的。RDRAND也难以审计,由于它是CPU本身的一部份。
作为加密操作完整性的防治举措,CPU和引导加载程序不应用作信用熵源。请注意linux tor polipo,此修改会降低启动时间。
DMA减轻举措
intel_iommu=on amd_iommu=on efi=disable_early_pci_dma iommu.passthrough=0 iommu.strict=1减少直接显存访问(DMA)功击可以通过IOMMU和禁用个别内核模块来。据悉,应严格执行IOMMUTLB失效,便于设备永远没法访问陈旧的数据内容。
那些参数不提供全面的DMA保护。在初期引导(内核加载之前),只有系统固件可以执行IOMMU,进而提供DMA保护。初期引导中的DMA功击可以修复显存中的内核以完全破坏这种参数。
加强显存分配器
GrapheneOS的加强显存分配器(hardened_malloc)可用于通常Linux发行版,但仅适用于个别程序。
Kicksecure默认安装它(虽然默认情况下未启用)并提供与所有发行版相关的深入使用说明。
在基于Arch的系统上,hardened_malloc可通过AUR获。DivestedComputingGroup维护着Fedora建立。
挂载点加强
考虑添加挂载选项nodev,noexec和nosuid到不须要相应功能的挂载点。一般,这种可以应用于/boot,/boot/efi,和/var.这种标志也可以应用于/home和/root,但是noexec将制止须要在这种位置执行二补码文件的应用程序工作(包括Flatpak和Snap)。
禁用SUID
SUID容许用户以该应用程序的所有者身分执行该应用程序,在许多情况下是root用户。易受功击的SUID可执行文件可能造成特权升级漏洞。
最好从尽可能多的二补码文件中删掉SUID;并且,这须要反复试验,由于个别应用程序须要SUID能够运行。
Kicksecure以及扩充名Whonix具有实验性权限加强服务和应用程序白名单,可以手动从系统上的大多数二补码文件和库中删掉SUID,可以参考使用。
DNSSEC
默认情况下,大多数Linux发行版不启用DNSSEC。建议启用它以确保对的DNS查询的响应是真实的。另外还须要一个支持DNSSEC的DNS提供商。
可以编辑/etc/systemd/resolved.conf归档并添加DNSSEC=yes启用它。做systemctlrestartsystemd-resolved完成编辑以应用配置后。

假如Whonix或Tails用户,可以忽视设置DNSSEC,由于TorDNS解析不支持它。或则,可以使用非Tor解析器,但不建议员时间这样做。
时间同步
大多数Linux发行版默认使用未加密和未验证的网路时间合同(NTP)进行时间同步。有两种方式可以轻松解决此问题:
使用chronyd配置网路时间安全(NTS)
在基于Debian的发行版上使用Kicksecure的sdwdate。
假如决定将NTS与chronyd一起使用,请考虑使用多个独立的时间提供程序和设置minsources小于1。
GrapheneOS为她们的基础设施使用了一个特别好的chrony配置。可以复制其chrony.conf到须要的系统上。
可拔插身分验证模块(PAM)
PAM的可以加强设设置以提升身分验证安全性(但请记住PAM与加密相反的可绕开性质)。
在红帽发行版上,可以使用authselect来配置它,比如:
sudoauthselectselect
with-faillockwithout-nullokwith-pamaccess
在系统上pam_faillock不可用,考虑使用pam_tally2。
假如使用YubiKey或其他U2F/FIDO2身分验证器,则可以使用pam-u2f实现双因子登陆身分验证。确保使用硬编码origin和appid。不要使用默认标示符pam://$HOSTNAME假如的主机名修改,这会造成中断。
储存介质处理
一些Linux发行版和桌面环境会在插入储存介质时手动挂载任意文件系统。这是一种安全风险,由于对手可以将恶意储存设备联接到的计算机以借助易受功击的文件系统驱动程序。
Whonix默认禁用此行为。
U盘
使用UDisks的系统上的GNOME用户可以通过运行以下命令来增加这些风险:

echo '[org/gnome/desktop/media-handling]
automount=false
automount-open=false' | sudo tee /etc/dconf/db/local.d/automount-disable
echo 'org/gnome/desktop/media-handling/automount
org/gnome/desktop/media-handling/automount-open' | sudo tee /etc/dconf/db/local.d/locks/automount-disable
sudo dconf update这将禁用手动挂载并避免用户覆盖该设置(没有权限)。
Cinnamon使用同样配置/命令。其他基于GNOME3的桌面环境可能遵守类似的模式——可以使用gsettings查看详尽信息。
autofs
在较旧的系统上autofs被使用,你应当屏蔽autofs服务来禁用此行为。
USB端口保护
为了更好地保护的USB端口免受BadUSB和Hak5USBRubberDucky等功击,建议使用USBGuard。

详见其官方文档,之后有机会可以详尽介绍。
安全启动
安全引导可用于通过避免加载未签名的UEFI驱动程序和引导加载程序来保护引导过程。
安全启动的问题之一,尤其是是在典型设置中仅验证链加载程序(垫圈)、引导加载程序(GRUB)和内核。initramfs敞开了房门一般未经验证和加密功击。
大多数设备上的固件还预先配置为信任Microsoft的Windows和第三方秘钥,因而造成较大的功击面。
