您的位置:首页 > 运维架构

找回Ubuntu系统密码的若干尝试

2014-10-31 00:00 120 查看
摘要: 如何在不知原密码的情况下修改Ubuntu的密码,网上有很多方法,这里我用Ubuntu 14.04 LTS进行了一些尝试,对有可能可行的方法总结如下。

如何在不知原密码的情况下修改Ubuntu的密码,网上有很多方法,这里我用Ubuntu 14.04进行了一些尝试,对有可能可行的方法进行总结。

注意:本文涉及的密码有两种,一是root密码,二是能使用sudo命令的用户密码,二者是有区别的。在安装Ubuntu时程序会让你新建一个用户,这个系统的第一个用户便是能使用sudo命令来获得root权限,此时root是没有密码的,因而不能执行su命令。打开/etc/shadow文件便能清楚看到第一行root项表示密码的第二个字段是!,没有密码,而在该文件末尾能找到你安装系统时所建用户,该行的第二个字段是较长的已被加密过的密码,如下图所示。



一般Ubuntu是不会提示你给root设密码的,而下文会看到,没有root密码的话在存在某种程度的安全隐患。要给root设密码也很简单,先用

sudo -i


输入用户密码后能获得root权限,再用

passwd


就设置root密码了,设置完成后打开/etc/shadow文件查看首行就能看到表示密码的第二字段已经是一串已加密的密码了。下面开始进入正题。

找回密码的基本原理是:通过各种方法获得root权限,或把储存密码的/etc/shadow文件中root或者能使用sudo命令的用户(在原先没有设置root密码的情况下)表示密码的第二字段删除,再用passwd设置新密码。有如下几种方法:

1.由Recovery mode 进入修改

启动电脑进入grub选择菜单后,对于Ubuntu系统会出现多个启动项,选择

Ubuntu Kylin GNU/Linux 高级选项


进入,再选择

Ubuntu Kylin GNU/Linux, with Linux 3.13.0-36-generic(recovery mode)


进入会给出如下的Recovery Menu:



选择带“root”一项进入。此时,会出现两种情况:

(1)对于原先没有root密码的系统会直接获取root权限,便可以直接进行设置新密码的操作。由于在此模式下根目录文件系统挂载为只读,所以需要用下面的命令来重新挂载成可读写的:

mount -o remount rw -t ext3 /


之后便可直接用passwd设置root密码或用“passwd 用户名”修改该用户密码。或者编辑shadow文件,删除相应用户的密码,即第一个图中最后一行(jayson用户)的第一个分号(:)和第二个分号之间的字段。然后保存重启即可不输入用户密码直接进入系统,再用passwd设置新密码。

(2)对于原先已设置了root密码的系统,此时系统会要求你输入root密码已获得root权限,这里便可看出root密码和能使用sudo命令的用户密码之间的区别。明显,这种情况下就干不掉root密码了。

2.进入单用户维护模式修改

进入grub选择菜单后,在ubuntu的正常启动项上点“e”进入编辑启动项模式,得到如下的界面



在倒数第二行有“linux /boot/vmlinuz-...”字样,把光标移动到“ro”处,把“ro”改为“rw”(即将只读挂载直接改成可读写,故在进入单用户模式后就不用再重新挂载根文件系统了),在其后输入“single”,并将该行剩下部分删除,即这一行改成:

linux /boot/vmlinuz-3.13.0-36-generic root=...(略写) rw single


然后按Ctrl-x或F10进行引导,便能进入单系统维护模式,此时也会出现跟上一种方法相同的情况,即原先没设root密码的能直接获得root权限,对密码进行修改;而对有root密码的系统仍会要求输入密码,仍旧干不掉原root密码。

3.略过init进程直接调用bash来修改

这一方法跟上一方法一样需要进入编辑启动项,将倒数第二行改为:

linux /boot/vmlinuz-3.13.0-36-generic root=...(略写) rw init=/bin/bash


然后按Ctrl-x或F10进行引导,就能直接获得root权限!无论系统原先是否有设root密码,即root密码能直接干掉了。之后的步骤就跟第一个方法一样了,直接用passwd修改密码或修改shadow文件。不过这一方法有个问题就是只能通过长按关机键来强制关机,无法使用“reboot”、“shutdown”、“init 0”等命令重启或关机,输入“exit”后直接进入类似于死机的状态。注意到终端行头为“root@(none):/#”,即主机名为none,这是略过init进程所致,但不知跟无法正常关机重启是否有关系。

4.用启动光盘/U盘挂载根目录修改

工具:一个Ubuntu桌面的启动光盘或U盘

制作Ubuntu的启动光盘/U盘的方法百度一下有很多,不细说了。用光盘/U盘启动,进入Ubuntu桌面,打开终端,输入命令

sudo -i


这里不用输入密码就能直接获得root权限,查看Ubuntu的根目录在哪个分区:

fdisk -l


假设根目录在/dev/sda4,则将其挂载到/mnt下(如果不确定哪个才是根目录的分区就把linux文件系统的分区一个一个试下):

mount /dev/sda4 /mnt


之后的步骤就跟上面的方法一样了,进入/mnt/etc对shadow文件进行修改,重启系统用passwd设新密码。注意:这一方法使用的是启动光盘/U盘上的试用系统的root,因而只能通过修改shadow文件删除密码字段这一途径来重设密码,直接用passwd修改密码是没有意义的。

总而言之,通过recovery mode和单用户维护模式来重设密码只能在系统原先没设root密码的情况下才可行(估计应该有不少人没有设root密码的习惯),干不掉root密码,而绕过init进程直接调用bash或者借助启动光盘/U盘上的试用系统则可以干掉root密码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息