Debian:读卡器设备仅供超级用户使用

Debian:读卡器设备仅供超级用户使用

我有一台华硕笔记本电脑,配有 Realtek 读卡器 RTL8411B。我必须安装内核版本为 4.15.3 的 Debian - 没有其他选择。

第一个问题出现在标准 rtsx_pci 驱动程序中,它似乎完全忽略了这个读卡器。将 SD 卡连接到笔记本电脑不会导致 /dev 目录中出现任何设备,也不会在 syslog 和其他日志中出现任何新记录。

在阅读了一些论坛之后,我了解到该问题出在驱动程序中,并且有两种可能的解决方法:

  1. 使用所有内核模块更改内核版本。

  2. 为当前内核构建新的驱动程序。

所以我选择第二个并构建自定义驱动程序表单https://github.com/M0Rf30/rts_bpp。驱动程序问题已解决。现在我得到了一个新设备 /dev/sdb:

brw-rw---- 1 root disk 8, 16 may 13 13:47 /dev/sdb

但是当磁盘组中的普通用户尝试将 /dev/sdb 挂载到他自己的目录时,他会收到错误。

$ mount /dev/sdb /home/user/media
mount: /dev/sdb: Operation not permitted

我还创建了 udev 规则来为 /dev/sdb 设备设置 MODE="0666",现在我有一个具有权限的设备:

brw-rw-rw- 1 root disk 8, 16 may 13 13:53 /dev/sdb

但安装仍然以错误结束。而且不仅仅是安装。

$ mount /dev/sdb /home/user/media
mount: /dev/sdb: Operation not permitted
$ ls -l /dev/sdb
ls: can't get access to '/dev/sdb': Operation not permitted

将此设备与“sudo”一起使用可以完美运行,但只有超级用户才能从 SD 卡读取和写入数据。

那么我需要做哪些改变才能让所有用户访问读卡器设备?

答案1

实际的“mount”系统调用是仅有的可供 root 使用。设备节点的权限无关紧要(应保留为 0660,并且您真的不应该将非特权用户放在“磁盘”组中)。

非特权访问有多种选项:

  • 通过 sudo运行mount命令,并通过文件系统选项指定正确的合成 UID/GID/权限 - 大多数卡都持有 FAT 文件系统,因此您必须指定uid=

    sudo mount /dev/sdb /mnt -o uid=$(id -u),gid=$(id -g)
    
  • 为 SD 卡添加一个 /etc/fstab 条目,带有“用户”选项(依赖于“mount”命令是 setuid 的事实):

    /dev/disk/by-path/usb-Foo-Bar-part1 /mnt auto user 0 0
    

    使用 /dev/disk/by-path 中的符号链接允许您识别特定的读卡器,无论它现在是“sdb”还是“sdc”。

  • 使用pmount包装器安装卡,这将强制执行正确的选项:

    pmount /dev/sdb
    
  • 使用移动U盘用于挂载卡的服务,该卡将始终被挂载在下面/run/media/$USER(尽管有一个 udev 属性可以让它代替使用/media):

    udisksctl mount -b /dev/sdb
    

    使用 UDisks 时,卡将始终安装在下方/run/media/$USER(尽管有一个 udev 属性可以让它改为使用/media)。GNOME、KDE ​​和 Xfce 使用的机制与允许非特权 USB 棒访问的机制相同。

相关内容