十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux命令-su(切换用户身份)

Linux命令-su(切换用户身份) Linux命令-su切换用户身份快速参考su vs su - 的区别基本用法常用选项安全注意事项su vs sudo实用场景suSubstitute User用于在终端会话中切换用户身份。默认情况下su切换到 root 用户也可指定切换到其他用户。它是 Unix/Linux 中最基础的用户切换工具虽然现代最佳实践推荐使用sudo但su在系统救援和特权切换场景中仍有不可替代的地位。快速参考su[选项][用户名]su-[用户名]su -登录 Shell与su非登录 Shell有本质区别前者加载目标用户的完整环境配置后者保留现有环境变量。su vs su - 的区别# 非登录 Shell保留当前环境suroot# 环境变量保持当前用户的HOME 不变PATH 不变echo$HOME# /home/original_user# 登录 Shell模拟完整登录su- root# 加载 /etc/profile, ~/.bash_profile, ~/.bashrcecho$HOME# /rootecho$PATH# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin# 直观验证区别suuser-cecho HOME$HOMEPWD$PWDsu- user-cecho HOME$HOMEPWD$PWD基本用法# 切换到 root默认su-# 切换到指定用户su- username# 切换用户并执行单条命令su- username-cwhoami# 切换用户并执行多条命令su- username-ccd /home/username ls -la pwd# 执行需要 root 权限的脚本su--c/usr/local/bin/maintenance.sh# 不保留环境变量su-pusername# 保留环境-m 等同su-musername常用选项选项说明-,-l登录 Shell加载目标用户完整环境-c CMD执行命令后退出-m,-p保留当前环境变量不重置-s SHELL指定 Shell-g GROUP指定主组-G GROUP指定附加组# 使用指定 Shell 切换su-s/bin/zsh - username# 切换用户并指定主组su-gdevelopers username# 组合使用su-s/bin/bash-c/opt/app/start.shappuser安全注意事项安全警告su需要知道目标用户的密码共享 root 密码是严重的安全风险优先使用sudo进行权限提权它基于用户自身的密码进行认证在审计日志中su记录的是谁切换到了 root而非具体执行了什么命令限制su权限给wheel组或sudo组# 限制 su 权限编辑 /etc/pam.d/su# 取消注释以下行以限制 su 给 wheel 组auth required pam_wheel.so use_uid# 将可信用户加入 wheel 组usermod-aGwheel trusted_admin# 查看 su 使用记录grepsu:/var/log/auth.loggrepsu:/var/log/secure# RHEL/CentOS# 记录 su 的会话日志使用 pam_tty_audit# 编辑 /etc/pam.d/su 添加# session required pam_tty_audit.so enable*su vs sudo特性susudo认证方式目标用户密码自身密码密码共享需要共享 root 密码无需共享审计粒度仅记录切换动作记录每条命令权限粒度全部或没有精确到命令配置位置/etc/pam.d/su/etc/sudoers使用建议系统救援日常使用# 等价操作对比su- root-capt-get updatesudoapt-getupdate# su 需要 root 密码# sudo 需要用户自身密码# 被取代的场景日常管理# 现代推荐sudo可审计、可精细化控制# su - 保留用于单用户模式、系统救援、chroot 环境实用场景# 场景 1: 单用户模式/救援模式下的 root 切换# 这是 su 最核心的使用场景su- root# 场景 2: 模拟服务账户环境进行调试su- www-data-s/bin/bash-cphp /var/www/html/test.php# 场景 3: 在自动化脚本中切换用户执行#!/bin/bashforuserinuser1 user2 user3;dosu-$user-ctouch ~/deployed.txt2/dev/nullif[$?-eq0];thenecho✅$user部署完成elseecho❌$user部署失败fidone# 场景 4: 检查用户环境是否正确su- new_user-cecho PATH$PATH; which python3# 场景 5: 临时获取 root 权限用于紧急修复su--csystemctl restart critical-service# 场景 6: 切换并保持原始工作目录su-musername# -m 保留 HOME 和当前目录# 限制 su 滥用的 PAM 配置cat/etc/pam.d/suEOF # 要求 root 才可以使用 su # auth required pam_wheel.so # 或仅允许 wheel 组 auth required pam_wheel.so use_uid groupwheel # 限制并发 su 会话 session required pam_limits.so EOF# 配置 limitsechoroot hard maxlogins 2/etc/security/limits.conf最佳实践在日常运维中使用sudo替代su进行权限提权。su -应仅用于单用户模式、系统救援或特定的自动化场景。这个原则来自安全和审计两方面考量——sudo提供了更细粒度的权限控制和完整的命令审计日志。
返回列表