用法:
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 -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 命令需要超级用户(root)密码,用户可以切换到其他用户的身份并获得其权限。而 sudo 命令允许普通用户以其自己的密码执行特权操作。
su 命令切换到其他用户后,用户将获得该用户的全部权限。而 sudo 命令可以通过配置文件(sudoers 文件)控制特权操作的范围,可以精确指定用户可以执行哪些命令以及以哪些用户的身份执行。
由于 su 命令需要共享 root 密码,这可能存在一些安全风险。如果其他人知道 root 密码,他们就可以切换到 root 用户,并拥有完全控制系统的权限。而 sudo 命令通过使用自己的密码来执行特权操作,可以避免共享 root 密码,提高系统的安全性。
sudo 命令会记录每个特权操作的日志,包括执行的命令和执行者的身份。这可以帮助系统管理员进行安全审计和追踪。而 su 命令没有内置的日志功能,无法追踪用户切换和执行的命令。
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