当前位置: 首页 > news >正文

科普:Linux `su` 切换用户后出现 `$` 提示符,如何排查和解决?

科普:Linux su 切换用户后出现 $ 提示符,如何排查和解决?

在 Linux 系统管理中,su(Switch User)命令用于切换用户身份。正常情况下,从 root 切换到普通用户时,提示符会从 # 变成 $,表示权限降低。但有时 su 切换后,虽然看到 $,但用户环境异常(如无法执行某些命令、路径错误、无法加载配置等)。本文将介绍如何排查和解决这类问题。


1. 为什么 su 切换后会出现 $

$ 是普通用户的默认提示符,而 #root 的提示符。当 su 切换用户后,提示符变成 $ 是正常的,但如果出现以下情况,说明环境可能有问题:

  • 命令无法执行(如 lsvimcommand not found
  • 当前目录未切换到家目录(仍然在 /root/opt 等目录)
  • 环境变量异常echo $PATH 显示不完整)
  • Shell 功能受限(无命令补全、无历史记录)

2. 排查步骤

2.1 检查用户的默认 Shell

grep ^用户名 /etc/passwd

例如:

grep ^test /etc/passwd

输出示例:

test:x:1000:1000::/home/test:/bin/sh
  • /bin/sh:可能是 dash(Debian/Ubuntu),功能受限,不加载 .bashrc
  • /bin/bash:完整功能 Shell,推荐使用。
  • /bin/false/sbin/nologin:禁止登录,su 会直接退出。

问题:如果用户的 Shell 是 /bin/sh/bin/falsesu 可能无法正常加载环境。


2.2 检查 su 的切换方式

命令行为可能的问题
su 用户名非登录 Shell,不加载用户配置环境变量可能不完整
su - 用户名登录 Shell,加载 .bashrc.profile如果 Shell 错误,可能失败
su -s /bin/bash 用户名强制使用 /bin/bash可绕过默认 Shell 限制

测试

su test         # 可能环境不完整
su - test       # 应该加载完整环境(如果 Shell 正确)
su -s /bin/bash test  # 强制使用 bash

2.3 检查用户的家目录和配置文件

ls -la /home/用户名/

检查是否存在:

  • .bashrc(Shell 配置)
  • .profile.bash_profile(登录配置)

如果缺失,可以从 /etc/skel/ 复制默认配置:

cp /etc/skel/.bashrc /etc/skel/.profile /home/test/
chown test:test /home/test/.bashrc /home/test/.profile

2.4 检查环境变量

su - test
echo $PATH      # 查看路径是否正常
env             # 查看所有环境变量

如果 PATH 不完整,可能是 .bashrc.profile 未正确加载。


2.5 检查 PAM/SELinux 限制

  • PAM 限制/etc/pam.d/su):

    grep "deny" /etc/pam.d/su
    

    如果有 deny 规则,可能导致 su 失败。

  • SELinux/AppArmor

    sestatus       # 查看 SELinux 状态
    grep avc /var/log/audit/audit.log  # 查看安全日志
    

3. 解决方案

3.1 修改用户的默认 Shell

usermod -s /bin/bash test

然后测试:

su - test

3.2 修复用户配置文件

如果 .bashrc.profile 损坏:

cp /etc/skel/.bashrc /etc/skel/.profile /home/test/
chown test:test /home/test/.bashrc /home/test/.profile

3.3 使用 su - 代替 su

su - test    # 加载完整环境

3.4 检查系统日志

tail -f /var/log/auth.log   # Ubuntu/Debian
tail -f /var/log/secure     # CentOS/RHEL

查看是否有 su 相关的错误。


4. 总结

问题现象可能原因解决方案
su$ 提示符但环境异常默认 Shell 是 /bin/sh/bin/falseusermod -s /bin/bash 用户名
su 后无法加载 .bashrc家目录配置文件缺失/etc/skel/ 复制 .bashrc
suPATH 错误.profile 未加载使用 su - 或修复 .profile
su 直接退出PAM/SELinux 限制检查 /etc/pam.d/su 和 SELinux 日志

推荐做法

  • 始终使用 su - 用户名(加载完整环境)。
  • 确保用户的 Shell 是 /bin/bash
  • 检查家目录配置文件是否完整

通过以上方法,可以解决 su 切换用户后环境异常的问题。

http://www.xdnf.cn/news/746911.html

相关文章:

  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试官和面试记录的分享功能(2)
  • InfluxDB 高级函数详解:DERIVATIVE、INTEGRAL、SPREAD、HISTOGRAM 与 DIFFERENCE
  • [SC]SystemC在CPU/GPU验证中的应用(五)
  • 22睿抗省赛真题
  • DAY41
  • 【SLAM自救笔记1】:苟活
  • 【Netty系列】消息编码解码框架
  • LeetCode[110]平衡二叉树
  • 第6章 放大电路的反馈
  • AI Agent、Function Calling 与 MCP 协议的原理与实践
  • Linux系统-基本指令(4)
  • 评标专家随机抽选系统-建设方案——仙盟创梦IDE
  • WEB3——简易NFT铸造平台之nft.storage
  • 【知识点进阶】
  • Java 中 Redis 过期策略深度解析(含拓展-redis内存淘汰策略列举)
  • TI MSPM0G3507 简易PID项目显示和按键控制
  • [SLAM自救笔记0]:开端
  • 安装win11之后,电脑经常会跳出“无法在此设备上加载驱动程序”的提示。无法加载的驱动程序分别为“pcdsrvc_x64.pkms”“iqvw64e.sys”
  • OpenHarmony标准系统-HDF框架之音频驱动开发
  • 2.2HarmonyOS NEXT高性能开发技术:编译优化、内存管理与并发编程实践
  • Spring Cache核心原理与快速入门指南
  • Leetcode 1908. Nim 游戏 II
  • 【shell】让 CPU 运行到满负荷状态
  • 传统液晶瓶颈待破?铁电液晶如何实现显示技术逆袭
  • 快速掌握 GO 之 RabbitMQ
  • 嵌入式编译工具链熟悉与游戏移植
  • Python训练第四十天
  • Jmeter requests
  • LLMs之Tool:Workflow Use的简介、特点、安装和使用方法、以及案例应用
  • c++ typeid运算符