当前位置: 首页 > news >正文

每次启动,/dev/ada1 的权限都会重置,有什么办法让它权限固定住吗?

在VirtualBox虚拟机启动的时候,碰到报错,发现没有对直通硬盘的读写权限。原来硬盘的默认权限是640 。于是提出问题:

FreeBSD每次启动,/dev/ada1 的权限都会重置,有什么办法让它权限固定住吗?

一言给的答案:

在 FreeBSD 系统中,/dev 目录下的设备节点是由 devfs(设备文件系统)动态管理的。每次系统启动或重新探测硬件时,devfs 会根据默认规则重新创建设备节点,因此你手动使用 chmod 修改的权限会在重启后丢失。

要永久固定 /dev/ada1 的权限,最标准且推荐的方法是配置 ‌devfs.rules‌。

方法一:使用 devfs.rules(推荐)
这是 FreeBSD 管理设备权限的标准方式。你可以创建一个自定义规则集,专门针对 ada1 设备设置权限。

1. 编辑规则文件
打开或创建 /etc/devfs.rules 文件:

bash
sudo vi /etc/devfs.rules
添加以下内容。这里我们创建一个名为 [local_rules=10] 的规则集(数字可以是 1-999,建议选一个未被使用的数字,如 10):

ini
[local_rules=10]
add path 'ada1' mode 0666
add path 'ada1p*' mode 0666
add 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 文件,告诉系统在启动时加载这个规则集:

bash
sudo vi /etc/rc.conf
添加或修改以下行:

ini
devfs_system_ruleset="local_rules"
这里的 local_rules 对应你在 devfs.rules 中定义的方括号内的名字(去掉等号和后面的数字)。

3. 立即应用规则(无需重启)
为了让更改立即生效,你可以重新加载 devfs 规则:

bash
sudo service devfs restart
或者手动应用规则集:

bash
sudo devfs rule -s 10 applyset
(假设你的规则集编号是 10)

4. 验证权限
再次检查 /dev/ada1 的权限:

bash
ls -la /dev/ada1
你应该看到权限已经变为 crw-rw-rw-,并且即使重启后也会保持不变。

方法二:将用户加入 operator 组(更安全)
如果出于安全考虑,不希望所有用户都能读写磁盘,可以将你的用户 skywalk 加入 operator 组,因为默认情况下 /dev/ada* 的组所有权是 operator,且权限是 0660(组可读写)。

1. 将用户加入 operator 组
bash
sudo pw groupmod operator -m skywalk
2. 重新登录
注销并重新登录,或者使用 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组是不行的。

skywalk@fb98:~ $ 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 skywalk@fb98:~ $ sudo chmod 666 /dev/ada1 密码: skywalk@fb98:~ $ 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_rules=10] add path 'ada1' mode 0660
启用规则集

编辑/etc/rc.conf文件,告诉系统在启动时加载这个规则集:

devfs_system_ruleset="local_rules"

这样系统启动就会默认给ada1硬盘660权限,而我们的用户已经放入了Operator组,自然也就有了读写权限!

http://www.cnnetsun.cn/news/3714249.html

相关文章:

  • TTS-Backup终极指南:守护你的桌游模拟器珍贵数据
  • Shell - 文件引入
  • docker安装shipyard
  • 折扣卡分销小程序开发,高峰期核销接口限流优化思路
  • iOS虚拟定位终极指南:免费修改iPhone位置跨平台工具完整教程
  • 2026 中小企业 AI 搜索流量破局:基于轻量化 RAG 架构与语义向量对齐的 GEO 平台工程实战
  • 计算机毕业设计之基于springboot的大学生旧货交易平台的设计与实现
  • 计算机毕业设计之基于SpringBoot的大学生健康管理系统设计与实现
  • 计算机毕业设计之基于SpringBoot的大学生兼职信息服务平台
  • ComfyUI-VideoHelperSuite VHS_VideoCombine节点缺失问题:完整故障排查与解决方案
  • Godot Shader特效:用SCREE_TEXTURE实现简单的屏幕滤镜
  • [kafka]消息中间件Kafka如何保证数据可靠性
  • 传统图像处理算法总结
  • Hibernate一对多关系
  • 如何高效清理重复文件:dupeGuru完整使用指南
  • 根据JDK深入详细学习理解JAVA线程池
  • 3_1_1.JS--函数
  • 选择排序
  • 70+个Adobe Illustrator脚本终极指南:快速提升设计效率的完整教程
  • Python的标准库,random()
  • 剑指Offer_编程题(C#实现)_ 链表中倒数第k个结点
  • 地铁轨道交通无线动能照明方案,站台附属照明无线化改造详解
  • pacemaker控制haproxy容器
  • JAVA毕设选题推荐:基于SpringBoot+Vue的校园流浪动物报备救助与养护管理平台 大学生流浪动物公益救助服务系统设计【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【JAVA课程设计/毕业设计】基于 SpringBoot+Vue 的前后端分离架构下高校学习竞赛成果管理系统 高校学生赛事成果溯源、管理与线上展示平台【附源码、数据库、万字文档】
  • 餐饮CPS平台开发公司排名,多级佣金自动结算源码讲解
  • 物联网设备硬件级安全方案:SE050与MK64FX512VDC12协同设计
  • centos7安装libpcaplibnids
  • PDF加密技术实践:算法原理、兼容性与国内免费工具性能对比
  • 元宇能量环开发:从质疑到深度体验,后来我才明白科技轻养生的逻辑【真实感受】