Linux系统中设置了7种运行级别,在每种运行级别下所运行的服务都不相同,其中单用户模式对应的是运行级别为1。在单用户模式下,系统处于最原始的状态,所有网络服务都未启动,所有人都可以直接以Root用户身份并且无需输入密码即可登录系统,所以单用户模式常被用于修复各种系统故障。下面以找回Root用户密码为例来介绍单用户模式的使用。
图1 此时按回车键
图2 追加启动参数1
要进入单用户模式,首先需要将系统重启,在系统启动到倒数计时按下回车键(如图1),此时会出现GRUB引导菜单。
在GRUB引导菜单中按下“a”键,可以向系统内核kernel追加启动参数。
这里向kernel追加启动参数“1”(如图2)。按下回车键之后,系统便会启动进入运行级别1,即单用户模式。
图3 为GRUB设置引导菜单密码
图4 系统提示按“p”键输入密码
在单用户模式下,用户无需进行身份验证,便会自动以Root身份登录系统,从而获得对系统的最高管理权限。
由于在RHEL6系统的单用户模式下默认开启了SELinux安全设置,因而无法直接修改Root用户密码。我们可以先执行“setenforce 0”关闭SELinux,使之成为“Permissive”许可模式,再使用passwd命令修改Root密码。
虽然单用户模式为系统维护带来了诸多便利,但是其风险也是显而易见的,如果任何人都可以随意进入单用户模式,而Linux服务器又无法保证物理安全的话,那么将存在很大的安全隐患。因而在生产环境中通常需要为GRUB引导菜单设置密码,通过GRUB密码阻止非授权用户进入单用户模式,从而增强系统安全性。
另外,如果直接对GRUB进行明文加密也是非常不安全的,所以需要使用MD5对密码进行加密,相关命令是grubmd5-crypt。
下面利用grub-md5-crypt命令生成经MD5加密后的密码。
接下来需要修改GRUB的配置文件“/etc/grub.conf”,这里要用到password参数。将刚才生成的MD5密文复制下来,再按照“password --md5 MD5密文”的格式在“/etc/grub.conf”文件中设置密码。
密码可以放在“/etc/grub.conf”文件中的任意位置,但放在不同的位置就会在不同的时刻生效。比如将密码放在“default”参数所在行的上方,就会在BIOS自检之后、GRUB引导之前就要求输入密码,也就是每次系统启动或重启时都会要求输入密码。在生产环境中一般都是将密码放置在“title”参数所在行的上方,这样只有当用户要进入GRUB引导菜单时才会要求输入密码。
修改好的“/etc/grub.conf”文件如图3所示。
修改完“/etc/grub.conf”文件之后,将系统重启,再次进入GRUB引导菜单时,会出现图4所示的提示,要求用户按“p”键输入密码。
输入正确密码之后,就可以进入GRUB引导菜单了。接下来就可以按照之前的操作,向kernel追加启动参数,从而进入单用户模式。