几天前,我通过单击“计算机”上下文菜单中的“格式化”错误地格式化了外部硬盘驱动器上的分区。我想知道如何阻止非root用户这样做。同时我需要非root用户能够在分区上读写。
我使用 Fedora 14。
谢谢。
答案1
作为数控3b已经指出,这由 PolicyKit 控制。磁盘策略位于:/usr/share/polkit-1/actions/org.freedesktop.udisks.policy
并且可以调整。
使用 root 权限打开它并搜索行:<action id="org.freedesktop.udisks.change">
,注释掉整个块:<!-- [udisks.change-block] -->
,或设置<allow_active>
为“否”,保存并退出。
检查是否被禁用:
$ pkaction --verbose --action-id org.freedesktop.udisks.change
No action with action id org.freedesktop.udisks.change
或者如果您已设置no
:
...
implicit active: no
很好,下次您尝试以非 root 用户身份格式化设备时,无论是通过上下文菜单还是通过“磁盘工具”,都会出现一条错误消息,禁止您这样做。此步骤仍然允许非 root 用户读/写设备。
如果您仍然希望允许格式化设备,但具有更高的安全级别,则可以强制PolicyKit每次都要求输入密码。
打开同一文件并转到同一部分,将以下内容中的“yes”替换为“auth_admin” allow_active
:
<allow_active>auth_admin</allow_active>
查看:
$ pkaction --verbose --action-id org.freedesktop.udisks.change
...
implicit active: auth_admin
出色的!
笔记:我只在 Ubuntu 上对此进行了测试,但 Fedora 也使用了 PolicyKit,因此首先使用虚拟驱动器进行尝试。
答案2
这很可能是政策升级的情况。当您从诚实的终端执行此操作时,会发生以下情况:
nc3b@aiur:~$ /sbin/mke2fs -jv /dev/sda1
mke2fs 1.41.3 (12-Oct-2008)
mke2fs: Permission denied while trying to determine filesystem size
当您从 gnome 或其他任何设备执行此操作时,会有一个守护进程,其任务是在您想要执行超级用户操作时提升您的权限(它通常会警告这是特权操作并要求输入密码)。我相信 Fedora 使用 PolicyKit 但这些系统的工作原理类似。
他们中的大多数真正的危险在于他们提供“将此密码保留在密钥环中”或类似的内容,并且不会再次警告您。
sudo、[6] gksudo 和 kdesu 不会在每次调用提升程序时要求用户重新输入密码。相反,用户在开始时会被要求输入密码。如果用户在一段时间内没有使用其管理权限(sudo 的默认值为 5 分钟[6]),则用户将再次被限制为标准用户权限,直到他们再次输入密码。
因此,解决方案是使用根本无权执行这些任务的用户,即使他输入了密码。
答案3
如果 Fedora 允许非 root 用户格式化磁盘,则会出现一些严重的安全问题。最好做的是这样的:
chown root:root /dev/[sh]da[0-9]
chmod 0600 /dev/[sd]da[0-9]
然后,如果需要“非root用户能够在分区上读写”,你的意思是读写文件系统,那么只要挂载它就应该没问题。
如果您的意思是另一件事,那么修改正在执行读写操作的程序的权限(可能通过运行它sudo
)可能会解决问题。
除此之外,我认为分区结构存储在磁盘的超级块中(例如 /dev/sda - 无数字),因此将其设置为0600
,并将分区设置为更宽松的掩码(例如0660
和组拥有)可能会解决问题。