就安全而言,这个限制是为了什么?通过 USB 连接外部驱动器时,不需要 root 密码。我无法理解其中的逻辑。
我在 fstab 中使用以下规则在运行时连接内部驱动器:
LABEL=disk /media/user/disk ext4 rw,nosuid,nodev,noexec,discard,relatime,user
这样的规则将如何增加漏洞?
就安全而言,这个限制是为了什么?通过 USB 连接外部驱动器时,不需要 root 密码。我无法理解其中的逻辑。
我在 fstab 中使用以下规则在运行时连接内部驱动器:
LABEL=disk /media/user/disk ext4 rw,nosuid,nodev,noexec,discard,relatime,user
这样的规则将如何增加漏洞?
挂载文件系统有多个非常高的安全风险,不应掉以轻心。
话虽如此,有多种工具(如 udisks 和 fstab 中的用户选项)以提升的权限运行并尝试在允许用户挂载磁盘的同时降低风险。大多数缓解措施都是通过仔细控制挂载选项来实现的。
以下是可能风险的简短(且不完整)列表:
总而言之,mount 是一个系统关键功能,它的影响会严重影响系统的完整性和安全性,因此只有在极其受限的条件下才能由非管理员用户允许。
在大多数现代 Linux 发行版中,有一个名为的帮助udisks
程序允许用户挂载可移动驱动器,例如 USB 驱动器,这样他们就不必拥有 root 权限。但是,此帮助程序通常不会在不可移动磁盘上运行,因此它不适用于内部驱动器。
挂载磁盘需要特权的主要原因是因为它将内核引入了不受信任的数据,这是有风险的。文件系统可能是恶意的或格式错误的,例如具有自引用数据结构,这可能导致非特权用户导致 DoS 或任意代码执行。如 user10489 所述,其他各种原因也是可能的。
更重要的是,挂载和卸载都需要相同的权限,通常 udisks 只能在可移动驱动器上工作的原因是允许用户在控制台登录机器卸载内部磁盘可能会导致系统停止工作。例如,如果我有一台受限的信息亭或商务中心计算机,并且可以卸载根文件系统,我可以让其他人停止服务信息亭,直到有人来重新启动它。这就是卸载驱动器通常需要特权的原因,因为 Unix 系统是为多个用户设计的。
在不知道您正在运行的命令的情况下,很难说出系统为什么要求您输入密码。fstab
当然不能要求您输入密码,因为它不是可执行文件。
正如您user
为 指定的那样/media/user/disk
,以常规方式运行mount /media/user/disk
不应要求输入密码。事实上,mount
从不要求输入密码,它要么成功,要么失败。您可能正在运行sudo mount /media/user/disk
,并且sudo
无论如何都要求您输入密码,因为它无法知道您将要运行的命令不需要执行为root
另请注意,noexec
指定时隐含nosuid
、 和nodev
参数user
,因此它们无效。
就安全而言,这个限制是为了什么?通过 USB 连接外部驱动器时,不需要 root 密码。我无法理解其中的逻辑。
类 Unix 系统被设计为多用户系统,驱动器的安装被认为是一种管理行为。磁盘可能包含某些用户不允许访问的数据,它可能包含造成安全风险的 setuid 二进制文件。
随着通常一次由单个用户使用的台式机(甚至笔记本电脑)系统变得越来越普遍,设计了一些机制来授予本地登录到计算机的用户一些通常保留给系统管理员的权限. 多年来,这样的系统已经有好几代了,据我所知,Debian 目前为此目的使用了 policykit。
大多数带有桌面的 Linux 发行版默认授予在本地登录的用户安装“可移动”媒体的权限。逻辑大概是可移动磁盘由坐在计算机旁的人控制,如果每次有人想要插入或弹出磁盘时都必须调用系统管理员,它们就不会很有用。通过限制挂载位置和挂载选项,在一定程度上缓解了挂载的安全漏洞。
当 USB 驱动器出现时,从默认策略的角度来看,它们与可移动媒体分组,大概是因为大多数用户在实践中使用它们的方式。
如果您正在经营一家高度安全的商店,您可能需要查看默认策略。操作系统发行版中的默认策略始终是安全性和可用性之间的折衷方案。即使使用受限的挂载选项来挂载潜在的恶意驱动器也会带来一些风险。
另一方面,内部驱动器仍被视为系统管理员的域,并且可能包含当前坐在计算机前的用户不应访问的内容。