限制MTP设备不被用户/组安装

我正在努力将Ubuntu(14.04 LTS)安装转换为具有禁用USB存储的类似于信息亭的系统。 但是,这并不妨碍用户安装诸如Android手机之类的MTP设备。

此问题 阻止 MTP设备的自动安装不同,这已在AskUbuntu的其他问题中得到解决。

  1. 我想永久禁止特定用户或组安装MTP和其他存储设备。 (也许通过禁用mtpfs / gvfs?)
  2. 还有什么其他方法可以连接我应该处理的可写存储设备(如UMTS)?

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

更新:

为这个答案提供了赏金,但没有找到成功的解决方案。 请先查看答案,然后再进行聊天室讨论 。

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

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

这是从udev端检查用户组的解决方案。

  1. 切换到root

     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设备:/lib/udev/rules.d/覆盖libmtp规则。

     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 ps 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模式,因为它没有自动安装,可能我在这里遗漏了一些东西。
  • 其他外部存储设备:闪存盘和外部硬盘驱动器。 两个系统的测试通过。

参考文献:

  • man udev寻找PROGRAM用途。
  • 耳机断开时如何暂停VLC播放? , Stunts导入当前环境变量的好方法。

我最终有同样的要求。

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

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

如果您倾向于使用GUI,“sudo nautilus”将很容易

“sudo nautilus”并且n导航到计算机/ usr / lib / gvfs

将有服务列表通过右键单击相应的服务 – > properties – > permission – > unckeck“execute”删除执行权限,并将只读访问权限从“只读”更改为“无”

阻止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

user- ubuntu中创建的用户。

chmod 400

或删除用户的安装权限..

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

  1. 添加新组

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

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

     chmod 750 /usr/lib/gvfs/gvfs-*-monitor 
  4. 将user1放入组并保留user2或将其从组中删除

     adduser user1 myusbaccessgroup deluser user2 myusbaccessgroup 
  5. 登出