关于ubuntu20.04.1设置新密码后在命令窗口可以切换而图形登录界面提示密码错误问题

1.question:问题描述

    在学习嵌入式时,老师用的开发环境为ubuntu20.04.1的环境,开机时是免密登录的,为了安全起见我对root以及普通用户进行了密码设置,并且我利用救援模式进行密码修改/破解,具体密码破解修改方法我一会写一篇博客记录方法,言归正传,我破解完之后他还是免密直接进入系统,在终端中进行用户登录(root/普通用户切换时)毫无问题,但当我想进行普通用户名修改时,发现修改不成功:

usermod -l 新用户名  旧用户名

提示错误!原因是不能在当前用户下进行名称修改 于是我杀掉了 进程 1656

kill -9 1656

它直接退回到登陆界面:

切换root进行新密码登录

登录失败!

2.解决问题

    查阅很多的资料,最终原因是因为 系统对图形界面登录时 root 为禁止登录状态(认证规则为禁止)因此我们要进行命令修改。

 命令:

gedit /etc/pam.d/gdm-autologin

       这个命令涉及到Linux系统中的文本编辑器gedit以及PAM(Pluggable Authentication Modules)【可插入身份认证】系统中的配置文件gdm-autologin。PAM是一种用于管理认证和授权的框架,它允许系统管理员通过配置不同的模块来定义用户登录、访问控制等方面的策略。

  1. gedit:这是一个在Linux系统中常用的图形化文本编辑器,用于打开、编辑各种文本文件。

  2. /etc/pam.d/gdm-autologin:这是一个PAM配置文件的路径,用于定义自动登录情况下的认证规则。在这个文件中,会列出一系列PAM模块,每个模块都执行特定的认证操作。这个文件的内容会影响到用户在自动登录到系统时的身份验证和权限控制。

      通过执行gedit /etc/pam.d/gdm-autologin命令,打开gdm-autologin文件以便查看和编辑其中的内容。通常情况下,需要具备管理员权限(如使用sudo命令)才能修改这个文件。在编辑这个文件时,要小心确保不破坏认证和授权的设置,以免影响系统的安全性和稳定性。

       执行命令后,将打开的文件中第三行前加#,如下注释掉语句 “auth required pam_succeed_if.so user != root quiet_success”

代码解析:

#%PAM-1.0//这是PAM配置文件的版本声明。

auth requisite pam_nologin.so//如果系统设置了禁止登录的状态(例如维护模式),则在用户进行认证之前会拒绝登录。

auth required pam_succeed_if.so user != root quiet_success//要求认证成功的条件是用户不是root用户,并且认证成功时不会产生任何输出。

auth optional pam_gdm.so//使用PAM模块 pam_gdm.so 进行认证,通常用于图形界面登录。

auth optional pam_gnome_keyring.so//使用PAM模块 pam_gnome_keyring.so 来处理GNOME密钥环,以管理用户密钥。

auth required pam_permit.so//认证必须成功,允许用户继续登录。

@include common-account//引用并包含名为 common-account 的PAM配置文件,该文件通常包含一些通用的账户管理规则。

session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close//在会话开始时,通过 pam_selinux.so 模块关闭 SELinux 安全上下文,以确保清除任何残留上下文。

session required pam_loginuid.so//要求在会话期间设置登录用户的 UID,以支持登录用户标识。

session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open//在会话开始时,通过 pam_selinux.so 模块打开 SELinux 安全上下文。

session optional pam_keyinit.so force revoke//通过 pam_keyinit.so 模块初始化密钥,并在会话结束时撤销这些密钥。

session required pam_limits.so//设置会话级别的资源限制,以控制用户的资源使用。

session required pam_env.so readenv=1//在会话开始时,通过 pam_env.so 模块读取系统环境变量。

session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale//在会话开始时,继续读取用户特定的环境变量,并从指定的文件中加载。

@include common-session//引用并包含名为 common-session 的PAM配置文件,该文件通常包含一些通用的会话管理规则。

session optional pam_gnome_keyring.so auto_start//在会话开始时,通过 pam_gnome_keyring.so 模块自动启动 GNOME 密钥环。

@include common-password//引用并包含名为 common-password 的PAM配置文件,该文件通常包含一些通用的密码管理规则。

第三行注释掉,相当于当用户为root登陆时,系统无任何输出,保存退出再在终端中执行命令:

gedit /etc/pam.d/gdm-password

命令解释:与第一个命令类似,这个编辑的文件是规定的 用户在登录到GDM时的认证、授权和会话管理规则的设计。

      大体代码含义与上一个类似:不再解析

   我们把第三行代码进行注释掉即可,在前边加上# 就完事了。

之后保存退出再执行命令:

gedit /root/.profile

命令解释:在Linux中,用户的 .profile 文件通常用于设置用户的环境变量和启动配置。

打开之后可以看到:

该文件会被Bourne兼容的登录shell执行,与shell脚本一样。

if [ "$BASH" ]; then//这是一个条件语句,检查当前使用的shell是否是Bash。如果是Bash,接下来的内容将被执行。

if [ -f ~/.bashrc ]; then//在Bash下,这个条件语句检查是否存在一个名为~/.bashrc的文件。

. ~/.bashrc//如果存在~/.bashrc文件,这一行会加载并执行该文件,这通常用于加载Bash shell的配置和自定义设置。

fi//结束Bash相关的条件语句。

tty -s&&mesg n 2> /dev/null || true//这是一个将终端设置为非交互模式的命令。它的含义如下//

tty -s//这个命令检查是否有终端连接。如果有,返回真(非空字符串)。
&&//这是逻辑与操作符,表示前面的命令成功时才继续执行后面的命令。
mesg n//这个命令用于设置终端是否允许其他用户发送消息。mesg n表示禁止。
2> /dev/null//将错误输出重定向到/dev/null,即忽略错误。
|| true//如果前面的命令失败,将执行true命令(即无操作)。
//总体而言,这个~/.profile文件的内容主要用于在Bourne兼容的登录shell中执行一些设置和操作,包括加载Bash配置文件(如果存在)以及设置终端的交互模式。

我们实际上是把最后一句进行修改:

将打开的文件中“mesg n 2> /dev/null || true” 改为

tty -s&&mesg n 2> /dev/null || true

之后保存退出,执行 reboot 进行重启 root 在登陆界面 便可以正常登录了。

   完美解决问题!如有不足,望各路大神指点。 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值