Udev执行脚本时无文件系统写入权限问题求助
解决udev脚本无写入权限的问题
嘿,这个udev权限问题我太熟了!折腾一下午确实闹心,我给你梳理几个靠谱的解决方向:
1. 检查udev规则是否限制了运行用户
udev默认是用root用户执行脚本的——这可是拥有全系统权限的账号,正常来说不会有只读问题。但如果你在规则里加了USER="xxx"或者GROUP="xxx"这类参数,脚本就会切换到低权限用户运行,自然没法写入系统目录或者存储设备。
解决办法二选一:
- 直接删掉规则里的
USER/GROUP参数,让脚本以root身份执行,权限问题直接解决 - 如果必须用特定用户执行,那得给这个用户授予目标目录/设备的写入权限,比如用ACL命令:
或者修改目录所有者:setfacl -m u:你的用户名:rwx /需要写入的目录路径chown 你的用户名:你的用户组 /需要写入的目录路径
2. 确保脚本本身有可执行权限
别笑,真的有人会忘加这个!如果脚本没有可执行权限,udev运行时可能会静默失败,或者即使勉强执行也会出现权限异常。执行下面的命令给脚本加上权限:
chmod +x /你的脚本路径.sh
3. 排查存储设备的挂载模式
如果是写入外接设备本身失败,大概率是设备被挂载成只读模式了。你可以在脚本里先卸载再重新挂载为可读写:
# 替换成你的设备路径,比如/dev/sdb1 umount /dev/sdb1 # 重新挂载为可读写模式,挂载点提前创建好 mount -o rw /dev/sdb1 /mnt/usb-mount-point
或者直接在udev规则里指定挂载参数,一步到位:
SUBSYSTEM=="block", KERNEL=="sd*1", ACTION=="add", RUN+="/bin/mount -o rw /dev/%k /mnt/usb"
4. 注意udev的执行环境限制
udev运行脚本时的环境非常“干净”——不会加载用户的shell配置(比如~/.bashrc),很多系统默认路径也可能没包含进去。如果脚本里用了相对路径的命令(比如只写mkdir而不是/bin/mkdir),可能会导致看似权限不足的问题。建议脚本里所有命令都用绝对路径。
最后给你贴个靠谱的udev规则示例(不带用户限制,以root执行):
SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="ext4", RUN+="/usr/local/bin/handle-usb.sh"
内容的提问来源于stack exchange,提问作者Griffen
相关产品推荐
相关产品推荐

