所以我的情况有些特殊。
机器启动后,我需要机器上的一个驱动器具有可全世界写入的未格式化分区。
原因:应用程序正在该分区上构建它自己的文件系统。
问题:
我编写了一个 systemd 脚本,它可以执行chmod a+rw /dev/$partition_name
stat
如果我通过或检查权限ls -l
,“其他”可写权限看起来不错
例如brw-rw-rw-
然而,一旦机器启动,权限就会改变为:
brw-rw---
。
所以问题是:
- 为什么权限不断翻转?
- 正确的做法是什么?
所以我的情况有些特殊。
机器启动后,我需要机器上的一个驱动器具有可全世界写入的未格式化分区。
原因:应用程序正在该分区上构建它自己的文件系统。
问题:
我编写了一个 systemd 脚本,它可以执行chmod a+rw /dev/$partition_name
stat
如果我通过或检查权限ls -l
,“其他”可写权限看起来不错
例如brw-rw-rw-
然而,一旦机器启动,权限就会改变为:
brw-rw---
。
所以问题是:
最有可能的是,udev 在规则处理之后应用了标准权限。换句话说,您的服务运行得太早,因为它没有声明正确的依赖关系,所以它与其他服务竞争。
设备不会立即创建 - udev 会花一段不为零的时间配置设备(无论是更改 /dev 节点权限、更改硬件配置还是加载固件),并且启动期间想要使用该设备的程序应该等待“就绪”事件。例如,
After=dev-sdc3.device
如果您的服务使用 /dev/sdc3,则应该等待“就绪”事件。使用 udev 规则设置设备节点的权限。
(我确信您的应用程序不需要它是全世界可读和可写的。)