转发一篇关于linux登陆密码破解的文章
Tofloor
poster avatar
187******69
deepin
2013-08-19 00:10
Author
这篇文章是别人发的,看起来原作者应该是个老外,并且感觉说的还是挺有用的,跟大家分享下。

注意:文中的 lilo 貌似一个引导程序,应该根 gurb类似。

Linux 中忘记用户密码的解决方案

尽管我从来不会忘记自己的密码,但是我还是会仔细研究一下这个专题,以防将来有一天突然看到我的母亲在阅读我的 ICQ 聊天记录时,可能会派上用场。
如果是普通用户(非 root 用户)忘记密码,这个不是什么大问题,因为 root 可以修改任何人的密码。举个例子(要求 root 用户)
passwd barbara
按回车键后,将提示输入用户 barbara 的新密码(root 用户不需要知道旧的密码)。如果一个普通用户想要修改自己的密码,该用户会被要求输入旧的密码(这是一个安全特性,以避免当你离开你的坐位有人试图修改你的密码)。
如果是超级用户,问题会复杂些,那么有如下两种解决方案:
第一种办法
最容易解决“忘记密码问题”的方法是将 Linux 重新启动到单用户模式,可以在“lilo”的命令提示符下输入:
linux single
这种办法将使你变成 root 超级用户而不需要输入任何密码。现在作为 root 用户,你可以使用以下命令重新设置密码(不需要输入旧的密码)
passwd
你可能觉得这实在是太不安全了!那是因为,如果有人可以物理上“访问”你的计算机硬件,没有计算机系统是安全的。但是,我并不喜欢在我的计算机上有这个“linux single”的漏洞存在,所以我在文件/etc/lilo.conf里(在“image=”段落的尾部)加上以下内容就可以把这个漏洞拔除:
password=”my_password”
restricted
这个设置使得 Linux 启动时,在 lilo 的命令提示符下,当用户输入 linux 带任何参数时必须输入正确的密码。如果用户不是使用命令行的启动模式而使用正常的启动模式,没有密码也能够启动系统。为了让修改生效,必须重新运行 lilo 命令。因为我设置的密码在 lilo.conf 文件里没有加密,我还必须把文件 /etc/lilo.conf 改成只有 root 用户可以读写:
chmod 600 /etc/lilo.conf


另一个解决“超级用户密码丢失”的办法是使用 Linux 启动盘或者安装CD来启动你的计算机。然后找到你计算机硬盘上的 root 分区,使用 mount 命令挂载该分区,接着修改文件 /etc/shadow。因为当我从软盘启动 Linux 时,我可以不需要输入任何密码就成为 root 用户。在密码文件里,把 root 用户的加密密码删除,所以 root 的密码将是空的。
用户帐号的信息储存在以下纯文本文件里:
/etc/passwd
/etc/shadow
文件 /etc/passwd 包含了我计算机上的所有用户,并且很容易阅读。文件每行包含一个帐号信息,总共包含六个“:”间隔符号(这意味着七个字段)。举例如下:
/etc/passwd 文件例子:
root:0:0:root:/root:/bin/bash
bin:1:1:bin:/bin:/sbin/nologin
daemon:2:2:daemon:/sbin:/sbin/nologin
adm:3:4:adm:/var/adm:/sbin/nologin
ftp:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:99:99:Nobody:/:/sbin/nologin
apache:48:48:Apache:/var/www:/sbin/nologin
1
root
登录用户名
2
x
字符x
3
0
用户标识
4
0
该用户的优先用户组标识
5
root
注释(比如用户的全名)
6
/root
用户的主目录(HOME DIRECTORY)
7
/bin/bash
用户的shell的名字

真正最重要的用户信息其实储存在文件 /etc/shadow 文件里。这个文件相对安全因为只有 root 用户才能阅读。在这个文件里,每行包含九个字段:
1
登录用户名
2
加密后的密码
3
从1970年1月1日到上一次修改密码的天数
4
距离下一次修改密码的天数
5
密码定期作修改的天数
6
密码即将过期时提前通知用户的天数
7
密码过期到用户被取消的天数
8
密码被取消时距离1970年1月1日的天数
9
预留字段
一些旧的 Unix 版本不包含/etc/shadow文件,而是把密码存放在 /etc/passwd 每行中的第二个字段。这个字段在新的系统中只显示一个“x”字符。
举个例子,我的 /etc/shadow 文件中的 root 用户看起来是这样的:
root1$BuPbmLAz$1G7.evIChyqaEI0TlZp0F.:11071:0:99999:7:-1:-1:134540356
当密码被消除后,看起来是这样的:
root::11071:0:99999:7:-1:-1:134540356
现在,root 用户就没有密码了,所以我就可以重新启动计算机,在 login 登录提示下,输入“root”,对于密码提示只需要按回车键就可了(没有密码)。登录成功后,可以立刻使用以下命令修改 root 密码:
passwd
有个例外,尽管在 /etc/shadow 删除了密码,对于 Debian 的发行版本并不允许你按“无密码”状态登录,在这种情况下,你需要做的是用其他用户(密码已经)的加密后的密码取代 root 的密码,然后使用该密码重新登录。
想给远程用户设置用户帐号,用电子邮件发送加密密码也是一个安全的办法,“我正在帮你在我的计算机上设置 ftp 帐号,请把你的加密密码用电子邮件发送给我”。等你收到加密密码后,把它插入到 /etc/shadow 文件里。这样,用户就可以登录了,因为只有她知道她的密码,其他人不知道。
为了让我的计算机没有“软盘访问”功能有点难度,我喜欢在没有软驱的情况下运行计算机。不幸的是,Linux 光盘现在是可以自启动的。我在 BIOS 里设置启动设备的顺序以保证系统从硬盘启动而不是软驱或者光驱,然后给 BIOS 设置加上密码保护,这样就没有其他人能够修改 BIOS 设置。但是,我还是很担心 BIOS 的密码很容易被破解,或者有人打开计算机盖把 BIOS 的电池放电来重新设置 BIOS。还可能有人把我的硬盘拿走然后在别的计算机上阅读。所以,我正在考虑在我的计算机上安装一个现在已经有效的 Linux“加密文件系统”,但是以其考虑这么多麻烦问题,我觉得还是干脆把计算机锁在屋里才是一个真正的好办法。这些听起来头很大吧?事实大概也是这样的――这里我只是把一些计算机的安全问题稍微罗列了一下,即使在 Linux 下,如果黑客有潜在可能可以直接接触你的计算机硬件,Linux 也是不安全的。
Reply Favorite View the author
All Replies
cxbii
deepin
2013-08-19 02:50
#1
没仔细看,修改密码还有一种方式是进入单用户模式啊,不过前提没禁用这个模式
Reply View the author
woodelf
deepin
2013-08-19 03:49
#2
没仔细看,修改密码还有一种方式是进入单用户模式啊,不过前提没禁用这个模式
可以归类为无脑转帖,而且最后一句话你再看看。
Reply View the author
cxbii
deepin
2013-08-19 04:26
#3
[quote]没仔细看,修改密码还有一种方式是进入单用户模式啊,不过前提没禁用这个模式
可以归类为无脑转帖,而且最后一句话你再看看。[/quote]
最后一句话,气死我是看到的了。不过有事就马上下了,哎

我去删掉那话得了
Reply View the author
187******69
deepin
2013-08-19 18:26
#4
没仔细看,修改密码还有一种方式是进入单用户模式啊,不过前提没禁用这个模式
对了想问一下,如果原来设置主文件夹的数据是 加密的 修改密码之后(修改后的密码和原来的不一样),原来的数据还能读出来吗?
Reply View the author
187******69
deepin
2013-08-19 18:28
#5
[quote]没仔细看,修改密码还有一种方式是进入单用户模式啊,不过前提没禁用这个模式
可以归类为无脑转帖,而且最后一句话你再看看。[/quote]

看完以后 ctrl c + ctrl v 而已,用不着说这种伤人的话吧。
Reply View the author
woodelf
deepin
2013-08-19 18:47
#6
[quote][quote]没仔细看,修改密码还有一种方式是进入单用户模式啊,不过前提没禁用这个模式
可以归类为无脑转帖,而且最后一句话你再看看。[/quote]

看完以后 ctrl c + ctrl v 而已,用不着说这种伤人的话吧。[/quote]
现在不少发行版通常有单用户模式保护,即使进单用户模式,仍然需要root密码。这文章里的方法可以说早就不适用了。个人也认为确实应该执行单用户模式保护,虽然是防君子不防小人的做法。
另外,如果能用LiveCD等环境来操作,直接chroot即可,修改/etc/passwd和/etc/shadow是相当不明智的。
一种比较好的方式是,在grub的kernel或Linux行添加一句
  1. init=/bin/bash
Copy the Code
来启动进入bash环境,然后通过
  1. mount -o remount,rw /
Copy the Code
来挂载/。
如果有独立分区的/var、/usr等一般不需要挂载,只要确保/etc和/sbin确实被挂载即可。之后直接passwd重置密码,这种方式可绕过单用户保护。(其实这种才是BSD所定义的单用户模式,即只提供只读的shell环境,而不是直接把root身份交给用户)
已验证,此方法同样适用于采用systemd并已实施usr merge的发行版。
转文章我个人不反对,但是转载前最好亲自验证且注意时效性。
Reply View the author
187******69
deepin
2013-08-19 23:14
#7
谢谢了,本人小白,受教了。
Reply View the author