前言:
学习linux嵌入式开发时,有一段经常需要使用root用户权限,但我经过实验和查阅资料了解到ubuntu系统默认root是没有设置密码的,所以无法登录也无法连接到xshell。
为了方便使用,我使用”sudo passwd root”命令设置了root用户的密码,但这只能在终端中登录,图形化界面依然不可以。通过查阅资料得到:
- 终端使用的登录验证采用本地shadow文件等配置验证用户密码。如果shadow文件中的root密码已经更改,则终端会通过验证。
- 而图形登录界面通常采用PAM(Pluggable Authentication Modules)模块进行身份验证。
- PAM是一个身份验证框架,用于管理系统上的用户身份验证过程。它允许系统管理员通过配置来决定哪些身份验证模块应该用于不同的身份验证任务,并且可以根据需要进行添加、更改或删除。
所以我进行了以下一系列的配置文件修改:
一、解决图形登录问题
1. ubuntu系统对图形界面登陆时root为禁止登陆状态,我们要修改对应文件:
sudo gedit /etc/pam.d/gdm-autologin
/etc/pam.d/gdm-autologin控制自动登录功能的验证规则,仅包含密码验证规则,不涉及组或会话设置。
执行命令后,注释掉第三行的内容。
解析:“auth required pam_succeed_if.so user != root quiet_success”这个配置行的目的是允许非 root 用户通过身份验证过程,而无需进一步的检查或限制。它可以用于特定的身份验证任务,如用户登录,以确保 root 用户不能通过该任务进行身份验证,从而增强系统的安全性。
2. gdm-password 文件是与图形化登录界面的身份验证过程相关的 PAM 配置文件之一,通过编辑 gdm-password 文件,可以自定义图形化登录界面的身份验证过程,例如添加、修改或删除特定的身份验证模块。
同样注释掉第三行:
gedit /etc/pam.d/gdm-password
保存退出。
3. /root/.profile 是一个特定用户的配置文件,对于 root 用户来说,它位于根目录下。这个文件在用户登录时被执行,并用于设置用户的环境变量和执行其他初始化任务。
我们把最后一行改为:tty -s&&mesg n 2> /dev/null || true
让我逐步解释并说明 `tty -s && mesg n 2> /dev/null || true` 这个命令行的含义:
- `tty -s`:`tty` 命令用于确定当前终端的名称。`-s` 选项用于检查终端是否存在。如果终端存在,`tty -s` 将返回真值,否则返回假值。
- `&&`:这是一个逻辑操作符,表示当前一个命令成功执行(返回真值)时,才执行下一个命令。
- `mesg n`:`mesg` 命令用于设置终端是否接受其他用户发送给当前用户的消息。`n` 参数表示禁止接收消息。
- `2> /dev/null`:`2>` 是重定向语法,将标准错误输出(文件描述符 2)重定向到 `/dev/null`,即丢弃错误输出。这样做是为了防止任何错误消息显示在终端上。
- `|| true`:`||` 是另一个逻辑操作符,表示如果前一个命令失败(返回假值),则执行下一个命令。`true` 是一个命令,它总是返回真值,因此这里使用 `true` 作为替代命令,确保整个命令行的结果为真值。
综合起来,这个命令行的作用是:
- 首先,通过 `tty -s` 检查当前终端是否存在。
- 如果终端存在,则执行 `mesg n` 命令,禁止接收来自其他用户的消息。
- 如果终端不存在,即非交互式终端或没有终端连接,那么错误输出将被重定向到 `/dev/null`,并执行 `true` 命令以确保整个命令行返回真值。
4.使用reboot命令重启,即可在图形化界面使用密码登录root用户。
二、使用root账户连接xshell
1. 更改sshd文件
vim /etc/ssh/sshd_config
在最后一行添加:“PermitRootLogin yes”,表示允许 root 用户使用其凭据通过 SSH 远程登录到系统。
2. 重启ssh服务
service ssh restart
此时可以直接使用xshell连接root用户。