限制MTP设备不被用户/组安装
我正在努力将Ubuntu(14.04 LTS)安装转换为具有禁用USB存储的类似于信息亭的系统。 但是,这并不妨碍用户安装诸如Android手机之类的MTP设备。
此问题与 阻止 MTP设备的自动安装不同,这已在AskUbuntu的其他问题中得到解决。
- 我想永久禁止特定用户或组安装MTP和其他存储设备。 (也许通过禁用mtpfs / gvfs?)
- 还有什么其他方法可以连接我应该处理的可写存储设备(如UMTS)?
–
编辑:我应该补充一点,我通过chown’ing / media to admin:myusbaccessgroup撤销相关组的访问权限,从而禁用了USB存储。 显然,我想阻止使用USB的用户/组不在myusbaccessgroup中。
–
更新:
为这个答案提供了赏金,但没有找到成功的解决方案。 请先查看答案,然后再进行聊天室讨论 。
放弃,我安装了Ubuntu 12.04,因为它没有开箱即用的MTP支持。 但是,PTP设备仍然安装。
我无法使用用户/组权限工作,我也不知道libmtp如何挂载电话卷。
这是从udev
端检查用户组的解决方案。
-
切换到root
sudo -i
-
创建一个通用脚本来检查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
-
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 -u
或ps aux | grep -i session
ps aux | grep -i session
规则的含义:每当
gnome-session
的用户myusbaccessgroup
组中时,跳过所有libmtp规则。 -
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'"
-
其他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/
-
重新加载规则
udevadm control -R
-
重新插上你的手机。
测试和故障排除:
-
设置组,如果尚未完成
addgroup myusbaccessgroup
-
从组中删除用户。
deluser user myusbaccessgroup
-
运行udev监视器
udevadm monitor -u
-
重新插入该设备
-
检查运行的是什么
udevadm test /sys/device/...
-
将用户添加到组
adduser user myusbaccessgroup
-
重做从第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。
-
添加新组
addgroup myusbaccessgroup
-
更改gvfs监视器的所有者组
chown root:myusbaccessgroup /usr/lib/gvfs/gvfs-*-monitor
-
删除读取和执行公共/其他人的权限
chmod 750 /usr/lib/gvfs/gvfs-*-monitor
-
将user1放入组并保留user2或将其从组中删除
adduser user1 myusbaccessgroup deluser user2 myusbaccessgroup
-
登出