命令简介

su 命令用于临时获得另一个用户的权限,是 “Switch User” 的缩写。它最常见的用途是切换到 root 用户,以获得系统的最高权限执行一些特殊操作。

命令格式

1
su [OPTION]... [-] [USERNAME]

参数说明

参数 说明 备注
- 切换到root用户 默认情况下,不指定任何参数时,su命令会切换到root用户
-l 登录到目标用户环境 切换到目标用户环境后,会执行目标用户的配置文件,例如.bashrc
-m 模拟目标用户登录 -l类似,但会保留当前用户的环境变量
-c 执行指定的命令 只执行指定的命令,不会切换到目标用户环境
-s 使用指定的shell 使用指定的shell来执行命令
-p 指定目标用户密码 输入目标用户密码,而不是当前用户密码
- 模拟TTY登录 模拟TTY登录,可以获得更好的环境兼容性

命令实例

基本用法

1.切换到root用户

1
su

2.切换到指定用户

1
su postgres

3.登录到目标用户环境

1
su -l postgres

4.模拟目标用户登录

1
su -m postgres

5.执行指定的命令

1
su -c "ls /home/postgres"

6.使用指定的shell

1
su -s /bin/bash postgres

7.指定目标用户密码

1
su -p postgres

扩展用法

1.使用别名

1
alias su='sudo su'

2.使用配置文件

1
2
3
4
5
6
7
# /etc/passwd

postgres:x:1000:1000::/home/postgres:/bin/bash

# /etc/sudoers

user1 ALL=(ALL) NOPASSWD: /usr/bin/su

3.使用sudoers文件限制命令

1
2
3
# /etc/sudoers

user1 ALL=(ALL) NOPASSWD:/usr/bin/su postgres

高级用法

1.使用suedit编辑配置文件

1
suedit /etc/passwd

2.使用sudoers文件控制命令执行权限

  • 限制用户只能切换到特定的用户
1
2
3
# /etc/sudoers

user1 ALL=(ALL) NOPASSWD: /usr/bin/su postgres, /usr/bin/su mysql
  • 限制用户只能在特定的时间段内切换用户
1
2
3
# /etc/sudoers

user1 ALL=(ALL) NOPASSWD: /usr/bin/su postgres, /usr/bin/su mysql 00:00-23:59
  • 限制用户只能在特定的主机上切换用户
1
2
3
# /etc/sudoers

user1 ALL=(ALL) NOPASSWD: /usr/bin/su postgres, /usr/bin/su mysql @localhost

总结

su命令是Linux系统管理中非常重要的工具,可以帮助我们提高系统安全性、降低运维成本。本文介绍了su命令的基本用法和高级用法,希望对大家有所帮助。

注意

  • 使用su命令时,请务必谨慎,不要滥用管理员权限。
  • 请定期检查sudoers文件,确保其安全性。