原文地址:http://www.linuxeden.com/html/softuse/20100413/102546.html

 

尽管我从来不会忘记自己的密码,但是我还是会仔细研究一下这个专题,以防将来有一天突然看到我的母亲在阅读我的 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:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin

1root登录用户名
2x字符x
30用户标识
40该用户的优先用户组标识
5root注释(比如用户的全名)
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 用户看起来是这样的:

root:$1$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 也是不安全的。

Logo

更多推荐