纸上得来终觉浅,绝知此事要躬行。
1. CentOS5/6
1.1 修改密码
CentOS5/6 修改 ROOT 密码
现实生活中可能会出现这种问题,忘记主机的 root
密码。如果你是网络管理员,这对你来说是不可容忍的,那之后我们应该怎么办呢?
Linux
的启动级别中有一个单用户模式启动,也就是启动级别 1
,在系统启动的时候给系统的内核传递一个参数 1
或者 single
,以单用户模式登陆操作系统,通过 passwd
命令来重设 root
用户的密码。
- 重启操作系统(
CentOS
),默认会在启动界面(grub
)停留几秒钟,随便按一下键盘上的一个键,此时就会进入到操作系统配置引导界面。
对应界面里的
title
是在/boot/grub/grub.conf
这个配置文件中指定。如果系统中存在多个kernel
内核,我们可以手动进行设定,使其在开机的时候可以启动。一般情况下,升级内核,系统会自动帮我们创建的。根据提示键盘输入
e
可以进入到编辑界面
这三个选项就是
/boot/grub/grub.conf
文件里的配置信息root (hd0,0)
- 指定内核文件所在磁盘的位置
kernel /vmlinuz-2.6.32...
- 指定内核文件的版本以及参数选项的设定
initrd /initramfs-2.6.32...img
ramfs
的所在img
文件位置,用于硬盘加载驱动
# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,1)
# kernel /boot/vmlinuz-version ro root=/dev/sda2
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,1)
kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=6e24ec7a-2d19-466e-bacc-92750b1f4bef rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-358.el6.x86_64.img
- 将光标移动到第二个选项处,同样按下键盘上的
e
键进入到编辑界面,此时我们在后面追加参数1
或者参数single
就可以以单用户的模式登陆操作系统。
- 回车进入到上层的界面,之后按下
b
键就是启动操作系统。此时,将以很快的速度进入单用户模式,因为不用启动多余的服务程序。进入不需要输入root
密码,通过passwd
命令来重置我们的root
用户的密码
- 然后我们可以通过
exit
命令退出单用户模式,此时操作系统内核就会根据/etc/inittab
配置文件中设置的默认启动级别来启动。或者直接输入init 3
、init 5
指定运行级别来启动操作系统。
1.2 grub 加密
我们可以看到只要我们的物理主机很容易被他人接近,那么对我们来说就意味着并不安全,所以我们可以通过设置**GRUB
加密**来对开启一层密码防护机制,来保护主机的安全。
- 通过
grub-md5-crypt
来生成md5
加密密码
# grub-md5-crypt
Password:
Retype password:
$1$UGA2B1$DriIdrVTEgVg95fHHX4H./
- 将
password --md5
密码添加到/boot/grub/grub.conf
这个配置文件里,即可对grub
加密。
# vi /boot/grub/grub.conf
password --md5 $1$UGA2B1$DriIdrVTEgVg95fHHX4H./
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,1)
kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=6e24ec7a-2d19-466e-bacc-92750b1f4bef rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-358.el6.x86_64.img
- 当我们下次相对
grub
菜单进行修改的时候,会提示我们按p
键来输入密码。如果密码正确,则可以进行修改,不然则否。
- 通过
GRUB
的加密算法我们可以对进入GRUB
进行加密,这样就能防止别人恶意进入单用户模式,从而修改 root 密码了。当然,如果连GRUB
的秘密都忘记的话,并且又忘记了root
密码,那就真的不能登陆到root
用户了。
其实,这样做也并不一定安全。如果有不法分子将主机中的硬盘卸下之后重新接入一个新的操作系统,主机中的数据照样可以得到。
2. CentOS7
CentOS7 修改 ROOT 密码
开机时随便按下键盘,进入以下菜单
光标停留在第一项,并按
e
,进入编辑界面,定位到ro
所在的位置。
- 把
ro
改成rw init=/sysroot/bin/sh
完成之后按Ctrl+x
- 启动到单用户模式后的界面,依次输入以下命令进行
root
密码修改,修改完成之后强制重启即可。在此提示符下输入以下命令,命令不会显示出来,输入完成后按回车。 -chroot /sysroot/
切换根目录 -passwd root
输入密码,如果安装的语言是中文可能会出现乱码 -touch /.autorelabel
如果之前开启了selinux
,输入此命令,会多一个提示符 -exec /sbin/init
或者exec /sbin/reboot
重启系统