突然发现服务器root用户登不上了,在机房解决了半天,在此用虚拟机记录一下操作过程。
重启服务器,出现Centos7登录选择页面时,按e进入GRUB2引导页
编辑linux16 这一行 最后添加 rd.break console=tty0
Ctr+x来继续启动
执行目录挂载,改变根目录
mount -o remount,rw /sysroot
chroot /sysroot
输入passwd修改root密码,如果页面出现乱码使用LANG=en修改显示编码
这里物理机服务器输入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 /
键入exit命令退出chroot环境,再次键入exit命令完成初始化,完成系统引导,最终完成root密码修改。
这里一直好奇怪,为什么/etc/passwd中没有root用户记录信息了呢
/etc/passwd文件格式解释:
在该文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下:
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序
(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文件格式解释:
- 账户名:账户名与/etc/passwd里面的账户名是一一对应的关系。
- 密码:这里可以看到3类,分别是奇奇怪怪的字符串、*和!!其中,奇奇怪怪的字符串就是加密过的密码文件。星号代表帐号被锁定,双叹号表示这个密码已经过期了。奇奇怪怪的字符串是以$6$开头的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
- 修改日期:这个是表明上一次修改密码的日期与1970-1-1相距的天数密码不可改的天数:假如这个数字是8,则8天内不可改密码,如果是0,则随时可以改。
- 密码需要修改的期限:如果是99999则永远不用改。如果是其其他数字比如12345,那么必须在距离1970-1-1的12345天内修改密码,否则密码失效。
- 修改期限前N天发出警告:比如你在第五条规定今年6月20号规定密码必须被修改,系统会从距离6-20号的N天前向对应的用户发出警告。
- 密码过期的宽限:假设这个数字被设定为M,那么帐号过期的M天内修改密码是可以修改的,改了之后账户可以继续使用。
- 帐号失效日期:假设这个日期为X,与第三条一样,X表示的日期依然是1970-1-1相距的天数,过了X之后,帐号失效。
- 保留:被保留项,暂时还没有被用上。