限制用户/组安装 MTP 设备

限制用户/组安装 MTP 设备

我正在将 Ubuntu (14.04 LTS) 安装转换为禁用 USB 存储的自助服务终端式系统。但是,这并不妨碍用户安装 MTP 设备(例如 Android 手机)。

这个问题不一样 防止自动挂载MTP 设备,这个问题已在 AskUbuntu 上的其他问题中得到解决。

  1. 我想永久禁止特定用户或组安装 MTP 和其他存储设备。(也许通过禁用 mtpfs/gvfs?)
  2. 我应该注意哪些其他连接可写存储设备的方式(例如 UMTS)?

--

编辑:我应该补充一点,我通过将 /media 更改为 admin:myusbaccessgroup 来撤销相关组的访问权限,从而禁用了 USB 存储。显然,我想阻止使用 USB 的用户/组不在 myusbaccessgroup 中。

--

更新:

有人为这个答案悬赏,但未找到成功的解决方案。请查看之前的答案,然后查看聊天室讨论

放弃吧,我安装了 Ubuntu 12.04,因为它不支持开箱即用的 MTP。但是,PTP 设备仍然可以安装。

答案1

我无法使用用户/组权限使其工作,我也不知道 libmtp 如何挂载手机卷。

这是一个从侧面检查用户组的解决方案udev

  1. 切换到根目录

    sudo -i
    
  2. 创建一个通用脚本来检查 GUI 用户是否在指定的组中

    nano /lib/udev/check_gui_user_group.sh
    

    添加以下行:

    #!/bin/bash
    
    export GUI_$(grep -z USER /proc/$(pgrep -nx $1)/environ)
    groups $GUI_USER | grep -qFw "$2"
    

    添加执行权限

    chmod +x /lib/udev/check_gui_user_group.sh
    
  3. MTP 设备:让我们覆盖 libmtp 规则/lib/udev/rules.d/

    cp /lib/udev/rules.d/69-libmtp.rules /etc/udev/rules.d/69-libmtp.rules
    

    然后打开它进行编辑:

    nano /etc/udev/rules.d/69-libmtp.rules
    

    紧接着添加此行LABEL="libmtp_usb_rules"

    PROGRAM!="check_gui_user_group.sh gnome-session myusbaccessgroup", GOTO="libmtp_rules_end"
    

    对于 Ubuntu 14.04 Unity & Gnome,您可以使用gnome-session。对于其他桌面,请使用pstree -ups aux | grep -i session

    规则的含义:每当 的用户gnome-session不在该myusbaccessgroup组中时,跳过所有 libmtp 规则。

  4. PTP 设备:添加另一个规则文件

    nano /etc/udev/rules.d/99-usb-storage-remove.rules
    

    添加规则

    ACTION=="add", ENV{GPHOTO2_DRIVER}=="PTP", ENV{DRIVER}!="", PROGRAM!="check_gui_user_group.sh gnome-session myusbaccessgroup", RUN+="/bin/sh -c 'echo -n %k >/sys%p/subsystem/drivers/%E{DRIVER}/unbind'"
    
  5. 其他 USB 存储设备:将此规则添加到上一步的规则文件中。

    ACTION=="add", DRIVER=="usb-storage|uas|ums-*", PROGRAM!="check_gui_user_group.sh gnome-session myusbaccessgroup", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
    

    要知道我从哪里获得驱动程序列表,请尝试以下操作:

    ls /lib/modules/$(uname -r)/kernel/drivers/usb/storage/
    
  6. 重新加载规则

    udevadm control -R
    
  7. 重新插上你的电话。


测试和故障排除:

  1. 如果尚未设置群组,请设置群组

    addgroup myusbaccessgroup
    
  2. 从组中删除用户。

    deluser user myusbaccessgroup
    
  3. 运行 udev 监视器

    udevadm monitor -u
    
  4. 重新插入该设备

  5. 检查运行了什么

    udevadm test /sys/device/...
    
  6. 将用户添加到组

    adduser user myusbaccessgroup
    
  7. 从步骤 3 开始重做。

笔记:

我使用 Kubuntu 15.04(真实机)和 Ubuntu 14.04(在 VirtualBox 中全新安装)进行测试。

  • 我使用 Wiko Bloom(Android 4.4.2)来测试 MTP 模式,该模式在两个系统上运行良好。
  • 我无法测试 PTP 模式因为它没有自动安装,也许我在这里遗漏了一些东西。
  • 其他外部存储:闪存盘和外部硬盘。两个系统均通过测试。

参考:

答案2

我也有同样的要求。

阻止 Android 的 MTP、PTP 的最佳方法是禁用 ubuntu 中的服务。

以 root /usr/lib/gvfs 身份输入此位置

如果你倾向于使用 GUI,那么“sudo nautilus”会很容易

“sudo nautilus”然后导航到 computer/usr/lib/gvfs

将会有一个服务列表,通过右键单击相应的服务-->属性-->权限-->取消选中“执行”来删除执行权限,并将只读访问权限从“只读”更改为“无”

阻止 MTP 和 PTP

删除执行权限

gvfsd-mtp

gvfs-mtp-volume-monitor(为了更安全)

gvfsd-gphoto2

gvfs-gphoto2-volume-monitor(为了更安全)


Apple I手机可以通过afp安装

所以请删除 gvfsd-afp 的执行权限

gvfs-afc-volume-monitor(为了更安全)

一些 Android 手机可以使用大容量存储模式安装 SD 卡,将 /media/user 中的文件夹权限更改为 400

用户-在 ubuntu 中创建的用户。

修改权限 400

或删除用户的挂载权限..

答案3

这应该适用于 Unity 和 Gnome,已在 Ubuntu 14.04 中测试。

  1. 添加新组

    addgroup myusbaccessgroup
    
  2. 更改 gvfs 监视器的所有者组

    chown root:myusbaccessgroup /usr/lib/gvfs/gvfs-*-monitor
    
  3. 删除公众/其他人的读取和执行权限

    chmod 750 /usr/lib/gvfs/gvfs-*-monitor
    
  4. 将用户 1 放入该组并将用户 2 排除在外或将其从该组中删除

    adduser user1 myusbaccessgroup
    deluser user2 myusbaccessgroup
    
  5. 登出

相关内容