su和sudo的用法
一、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 命令让用户有权限做任何事情。