将“/run”挂载为 noexec

将“/run”挂载为 noexec

我正在使用 Ubuntu 22.04.1 LTS。

目前/run已安装为tmpfsnoexec

mount | grep '/run '
  tmpfs on /run type tmpfs (rw,nosuid,nodev,size=...,nr_inodes=...,mode=755,inode64)

lsb_release -a
  No LSB modules are available.
  Distributor ID: Ubuntu
  Description:    Ubuntu 22.04.1 LTS
  Release:        22.04
  Codename:       jammy

uname -a
  Linux example.com 5.15.0-1020-aws #24-Ubuntu SMP Thu Sep 1 16:04:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

我认为它是通过设置的systemd,作为API 文件系统? 但我不确定它是如何/在哪里配置的。

中没有条目/etc/fstab

我管理的使用 Ubuntu 20.04.5 LTS 的服务器已经安装了noexec/run我不记得手动执行过此操作,所以我想知道这是否可能是 Ubuntu 22.04.1 LTS 中的变化?


至于为什么...我有一个脚本来检查每个用户可写的文件夹www-data是否在noexec挂载上。理论上,如果任何托管网站存在安全漏洞,允许攻击者在磁盘上的任意位置(例如 /run/lock/apache2/)创建文件,那么至少noexec可以提供一些保护(我知道它不会阻止解释器执行)。

答案1

更新

AUbuntu 中 systemd 软件包的错误报告已根据此问题进行了报告。无 initrd 启动时挂载选项的差异被视为可能的回归。

原来的

安装/run通常由initramfs 工具 initinitramfs 中的脚本。这是在 systemd 运行之前。/run 安装持续在 initramfs 转向真正的根文件系统之后。

mount 命令initramfs 工具包括noexec安装选项。

mount -t tmpfs -o "nodev,noexec,nosuid,size=${RUNSIZE:-10%},mode=0755" tmpfs /run

如果需要修改使用的挂载参数initramfs 工具然后您可以init在本地编辑脚本/usr/share/initramfs-tools/init并使用以下命令重建 initramfs

update-initramfs -c -k $(uname -r)

您正在 AWS 中启动 Ubuntu VM。当 Ubuntu 在 AWS 中启动时,它会这样做无初始化,并且不使用 initramfs。当内核启动时无初始化initramfs 工具脚本不会运行。相反,/run挂载(和其他)由 systemd 创建,如定义所述在此挂载表条目中这些安装选项。挂载选项似乎不可自定义。生成的等效挂载命令是

mount -t tmpfs -o "nodev,nosuid,strictatime,size=20%,nr_inodes=800k,mode=0755" tmpfs /run

基于此错误中的第 21 条评论这些命令会更新 AWS VM,以便它使用 initramfs 启动,而不是启动无初始化

mv /etc/default/grub.d/40-force-partuuid.cfg{,.bak}
update-grub

相同的评论提供了有关 AWS VM 启动原因的见解无初始化

我们为云合作伙伴提供定制内核,这些内核内置了启动所需的所有驱动程序,在启动时加载 initrd 是浪费时间

另一个答案中提到的挂载/run/lock始终由 systemd 创建。这是因为Debian/Ubuntu 特定补丁由于“历史原因”,systemd 定义了挂载。挂载选项似乎也无法配置。

答案2

Ubuntu Jammy AMI 预先配置了 /run/lock mount 和 noexec。

# findmnt -l | grep noexec
/proc                                     proc                   proc       rw,nosuid,nodev,noexec,relatime
/sys                                      sysfs                  sysfs      rw,nosuid,nodev,noexec,relatime
/sys/kernel/security                      securityfs             securityfs rw,nosuid,nodev,noexec,relatime
/dev/pts                                  devpts                 devpts     rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000
/run/lock                                 tmpfs                  tmpfs      rw,nosuid,nodev,noexec,relatime,size=5120k,inode64
/sys/fs/cgroup                            cgroup2                cgroup2    rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot
/sys/fs/pstore                            pstore                 pstore     rw,nosuid,nodev,noexec,relatime
/sys/fs/bpf                               bpf                    bpf        rw,nosuid,nodev,noexec,relatime,mode=700
/dev/mqueue                               mqueue                 mqueue     rw,nosuid,nodev,noexec,relatime
/sys/kernel/debug                         debugfs                debugfs    rw,nosuid,nodev,noexec,relatime
/sys/kernel/tracing                       tracefs                tracefs    rw,nosuid,nodev,noexec,relatime
/sys/kernel/config                        configfs               configfs   rw,nosuid,nodev,noexec,relatime
/sys/fs/fuse/connections                  fusectl                fusectl    rw,nosuid,nodev,noexec,relatime
/run/credentials/systemd-sysusers.service none                   ramfs      ro,nosuid,nodev,noexec,relatime,mode=700

# mount -l | grep run
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=192760k,nr_inodes=819200,mode=755,inode64)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,inode64)
none on /run/credentials/systemd-sysusers.service type ramfs (ro,nosuid,nodev,noexec,relatime,mode=700)
tmpfs on /run/snapd/ns type tmpfs (rw,nosuid,nodev,size=192760k,nr_inodes=819200,mode=755,inode64)
nsfs on /run/snapd/ns/lxd.mnt type nsfs (rw)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=96380k,nr_inodes=24095,mode=700,uid=1000,gid=1000,inode64)

相关内容