笔记:我不想使用 udev 规则。
我需要(以编程方式)更改某些设备的权限。为了理解我必须做什么(在代码中),我想仅使用chmod
命令来完成此操作。
到目前为止,我已经尝试过:
root# ls -l /dev/sdb
brw-rw-rw- 1 root disk 8, 16 Apr 7 05:27 /dev/sdb
root# chmod 0600 /dev/sdb
root# ls -l /dev/sdb
brw------- 1 root disk 8, 16 Apr 7 05:27 /dev/sdb
如您所见,/dev/sdb
只有所有者(root)具有读写权限。但我仍然可以创建新文件并从连接的闪存驱动器中读取文件。
我缺少什么?如何chmod
防止用户写入某些设备?
答案1
如果我理解正确的话,那么您已经在 /dev/sdb 上安装了一些文件系统。这里重要的是权限在文件系统中驻留在 /dev/sdb 上, /dev/sdb 的权限与您的问题完全无关。除了权限 0666 之外,任何人都可以绕过该文件系统的访问控制机制并任意访问设备上的内容,但这是一个不同的问题。
如果要限制对文件系统中文件的访问,则必须为文件分配适当的所有权和权限(从该文件系统的根开始)。对于像 FAT 这样的文件系统,mount(8) 允许您设置文件系统中所有文件的所有权和访问权限。如果您只想将整个树公开给某些用户并对所有其他用户隐藏,则可以将其安装到只有这些用户有权访问的位置。但请注意,任何用户都可以看到正在安装某些内容(mount(8) 或 df(1) 将显示它们)。
chroot(1) 根本不会帮助你。
答案2
/dev/sdb
是块设备名称。更改 的权限/dev/sdb
不会影响 上的文件系统/dev/sdb
。
用于mount
获取已安装介质和安装点的列表。
用于chmod
更改安装点中的权限。
例如
mount
将显示看起来像这样的线条
/dev/sdb1 on /run/mount/pioneeraxon/disk1 type ext4 (...)
在这种情况下/run/mount/pioneeraxon/disk1
是 的安装点/dev/sdb1
。您需要更改 中的权限/run/mount/pioneeraxon/disk1
。