目录
63. shell命令--su
功能说明
su 命令在 Linux 和 Unix 系统中用于切换当前用户到另一个用户,通常是切换到超级用户(root)。这个命令允许用户以另一个用户的身份执行命令,这对于执行需要更高权限的任务非常有用。
su 命令来自英文单词 switch use r的缩写,其功能是切换用户身份。将管理员切换至任意用户身份时无须密码验证,而将普通用户切换至任意用户身份时均需密码验证。另外,添加单个减号(-)参数表示完全的身份变更,不保留之前用户的任何环境变量信息。
语法格式
su [选项] [用户名]
SYNOPSIS
su [options...] [-] [user [args...]]
选项说明
- 或 -l 或 --login:以登录 shell 的方式启动目标用户的 shell 环境。这意味着会加载目标用户的 shell 配置文件(如 .bash_profile、.bashrc 等),并且环境变量也会切换到目标用户的配置。
-c <指令>或--command=<指令>:以指定用户的身份执行一个命令,然后退出。这对于执行需要更高权限的单次命令很有用。
--preserve-environment:尽量保持当前的环境变量不变,但在切换到 root 用户时,出于安全考虑,某些环境变量(如 PATH)可能会被覆盖。
-f 或 --fast:适用于csh与tsch,使shell不用去读取启动文件;
-m,-p或--preserve-environment:变更身份时,不要变更环境变量;
-s<shell>或--shell=<shell>:指定要执行的shell;
--help:显示帮助;
--version;显示版本信息。
实践操作
0. 环境准备
# 创建两个用户并设置密码为123456
seq 2|sed -r 's#(.*)#useradd MineGi-\1;echo '123456'|passwd --stdin MineGi-\1#g'|bash
tail -2 /etc/passwd
1. 由 root 用户切换到普通用户
whoami
pwd
env |grep "^PWD"
su - MineGi-1 #由 root 用户切换到普通用户不需要输入密码
env |grep "^PWD" #家目录改变了
pwd
2. 由普通用户切换至普通用户
whoami
env |grep "^PWD"
su MineGi-2 #由普通用户切换至普通用户需要输入密码
env |grep "^PWD" #家目录没改变,是因为没加选项 -
pwd
ls
whoami
3. 普通用户使用 root 身份执行命令
ls -la /root #没有权限查看
su -c 'ls -la /root' #需要输入root密码
4. 由普通用户切换至 root 用户
su - # root 可以省略,输入 root 密码
whoami
env |grep "^PWD"
5. 让系统开机时自动以普通用户启动指定的服务脚本
cp /etc/rc.local{,.bak} #先备份一下
ll /etc/rc.local{,.bak}
echo "hostname -I" >/tmp/test.sh #写个测试脚本
cat /tmp/test.sh #看一下内容
sh /tmp/test.sh #执行一下测试
echo "su - MineGi-1 -c '/bin/sh /tmp/test.sh' >/home/MineGi-1/file.txt" >>/etc/rc.local #写到文件中
cat /etc/rc.local #看一下内容
source /etc/rc.local #直接加载该文件
ll /home/MineGi-1/file.txt
cat /home/MineGi-1/file.txt
cat /etc/rc.local.bak >/etc/rc.local #还原文件内容
cat /etc/rc.local
6. 企业面试案例
使用用户登录到 Linux系统后,发现提示符为 "-bash-4.2$" 异常情况,请问该如何恢复到正常的 Linux 命令行提示符情况?
6.1 模拟故障
ls -la /home/MineGi-1/
rm -rf /home/MineGi-1/.bash*
ls -la /home/MineGi-1/
su - MineGi-1
exit 或 ctrl + D
6.2 解决方案
cp -ar /etc/skel/.bash* /home/MineGi-1/
su - MineGi-1
rm -rf .bash*
bash
cp -ar /etc/skel/.bash* ~
bash
# source ./.bash_profile ./.bashrc #还未生效,则执行此命令
# 若是没有权限复制文件,则切换到 root 用户下再复制
# su - root
# cp -ar /etc/skel/.bash* /home/MineGi-1
注意事项
- 使用 su 命令时,如果你已经以 root 身份登录,则可以直接切换到其他用户而无需输入密码。
- 在生产环境中,由于 su 命令要求输入目标用户的密码,这可能会在某些自动化脚本中造成不便。为此,可以考虑使用 sudo 命令,它允许通过配置文件(/etc/sudoers)精细控制哪些用户能以哪些用户的身份执行哪些命令。
- 出于安全考虑,建议仅在必要时才切换到 root 用户,并尽量使用 sudo 来执行需要更高权限的命令。
- 使用 su 切换到 root 用户时,应特别小心,因为 root 用户拥有对系统的完全访问权限,可以执行任何操作,包括删除重要文件或修改系统配置。
- 最小权限原则:总是尝试以最小必要的权限运行应用程序和用户账户。只有在确实需要时才提升权限。
- 定期审计:定期检查和审计系统中su和sudo的使用情况,确保没有未经授权的访问或不当的配置。
- 教育用户:培训用户了解su和sudo的正确使用方法,以及它们潜在的安全风险。
- 使用强密码和两因素认证:为root账户和其他重要账户设置强密码,并考虑使用两因素认证来增加安全性。
- 更新和维护:保持系统和所有已安装软件的更新,以修补已知的安全漏洞。
其它事项
记录会话
在切换到 root 用户或其他用户时,可能希望记录会话以供审计或回溯。这可以通过在 su 命令中使用 script 命令实现。例如:
script -a /path/to/logfile.txt su -
这将记录整个su会话到指定的日志文件中。-a 选项用于追加内容到现有文件,如果不希望覆盖原有日志。
避免使用 su 切换到 root 进行日常任务
如前所述,由于 root 用户的权限过大,频繁使用它进行日常任务会增加误操作的风险。建议只在确实需要 root 权限时才使用,并通过 sudo 进行更细粒度的权限控制。
使用环境变量管理不同用户的配置
虽然 su --preserve-environment 选项旨在保留环境变量,但在实践中,出于安全考虑,它可能不会保留所有变量。可以考虑在用户的shell配置文件中(如.bashrc或.bash_profile)设置需要的环境变量,以便在通过su切换到该用户时自动加载。
限制root登录
对于大多数服务器环境,最好完全禁用 root 用户的直接登录,而是通过 sudo 从普通用户账户提权。这可以通过修改 SSH 配置文件(通常是 /etc/ssh/sshd_config )并设置 PermitRootLogin no 来实现。
审计su命令的使用
大多数Linux发行版都配备了审计工具(如 auditd ),可以用来监控对关键文件和命令的访问,包括 su 命令。配置适当的审计规则可以帮助识别潜在的滥用或安全漏洞。
标签:shell,--,用户,su,etc,0063,MineGi,root From: https://blog.csdn.net/linuxxiaocaizi/article/details/144772265