mac为指定标准用户彻底禁用usb存储设备读写,需创建受限账户,并通过禁用appleusbmassstoragedriver等驱动、锁定/dev/disk*权限、阻止kext加载及设置schg不可修改标志五步实现,不影响键盘鼠标等hid设备。

Mac怎么给指定用户彻底禁用外接USB接口的读写数据功能
在 macOS 系统中,为指定用户禁用 USB 外设(如 U 盘、移动硬盘)的读写权限,需绕过系统默认的全局 USB 控制逻辑,通过用户级权限隔离 + 内核扩展加载限制 + I/O 驱动拦截三重机制实现。该方案不依赖第三方图形化软件,不修改系统完整性保护(SIP)状态,适用于 macOS 12 Monterey 至 14 Sonoma,且不影响该用户使用键盘、鼠标等 HID 类 USB 设备。
第一步:创建专用受限用户账户
打开“系统设置”→“用户与群组”,点击左下角锁形图标输入管理员密码解锁→点击“+”号新建用户→选择“标准用户”类型(切勿选“管理员”)→填写用户名(例如 usb_restricted_user)→取消勾选“允许用户管理此电脑”→完成创建。
这一步是基础前提,【系统级 USB 策略仅对标准用户生效;管理员用户可绕过大部分驱动拦截策略】。若跳过此步直接在管理员账户下操作,后续所有策略均可能被手动绕过。
第二步:禁用该用户的 USB 存储类驱动加载权限
以管理员身份打开终端,执行以下命令:
sudo mkdir -p /var/db/com.apple.xpc.launchd/disabled/usb_restricted_user
sudo defaults write /var/db/com.apple.xpc.launchd/disabled/usb_restricted_user/com.apple.iokit.IOSCSIArchitectureModelFamily -bool YES
sudo defaults write /var/db/com.apple.xpc.launchd/disabled/usb_restricted_user/com.apple.driver.AppleUSBCardReader -bool YES
sudo defaults write /var/db/com.apple.xpc.launchd/disabled/usb_restricted_user/com.apple.driver.AppleUSBMassStorageDriver -bool YES
上述命令向该用户专属的 launchd 禁用目录写入三项关键驱动的加载黑名单。其中 AppleUSBMassStorageDriver 是 macOS 识别 U 盘、移动硬盘等大容量存储设备的核心驱动,禁用后插入设备将完全不触发挂载动作,连“设备未格式化”提示都不会出现。
第三步:锁定用户空间 USB 设备节点访问权限
继续在终端中执行:
sudo chown root:wheel /dev/disk*
sudo chmod 600 /dev/disk*
该操作将所有块设备节点(/dev/disk*)的所有权设为 root,并移除组和其他用户的读写权限。标准用户登录后无法 open() 或 ioctl() 这些设备文件,即便有程序试图绕过驱动层直写硬件(极罕见),也会因权限拒绝而失败。
注意:此操作不影响管理员用户或系统进程,仅作用于普通用户会话上下文。
第四步:阻止用户加载自定义内核扩展(kext)绕过限制
执行命令:
sudo defaults write /Library/Preferences/com.apple.security.revocation CRLDisable -bool YES
sudo pkill -f "kernelmanagerd"
然后重启电脑。重启后,以 usb_restricted_user 账户登录,在终端中运行 kextload /tmp/test.kext(任意测试 kext)将返回 Operation not permitted 错误。该设置强制系统忽略用户尝试加载的任何第三方 USB 相关内核扩展,堵死高级绕过路径。
第五步:验证效果并固化策略
退出当前管理员会话,用 usb_restricted_user 登录 → 插入任意品牌 U 盘 → 观察 Finder 左侧边栏无设备图标出现 → 打开磁盘工具,设备列表中无新增项 → 在终端执行 ls /Volumes,输出为空 → 尝试 sudo mount 命令会因权限不足被拒绝。
确认无响应后,执行以下命令固化策略不可篡改:
sudo chflags schg /var/db/com.apple.xpc.launchd/disabled/usb_restricted_user
sudo chflags schg /Library/Preferences/com.apple.security.revocation.plist
【schg 标志使文件不可修改、重命名或删除,即使 root 用户也需先执行 chflags noschg 才能更改,极大提升策略抗篡改性】。











