Linux系统错误恢复-/etc/passwd文件解析
时间:2010-08-29 来源:cup
Linux大家都很熟悉,其中/etc/passwd和/etc/shadow这两个文件对于整个系统来说是至关重要的,甚至可以关乎到系统能否正常使用和登陆。本人就最近一次的linux主机灾难恢复来阐述/etc/passwd的作用及其重要性。
故障起因:
最近在学习账户管理,创建账户useradd sky然后将root加入到sky用户组中usermod -G sky root,之后将用户sky删除userdel –r sky,然后又新建了用户sky,将其加入到test用户组中,useradd -g test sky,重启之后发现系统无法进入,报错如下:
login as: root
[email protected]'s password:
Last login: Sat Jul 31 18:48:53 2010 from 192.168.192.1
-bash-3.2#
使用其他用户登录也无法登陆:
login as: sungh
[email protected]'s password:
Last login: Sat Jul 31 18:36:25 2010 from 192.168.192.1
[sungh@localhost ~]$ su -
口令:
su: warning: cannot change directory to sky: 没有那个文件或目录
-bash-3.2#进入图形化界面tty7也报错,报错信息如下图所示:
-bash-3.2# ls /home 此处可以看出系统中并无sky用户
small sungh test
后果就是无法登陆进入系统,系统处于瘫痪中。
故障分析:
根据报错信息来看,su: warning: cannot change directory to sky: 没有那个文件或目录
Cat /etc/passwd查看如下:
-bash-3.2# cat /etc/passwd
root:x:0:0:sungh,china's office,110,120:sky:/bin/bash …………………………………………………………
test:x:502:504::/home/test:/bin/bash
系统中有sky用户组却没有sky这个用户,初步怀疑是/etc/passwd有问题导致
故障处理:
于是修改/etc/passwd的root字段,
修改为root:x:0:0:root:sungh:sky:/bin/bash。然后重启,使用root登陆,发现root都无法登陆了,更崩溃了。登陆提示如下:
login as: root [email protected]'s password: Access denied
于是乎,进入单机模式,恢复之前修改的/etc/passwd文件的root字段,
进入单机用户模式的方法如下:
出现GRUB引导画面时,按字母e键,进入GRUB编辑状态。
按↑键或↓键选择相应的引导项,并再接字母e键进入命令行编辑。
在出现的命令行上添加"1"或single,并按键,返回GRUB编辑状态。
按字母b键,引导进入单用户模式。
之后仔细查看/etc/passwd字段的含义,发现之前的改动是错误的,严格对照错误信息进行改动,将root字段如下改动:
root:x:0:0:root:/root:/bin/bash恢复了系统的正常登陆。
/etc/passwd字段信息的含义如下所示:
LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL
LOGNAME 用户登录名
PASSWORD 已过时,加密的密码存储在/etc/shadow中,这里都是x
UID 用户ID,任何拥有0值UID的用户都具有根用户(系统管理员)访问权限,通常500是默认的第一个新建用户的ID
GID 用户组ID,同上
USERINFO 备注信息
HOME 用户home目录路径,即用户的工作目录
SHELL 给用户指定的shell程序
故障总结:
故障的原因是由于/etc/passwd文件信息错误导致的。
起初将root字段改为root:x:0:0:root:sungh:sky:/bin/bash,与正确的字段对比发现,最后一个字段shell字段被挤到第八个字段中,系统只认得7个字段,导致用户root在登录时无法取得相应的shell,故登陆报错,访问拒绝。
而后恢复之前的信息,在仔细检查此字段,发现用户shell登陆的时候无法取得家目录,如上图截图所示,修改家目录sky为/root,其余无需改动,之后重启,登陆,问题解决。
userdel -r sky时,组sky已经删除,而root用户还有在组sky里,所以是可能导致进入-bash-3.2#模式的原因。(应该是shell)-bash-3.2#是找不到默认bash配置文件的情况下bash这个shell初始的提示符。类似DOS提示符。
注:此文是本人与(QQ:57894669)一起完成,在此提醒大家,尽量不要使用root进行操作,因为权限太大~出现问题后,仔细分析,总会有解决办法的。