我正在使用 Ubuntu 22.04.1 LTS。
目前/run
已安装为tmpfs
无noexec
:
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 工具 init
initramfs 中的脚本。这是在 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)