Linux下的RunLevel和FreeBSD中的security level很容易混淆,本文仅用来作一下标记。
Linux的RunLevel代表不同的运行模式,一般有7种模式,从0-6,这几种模式分别代表不同的运行方式:是不是支持多用户,是不是支持X,是不是支持网络,是不是可以启动服务。
Linux RunLevel有多种方案,不同的发行版(Slackware、Gentoo、Centos等)在细节上各不相同,但大致都差不多:
Run-level 含义 动作
0 Halt 关机
1 Single-user mode 单用户模式
2 Multiuser mode 多用户模式,但不能配置网络,也不能启动网络服务
3 Multiuser mode with networking 标准的多用户模式
4 Not used/user-definable 厂商自定
5 GUI X模式
6 Reboot 重启
这几种模式可以在系统开机时选择,一般是按ctrl+x(lilo)或e(grub)进行选择,在进入系统后,可以用init命令来进入相应的模式。
特别地,可以使用init 0 来关机,init 6来重启——并且这在FreeBSD中同样有效,但是在FreeBSD中的run level定义跟Linux并不相同,下面摘自init man,可以看到0,1,6这三个定义是相同的:
Run-level 消息 动作
0 SIGUSR2 关机
1 SIGTERM 进入单用户模式
6 SIGINT 重启
c SIGTSTP 禁止后续的用户登录
q SIGHUP 重新扫描ttys(5)文件
工作模式,在FreeBSD最开始的选单中也可以看到几个,跟Linux选单最大的区别在于没有X选项,重点见下图的1和2 选项:
这几种模式中,最常用的一种模式就是“单用户”模式,在这个模式下,不会启用网络及其他服务,可以重置root密码,可以修改磁盘等,本质上是尽量避免干扰,来进行本地操作。
从上面的解释可以看到,Linux的runlevel跟FreeBSD的启动模式相对应,本质上是Linux的init和FreeBSD的init相对应,而FreeBSD的security level是怎么回事呢?
先来看FreeBSD的security level,来自security man:
……
-1 永远处于不安全的模式——总是允许系统运行在不安全的模式,这是系统默认的初始值。
0 不安全的模式—— “不可更改”和“只允许添加”这两个标志可以被关闭,所有的设备可以根据他们自身的权限来进行读写。
1 安全的模式——“不可更改”和“只允许添加”这两个标志不能被关闭,所有已经挂载的磁盘系统、/dev/mem以及/dev/kmem不可以打开为写模式;/dev/io(如果系统存在的话)不可以被打开;内核模块不可以被装载或卸载;内核变量debug.kdb.enter sysctl也不能进入内核调试;debug.kdb.panic或其他内核变量也不能导致pavic或trap。
2 高级别安全模式 —— 跟安全模式相同,另加磁盘不可以用写模式打开,无论磁盘是否被挂载(只能用mount)。这个模式不仅排除了卸载文件系统的干扰,并且在多用户模式下禁止使用newfs。
并且,内核时间的调整被限制在1秒钟以内,如果调整的时候超过1秒,则会在日志里面记录一条:“Time adjustment clamped to +1 second”。
3 网络安全模式——跟高级安全模式相同,加上包过滤(ipfw,ipf,pf)规则不能被更改,并且dummynet和pf配置不能调整。
这几个模式看起来很拗口,大致说明一下:
(1)默认的规则为-1,这是大多数工作模式,但这是一种没有任何安全措施的模式;
(2)这几种模式之间的区别在于:不可更改和只允许添加标志;磁盘是否可挂载;磁盘是否可写;内核模块是否可以装卸;防火墙是否可以更改。
(3)级别“0”:级别“0”有点特殊,在描述中说的相当于废话,既然两个标志可以更改,所有设置都可以读写,那还存在什么安全保障呢?实际上,级别“0”仅相当于“过渡产品”,在rc完成之前,属于“-1”级别,但是在rc完成后,就会升级到“1”级别,也就是会进入“安全的模式”,这一点在/etc/defaults/rc.conf中有说明:
……
# Note that setting securelevel to 0 will result
# in the system booting with securelevel set to 1, as
# init(8) will raise the level when rc(8) completes.
……
(4)这几个级别中的磁盘好像挺乱,看下图(有些细节还不是很懂……)
上图中标识:
1――当前级别为-1;
2――对于mount的设备,不允许直接写,也不允许newfs
3――升级到级别1,结果跟-1相同(是意外还是必然?)
4――在级别1中,卸载的设备可以用dd写,其实也可以用newfs
5――在级别2中,卸载的设备也不可以用dd写
6――在级别3中,可以卸载设备
7――在级别3中,卸载的设备仍然不能用dd