行业资讯
每次启动,/dev/ada1 的权限都会重置,有什么办法让它权限固定住吗?
在VirtualBox虚拟机启动的时候碰到报错发现没有对直通硬盘的读写权限。原来硬盘的默认权限是640 。于是提出问题FreeBSD每次启动/dev/ada1 的权限都会重置有什么办法让它权限固定住吗一言给的答案在 FreeBSD 系统中/dev 目录下的设备节点是由 devfs设备文件系统动态管理的。每次系统启动或重新探测硬件时devfs 会根据默认规则重新创建设备节点因此你手动使用 chmod 修改的权限会在重启后丢失。要永久固定 /dev/ada1 的权限最标准且推荐的方法是配置 devfs.rules。方法一使用 devfs.rules推荐这是 FreeBSD 管理设备权限的标准方式。你可以创建一个自定义规则集专门针对 ada1 设备设置权限。1. 编辑规则文件打开或创建 /etc/devfs.rules 文件bashsudo vi /etc/devfs.rules添加以下内容。这里我们创建一个名为 [local_rules10] 的规则集数字可以是 1-999建议选一个未被使用的数字如 10ini[local_rules10]add path ada1 mode 0666add path ada1p* mode 0666add path ada1匹配设备名 ada1。mode 0666设置权限为 crw-rw-rw-即所有用户可读可写。add path ada1p*同时匹配该磁盘下的所有分区如 ada1p1, ada1p2确保分区也具有相同权限。如果你只需要磁盘本身可以省略这一行。注意如果你希望更安全的权限控制建议不要使用 0666而是将特定用户加入 operator 组然后设置 mode 0660 并保持 group operator。但鉴于你之前遇到 VirtualBox 权限问题0666 是最直接的解决方案。2. 启用规则集编辑 /etc/rc.conf 文件告诉系统在启动时加载这个规则集bashsudo vi /etc/rc.conf添加或修改以下行inidevfs_system_rulesetlocal_rules这里的 local_rules 对应你在 devfs.rules 中定义的方括号内的名字去掉等号和后面的数字。3. 立即应用规则无需重启为了让更改立即生效你可以重新加载 devfs 规则bashsudo service devfs restart或者手动应用规则集bashsudo devfs rule -s 10 applyset(假设你的规则集编号是 10)4. 验证权限再次检查 /dev/ada1 的权限bashls -la /dev/ada1你应该看到权限已经变为 crw-rw-rw-并且即使重启后也会保持不变。方法二将用户加入 operator 组更安全如果出于安全考虑不希望所有用户都能读写磁盘可以将你的用户 skywalk 加入 operator 组因为默认情况下 /dev/ada* 的组所有权是 operator且权限是 0660组可读写。1. 将用户加入 operator 组bashsudo pw groupmod operator -m skywalk2. 重新登录注销并重新登录或者使用 newgrp operator 使组变更在当前终端生效。3. 验证此时skywalk 用户应该能够直接读写 /dev/ada1而无需将其权限改为 0666。这是更符合 Unix 安全模型的做法。为什么之前的 chmod 无效devfs 动态性/dev 不是普通的磁盘文件系统它是一个内存中的虚拟文件系统。设备节点是在内核探测到硬件时动态创建的。重启重置每次启动时内核重新探测硬盘devfs 根据默认模板通常是 root:operator 0660重新创建节点覆盖了你之前的手动修改。总结如果你需要快速解决 VirtualBox 直通权限问题且不介意安全性稍低使用 方法一devfs.rules mode 0666。如果你追求最佳实践和安全性使用 方法二加入 operator 组并确保 devfs.rules 中没有覆盖默认的 0660 权限。对于 VirtualBox 直通场景通常推荐方法一因为 VirtualBox 进程可能需要以当前用户身份直接访问设备节点而 operator 组的权限有时仍会受到其他安全策略的影响。确保在 /etc/devfs.rules 中同时设置了磁盘和分区的权限以避免后续访问分区时出现类似问题。实践在FreeBSD15.1系统中我发现磁盘的权限是640,所以只把用户放入Operate组是不行的。skywalkfb98:~ $ ls -la /dev/ad* crw-r----- 1 root operator 0x6f 7月 28 17:38 /dev/ada0 crw-r----- 1 root operator 0x71 7月 28 17:38 /dev/ada0p1 crw-r----- 1 root operator 0x73 7月 28 17:38 /dev/ada0p2 crw-r----- 1 root operator 0x75 7月 29 01:38 /dev/ada0p3 crw-r----- 1 root operator 0x77 7月 28 17:38 /dev/ada0p4 crw-r----- 1 root operator 0x79 7月 28 17:38 /dev/ada1 crw-r----- 1 root operator 0x85 7月 28 17:38 /dev/ada1p1 crw-r----- 1 root operator 0x88 7月 28 17:38 /dev/ada1p2 skywalkfb98:~ $ sudo chmod 666 /dev/ada1 密码 skywalkfb98:~ $ ls -la /dev/ad* crw-r----- 1 root operator 0x6f 7月 28 17:38 /dev/ada0 crw-r----- 1 root operator 0x71 7月 28 17:38 /dev/ada0p1 crw-r----- 1 root operator 0x73 7月 28 17:38 /dev/ada0p2 crw-r----- 1 root operator 0x75 7月 29 01:38 /dev/ada0p3 crw-r----- 1 root operator 0x77 7月 28 17:38 /dev/ada0p4 crw-rw-rw- 1 root operator 0x79 7月 28 17:38 /dev/ada1 crw-r----- 1 root operator 0x85 7月 28 17:38 /dev/ada1p1 crw-r----- 1 root operator 0x88 7月 28 17:38 /dev/ada1p2设置开机后磁盘权限编辑文件sudo vi /etc/devfs.rules写入[local_rules10] add path ada1 mode 0660启用规则集编辑/etc/rc.conf文件告诉系统在启动时加载这个规则集devfs_system_rulesetlocal_rules这样系统启动就会默认给ada1硬盘660权限而我们的用户已经放入了Operator组自然也就有了读写权限
郑州网站建设
网页设计
企业官网