授予对磁盘设备文件的读取权限

viu*_*ser 5 permissions devices

如果出于基准测试的目的,必须使用hdparmdd直接在设备上,我想知道安全地执行此操作的正确方法是什么。

假设有问题的磁盘是/dev/sda

root@igloo:~# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 May 29 08:23 /dev/sda
brw-rw---- 1 root disk 8, 1 May 29 08:23 /dev/sda1
Run Code Online (Sandbox Code Playgroud)

我真的不想,以sda在任何情况下。那么是否会建议以普通用户身份执行chmod o+r /dev/sda*并运行ddhdparm在其上运行?

cg9*_*909 11

chmod o+r /dev/sda*非常危险,因为它允许任何程序读取您的整个磁盘(包括例如密码散列/etc/shadow,如果您的根分区在sda)!

有(至少)两种方法可以更安全地做到这一点:

  1. 将所有需要读取磁盘的用户添加到该disk组并运行chmod g-w /dev/sda*以阻止对该组的写访问。
  2. 将组更改为/dev/sda*仅包含需要读取磁盘的用户的组,例如chgrp my-benchmarkers /dev/sda*并使用 阻止对该组的写访问chmod

请注意,在相关设备/dev断开连接或计算机重新启动之前,设备节点上的组和权限更改只是暂时的。

一个问题可能是它hdparm的大部分功能都需要写访问权限。您必须检查您想要的一切是否适用于只读访问。

编辑:看起来hdparm不需要写访问权限。它更需要执行大多数 ioctl的CAP_SYS_RAWIO 能力。您可以使用setcap cap_sys_rawio+ep /sbin/hdparm此功能为 hdparm 提供此功能。请注意,这允许任何可以执行hdparm并且至少具有读取访问权限的设备文件的人几乎hdparm可以在该设备上执行任何操作,包括--write-sector手册页描述为“非常危险”、“极其危险”或“非常危险”。包装脚本可能是更好的解决方案。

如果不是,您要么必须授予写访问权限,要么编写可以由您的用户使用 sudo 规则以 root 身份执行的包装脚本。