我无法找到有关块设备权限真正含义的信息。对于块设备来说,读权限是什么意思?这是否意味着我不能做像 hexdump 这样的事情?写权限怎么样?还是执行?
此外,如果您通过授予用户 sudo 权限来仅挂载该特定设备而不是设备上的 r、w 或 x 权限,从而拥有设备上的挂载权限,该怎么办?那会发生什么?
答案1
对于简单的情况(当您像文件一样访问设备时),正如 @Jasen 所写:
- 读取权限允许从设备读取(转储、
fsck
以只读模式运行等) - 写入权限允许写入设备(用图像覆盖等)
- 运行、等需要读取的权限
fsck
都tune2fs
需要和修改文件系统。 - 执行权限被忽略。如果您尝试执行设备文件,即使块设备包含有效的可执行代码,您也会收到“权限被拒绝”的消息。
如果你是 root,你通常会得到CAP_DAC_READ_SEARCH
和CAP_DAC_OVERRIDE
能力,这意味着权限标志被完全忽略。
为了读写控制更复杂的是:
要执行 ioctl,您需要能够打开文件,这意味着至少您需要读取或写入权限。
其他一切都取决于驱动程序。某些设备驱动程序仅检查CAP_SYS_RAWIO
或之类的功能CAP_SYS_ADMIN
,某些设备驱动程序使用“无害”ioctl 的读取权限,仅提供信息和其他 ioctl 的读+写权限。设备驱动程序可能使用执行权限进行 ioctl 权限检查,但我不知道有任何驱动程序可以执行此操作。
为了山更容易:
系统mount
调用仅检查两件事:
- 你需要能够抵达设备文件。这意味着设备文件路径上的所有目录都需要至少设置执行权限位(或者您需要具有该
CAP_DAC_READ_SEARCH
功能)。 - 你需要具备这种
CAP_SYS_ADMIN
能力(当你是 root 时通常会获得这种能力)
设备文件本身的权限位在安装时完全被忽略,并且不会以任何方式影响对已安装文件系统的访问。
使用须藤以具有所有可用功能的root身份运行执行的程序,这意味着所有权限检查都被忽略,并且正如@Jasen在评论中所写,/bin/mount
通常是setuid-root,这导致它始终获得所有可用功能,因此权限位没有影响在mount
大多数 Linux 发行版上和其他unixoid操作系统。
编辑:有关功能的部分是 Linux 特定的。其他 unixoid 操作系统(例如 BSD 或 OSX)不会将 root 的特殊能力分为功能,因此当提到功能时,您只需要成为 root 即可。根据可用的联机帮助页,检查mount
与我描述的 Linux 特定检查类似。似乎没有操作系统在安装时检查权限位。
答案2
read 允许读取(例如 hexdump) write 允许写入(例如将图像写入设备) 组合起来这意味着您可以使用“hexedit”等工具来查看和修改内容。
我不知道 x 允许什么(可能它允许 ioctl?)
因为权限brwx______
意味着只有所有者(通常root
)才能执行这些操作。