Centos7--忘记root用户密码

时间:2024-04-06 13:05:48

突然发现服务器root用户登不上了,在机房解决了半天,在此用虚拟机记录一下操作过程。

重启服务器,出现Centos7登录选择页面时,按e进入GRUB2引导页

                                       Centos7--忘记root用户密码

编辑linux16 这一行  最后添加  rd.break console=tty0

                            Centos7--忘记root用户密码

Ctr+x来继续启动

                         Centos7--忘记root用户密码

执行目录挂载,改变根目录

mount -o remount,rw /sysroot

chroot /sysroot

                        Centos7--忘记root用户密码

输入passwd修改root密码,如果页面出现乱码使用LANG=en修改显示编码

                       Centos7--忘记root用户密码

这里物理机服务器输入passwd显示:

Can not identify you

输入passwd root,提示:Unknown user name root.

参考链接https://blog.51cto.com/shansongxian/1414793

修改/etc/passwd以及/etc/shadow文件,发现/etc/passwd中竟然没有root用户信息。添加一行:

root:x:0:0:root:/root:/bin/bash

更新password文件会导致SELinux安全上下文文件错误。键入以下命令在下次系统引导前重新标记所有文件: 
touch /.autorelabel

重新挂载系统为只读: 
mount -o remount,ro /

                         Centos7--忘记root用户密码

                     Centos7--忘记root用户密码

键入exit命令退出chroot环境,再次键入exit命令完成初始化,完成系统引导,最终完成root密码修改。

这里一直好奇怪,为什么/etc/passwd中没有root用户记录信息了呢

/etc/passwd文件格式解释

                    Centos7--忘记root用户密码

在该文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下: 

  注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序 

  (1)注册名(login_name):用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的。这与MSDOS/Windows是不一样的。 

  (2)口令(passwd):系统用口令来验证用户的合法性。超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。 现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。 此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。 

  (3)用户标识号(UID):UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用 UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特 定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。 

  (4)组标识号(GID):这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标 识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在 passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。 

  (5)用户名(user_name):包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。 

  (6)用户主目录(home_directory):该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。 在Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每 个用户配置了自己的主目录。个人用户的文件都放置在各自的主目录下。 

  (7)命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名, 如/bin/bash。 需要注意的是,系统管理员通常没有必要直接修改passwd文件,Linux提供一些账号管理工具帮助系统管理员来创建和维护用户账号。 

/etc/shadow文件格式解释

                      Centos7--忘记root用户密码

  1. 账户名:账户名与/etc/passwd里面的账户名是一一对应的关系。
  2. 密码:这里可以看到3类,分别是奇奇怪怪的字符串、*!!其中,奇奇怪怪的字符串就是加密过的密码文件。星号代表帐号被锁定,双叹号表示这个密码已经过期了。奇奇怪怪的字符串是以$6$开头的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
  3. 修改日期:这个是表明上一次修改密码的日期与1970-1-1相距的天数密码不可改的天数:假如这个数字是8,则8天内不可改密码,如果是0,则随时可以改。
  4. 密码需要修改的期限:如果是99999则永远不用改。如果是其其他数字比如12345,那么必须在距离1970-1-1的12345天内修改密码,否则密码失效。
  5. 修改期限前N天发出警告:比如你在第五条规定今年6月20号规定密码必须被修改,系统会从距离6-20号的N天前向对应的用户发出警告。
  6. 密码过期的宽限:假设这个数字被设定为M,那么帐号过期的M天内修改密码是可以修改的,改了之后账户可以继续使用。
  7. 帐号失效日期:假设这个日期为X,与第三条一样,X表示的日期依然是1970-1-1相距的天数,过了X之后,帐号失效。
  8. 保留:被保留项,暂时还没有被用上。