安全等级
安全等级为 FreeBSD 内核内置安全机制,可通过 sysctl kern.securelevel 查看当前等级
对于运行时,该值只能在 -1 至 3 五个级别间单向提升(不可降低)
概述
安全等级是内核内置安全机制。安全等级为正值时,内核限制部分操作,root 用户亦不例外。
安全等级机制限制以下功能:
取消设置某些文件标志
如 schg 系统不可变标志
- 通过 /dev/mem 和 /dev/kmem 写入内核内存
- 加载内核模块
- 更改防火墙规则
安全等级定义
内核共设五个安全等级。任何超级用户进程均可提升等级,但任何进程均不能降低等级。各安全等级定义如下:
- -1: 永久不安全 模式 ,系统始终处于不安全模式
- 此为默认初始值
- 0: 不安全 模式
- 可以关闭不可变和仅追加标志
- 所有设备可依其权限读写
- 1: 安全 模式
- 无法关闭系统不可变和系统仅追加标志
- 已挂载文件系统所在磁盘、/dev/mem 和 /dev/kmem 均不可打开以写入
- 如果平台存在 /dev/io,则完全禁止打开
- 无法加载或卸载内核模块
禁止使用 sysctl debug.kdb.enter 进入内核调试器
除非 MAC(9) 策略授予访问权限,例如 mac_ddb(4)
- 也无法通过 debug.kdb.panic、debug.kdb.panic_str 及其他 sysctl 强制触发 panic 或 trap
- 2: 高度安全 模式, 在安全模式基础上
磁盘(无论是否已挂载)均不可打开以写入,mount 操作除外
此等级可阻止以卸载文件系统方式篡改数据,但也意味着多用户模式下无法运行 newfs
内核时间变更受限于不超过 1 秒
超出此范围修改时间将产生日志消息“Time adjustment clamped to +1 second”
- 3: 网络安全 模式, 在高度安全模式基础上
- IP 数据包过滤规则 ipfw(8) 、 ipfirewall(4) 和 pfctl(8) 均无法修改, dummynet(4) 或 pf(4) 配置也无法调整
永久不安全模式与不安全模式的关键差别在于: 前者彻底解除一切安全限制,而后者虽放宽了部分约束,仍保留相当程度的控制力
按 init(8) 的工作方式,如果系统初始安全等级为 0,init 会在首次进入多用户模式前将其提升至 1。由于安全等级只能提升不能降低,此后即便返回单用户模式,系统也至少维持在等级 1
另外需要注意,引导阶段过早将安全等级设为大于 1 的值,可能阻碍 fsck(8) 修复不一致的文件系统 因此建议在 /etc/rc 末尾(多用户启动操作全部完成后)再行设置
修改安全等级
首先确保安全等级设置被启用:
$ sysrc kern_securelevel_enable="YES"
再将 kern.securelevel 设为期望的安全等级(允许的取值范围为 -1 至 3):
$ sysrc kern_securelevel=2 # 重启后安全等级将生效
安全等级只能提升不能降低。设置后若需回退,必须重启系统并在单用户模式下修改 远程管理场景下,过高的安全等级可能限制磁盘写入、内核模块加载等操作,导致无法正常运维 建议先在测试环境中验证影响后再行应用于生产环境
查看运行中系统的当前安全等级:
$ sysctl -n kern.securelevel 2
输出为安全等级当前值
如果大于 0,说明系统至少已启用部分安全保护
| Next: Root桌面登录 | Previous:资源限制 | Home: 安全管理 |