su

用法:
 su [选项] [-] [用户 [参数]...]

将有效的用户 ID 和组 ID 更改为指定的 USER。
单独的 - 相当于 -l。如果未指定 USER,默认使用 root 用户。

选项:
 -m, -p, --preserve-environment  不重置环境变量
 -g, --group <组>               指定主组
 -G, --supp-group <组>          指定附加组

 -, -l, --login                 将 shell 设置为登录 shell
 -c, --command <命令>           使用 -c 将单个命令传递给 shell
 --session-command <命令>       使用 -c 将单个命令传递给 shell,并且不创建新的会话
 -f, --fast                     向 shell 传递 -f 参数(适用于 csh 或 tcsh)
 -s, --shell <shell>            如果 /etc/shells 允许,运行指定的 shell

 -h, --help                     显示此帮助信息并退出
 -V, --version                  输出版本信息并退出

更多详细信息请参见 su(1)。

切换用户。除root切换到其他用户,否则需要输入新用户的密码

示例

# 切换新用户(默认root), 不改变工作目录、环境变量
su [username]
# 切换新用户(默认root), 改变工作目录、环境变量
su - [username]

# 以新用户(默认root)执行命令
su - -c command [username]

sudo

sudo - 以其他用户身份执行命令

用法:
 sudo -h | -K | -k | -V
 sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
 sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
 sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
 sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...

选项:
 -A, --askpass                 使用辅助程序进行密码提示
 -b, --background              在后台运行命令
 -C, --close-from=num          关闭所有文件描述符 >= num
 -E, --preserve-env            保留用户环境变量以运行命令
      --preserve-env=list      保留特定的环境变量
 -e, --edit                    编辑文件而不是运行命令
 -g, --group=group             以指定的组名或组 ID 运行命令
 -H, --set-home                将 HOME 变量设置为目标用户的主目录
 -h, --help                    显示帮助信息并退出
 -h, --host=host               在主机上运行命令(如果插件支持)
 -i, --login                   以目标用户身份运行登录 shell;也可以指定命令
 -K, --remove-timestamp        完全移除时间戳文件
 -k, --reset-timestamp         使时间戳文件无效
 -l, --list                    列出用户的权限或检查特定命令;使用两次显示更长格式
 -n, --non-interactive         非交互模式,不使用提示
 -P, --preserve-groups         保留组向量,而不是设置为目标的组
 -p, --prompt=prompt           使用指定的密码提示符
 -r, --role=role               创建具有指定角色的 SELinux 安全上下文
 -S, --stdin                   从标准输入读取密码
 -s, --shell                   以目标用户身份运行 shell;也可以指定命令
 -t, --type=type               创建具有指定类型的 SELinux 安全上下文
 -T, --command-timeout=timeout 在指定的时间限制后终止命令
 -U, --other-user=user         在列表模式下,显示其他用户的权限
 -u, --user=user               以指定的用户名或用户 ID 运行命令(或编辑文件)
 -V, --version                 显示版本信息并退出
 -v, --validate                更新用户的时间戳而不运行命令
 --                            停止处理命令行参数

以目标用户身份执行命令。需要将当前用户加到 /etc/sudoers,否则需要输入当前用户的密码。

示例

# 以目标用户身份(默认root)登录并启动新的shell
sudo -i [-u username]
# 以目标用户身份(默认root)登录并启动新的shell,并在新的shell中执行命令
sudo -i [-u username] [command]
# 以目标用户身份(默认root)执行命令
sudo [-u username] command

su 和 sudo 区别

visudo

visudo - 安全编辑 sudoers 文件

用法:
 visudo [-chqsV] [-f sudoers]

选项:
 -c, --check              仅检查模式
 -f, --file=sudoers       指定 sudoers 文件的位置
 -h, --help               显示帮助信息并退出
 -q, --quiet              减少冗长的语法错误信息(安静模式)
 -s, --strict             严格的语法检查
 -V, --version            显示版本信息并退出

以安全的方式编辑 sudoers 文件,类似于vipw安全地编辑passwd文件的方式。visudo 针对多个同时编辑锁定 sudoers 文件,提供基本的完整性检查,并检查解析错误。如果 sudoers 文件当前正在由其他人编辑,或者由您在另一个会话中编辑,您将收到一条消息,稍后再试。

# 需要密码
user1    ALL=(ALL)       ALL
# 无需密码
user1    ALL=(ALL)       NOPASSWD:ALL