我正在将 Ubuntu (14.04 LTS) 安装转换为禁用 USB 存储的自助服务终端式系统。但是,这并不妨碍用户安装 MTP 设备(例如 Android 手机)。
这个问题不一样 防止自动挂载MTP 设备,这个问题已在 AskUbuntu 上的其他问题中得到解决。
- 我想永久禁止特定用户或组安装 MTP 和其他存储设备。(也许通过禁用 mtpfs/gvfs?)
- 我应该注意哪些其他连接可写存储设备的方式(例如 UMTS)?
--
编辑:我应该补充一点,我通过将 /media 更改为 admin:myusbaccessgroup 来撤销相关组的访问权限,从而禁用了 USB 存储。显然,我想阻止使用 USB 的用户/组不在 myusbaccessgroup 中。
--
更新:
有人为这个答案悬赏,但未找到成功的解决方案。请查看之前的答案,然后查看聊天室讨论。
放弃吧,我安装了 Ubuntu 12.04,因为它不支持开箱即用的 MTP。但是,PTP 设备仍然可以安装。
答案1
我无法使用用户/组权限使其工作,我也不知道 libmtp 如何挂载手机卷。
这是一个从侧面检查用户组的解决方案udev
。
切换到根目录
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 设备:让我们覆盖 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 -u
或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 播放?,很棒的技巧特技导入当前环境变量。
答案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 中测试。
添加新组
addgroup myusbaccessgroup
更改 gvfs 监视器的所有者组
chown root:myusbaccessgroup /usr/lib/gvfs/gvfs-*-monitor
删除公众/其他人的读取和执行权限
chmod 750 /usr/lib/gvfs/gvfs-*-monitor
将用户 1 放入该组并将用户 2 排除在外或将其从该组中删除
adduser user1 myusbaccessgroup deluser user2 myusbaccessgroup
登出