当前位置: 首页 > 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 切换用户后环境异常的问题。

相关文章:

  • 论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction
  • leetcode付费题 353. 贪吃蛇游戏解题思路
  • 2025年- H61-Lc169--74.搜索二维矩阵(二分查找)--Java版
  • 【技能拾遗】——家庭宽带单线复用布线与配置(移动2025版)
  • 计算机视觉与深度学习 | 基于Matlab的门禁指纹识别与人脸识别双系统实现
  • 关于TongWeb数据源兼容mysql驱动的注意事项
  • CSS专题之层叠上下文
  • 【前端】SPA v.s. MPA
  • vue3 基本语法 父子关系
  • 设计模式——装饰器设计模式(结构型)
  • HiveSQL语法全解析与实战指南
  • 【大模型部署】mac m1本地部署 ChatGLM3-6B 超详细教程
  • 跟单业务和量化交易业务所涉及到的设计模式
  • 性能优化 - 理论篇:性能优化的七类技术手段
  • C++旅行预算规划 全国信息素养大赛复赛决赛 C++小学/初中组 算法创意实践挑战赛 内部集训模拟题详细解析
  • C++ - STL #什么是STL #STL的版本 #闭源开源 #STL的六大组件
  • 题解:洛谷 P12672 「LAOI-8」近期我们注意到有网站混淆视听
  • Wireshark 使用教程:让抓包不再神秘
  • DeepSeek-R1-0528,官方的端午节特别献礼
  • Go语言中的布尔类型详解
  • 廊坊优化网站排名/桂林网站设计
  • 网站建设需求模版/青岛官网优化
  • 网站空间 windows linux/一站式网站建设公司
  • 建设网站预算/seo优化排名怎么做
  • 有没有可以做各种字体的网站/全国各城市感染高峰进度查询
  • 成都建材网站建设/什么是网络营销公司