su和sudo的用法

发布时间 2023-07-18 15:12:58作者: 胖胖123

一、su

1.命令详解

通过该命令可以实现任何身份的切换,普通用户之间切换、普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换。
从 root用户切换至其他用户,无需知晓对方密码,直接可切换成功。

2.语法格式
su [选项] - [用户]

3.选项描述

-m, -p, --preserve-environment #执行 su 时不改变环境变数

-g, --group <group> #指定主组,此选项仅对 root 用户可用

-G, --supp-group <group> #指定一个附加组,此选项仅对 root 用户可用

-, -l, --login #将 shell 作为登录 shell 启动

-c, --command <command> #仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令

-f, --fast #适用于csh与tsch,使shell不用去读取启动文件

-s, --shell <shell> #适用于csh与tsch,使shell不用去读取启动文件

4.总结

su和su - 不加用户,默认直接切到root,普通用户切换需要输入root密码

su : 切换用户,环境变量不变,路径不变。

su - : 切换用户,环境变量随切换用户发生改变,回到家目录。

总结:-代表连带环境变量一起切换,不能省略。环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行


二、sudo

1.命令详解

su 切换到超级权限用户root后,超级权限的无限制,增加了系统安全性问题。这时我们就有必要用到 sudo。

通过sudo,把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全。
而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。

sudo执行命令的流程:
当前用户切换到root(或其它指定切换到的用户),需要输入当前用户的密码,然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户。

2.语法格式

sudo [选项] - [用户]

3.选项描述

-A, --askpass #使用辅助程序读取用户的密码并将密码输出到标准输出

-b, --background #把sudo所要运行的命令放到后台运行

-E, --preserve-env #向安全策略指示用户希望保存他们现有的环境变量
--preserve-env=list

-e, --edit #编辑文件,而不是运行命令

-g, --group=group #使用指定的组名或ID执行命令

-H, --set-home #设置HOME变量为目标用户的HOME目录

-i, --login #以目标用户运行login shell;还可以指定命令

-K, --remove-timestamp #完全删除时间戳文件

-k, --reset-timestamp #失效时间戳文件

-l, --list #列出用户的特权或检查特定命令;使用两次是较长的格式

-n, --non-interactive #非交互模式,不使用提示

-p, --prompt=prompt #使用指定的密码提示符

-r, --role=role #创建SELinux安全上下文规则

-S, --stdin #从标准输入读取密码

-s, --shell #以目标用户运行shell;命令还可以被指定

-u, --user=user #按指定的用户名或ID运行命令(或编辑文件)

4.命令示例

1)指定用户执行命令 sudo -u root
以root身份使用useradd命令创建cat用户;

前提条件,当前用户需要加入/etc/sudoers中,否则会报错

5.将用户加至配置文件

vim /etc/sudoers


...省略...
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
cyan ALL=(ALL) ALL '添加用户'
## Allows members of the 'sys' group to run

...省略....

只有添加后,才能正确的使用sudo 命令。


三、su和sudo的区别

1.用法不同

su:用来切换用户。
sudo:使用超级用户来执行命令,一般是指root用户。

2.密码

两个命令的最大区别是:
su 命令需要输入 root 用户的密码。
sudo 命令需要输入当前用户的密码。
鉴于sudo命令要求输入的是其他用户自己的密码,所以,不需要共享root密码。同时,想要阻止特定用户访问root权限,只需要调整sudoers文件中的相应配置即可。

3.执行命令

su可以不带参数执行。
sudo需要带参数和命令执行。

4.默认行为

另外一个区别是其默认行为:
sudo 命令只允许使用提升的权限运行单个命令。
su命令会启动一个新的 shell,同时允许使用root 权限运行尽可能多的命令,直到明确退出登录。
因此,su 命令的默认行为是有风险的。

5.日志记录

sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 sudoer所配置的用户名来记录是谁执行命令。
而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。


6.灵活性

sudo 命令比 su 命令灵活很多,因为甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。