切换用户 su sudo

一、su


1.命令详解

su是switch user的缩写,用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户,从 root 用户切换为普通用户,以及普通用户之间的切换。

普通用户之间切换、普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换。

从 root用户切换至其他用户,无需知晓对方密码,直接可切换成功。

su 用于临时切换身份到另一个指定的用户,未指定用户名默认为 root。


2.语法格式

su      [options]  [-]   [user [argument...]]
su       [选项]      -    [用户]

3.选项描述

 -m, -p, --preserve-environment  do not reset environment variables
                                 #执行 su 时不改变环境变数
 -g, --group <group>             specify the primary group
                                 #指定主组,此选项仅对 root 用户可用。
 -G, --supp-group <group>        specify a supplemental group
                                 #指定一个附加组。此选项仅对 root 用户可用。
 -, -l, --login                  make the shell a login shell
                                 #将 shell 作为登录 shell 启动
 -c, --command <command>         pass a single command to the shell with -c     
 --session-command <command>     pass a single command to the shell with -c
                                 and do not create a new session
      变更为帐号为 USER ,并执行指令(command)后再变回原来使用者。
      仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。 
 -f, --fast                      pass -f to the shell (for csh or tcsh)
                                 #适用于csh与tsch,使shell不用去读取启动文件。
 -s, --shell <shell>             run shell if /etc/shells allows it
                                 #适用于csh与tsch,使shell不用去读取启动文件。                    

4.命令示例

1)切换用户 su 和 su -

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

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

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

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


①测试 su 命令:

[root@centos7 ~]#whoami
root
[root@centos7 ~]#pwd
/root
[root@centos7 ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos7 ~]#su cyan    切换用户
[cyan@centos7 root]$ whoami
cyan
[cyan@centos7 root]$ pwd
/root                       路径未改变
[cyan@centos7 root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
                           PATH环境变量未改变

②测试 su - 命令:

[root@centos7 ~]#whoami
root
[root@centos7 ~]#pwd
/root
[root@centos7 ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos7 ~]#su - cyan     使用 su - 切换
Last login: Wed Mar  8 22:18:29 CST 2023 on pts/1
[cyan@centos7 ~]$ whoami
cyan
[cyan@centos7 ~]$ pwd
/home/cyan                   路径已更改
[cyan@centos7 ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/cyan/.local/bin:/home/cyan/bin
                             PATH环境变量已更改

可以看到 su cyan只是切换了cyan身份,但是工作目录仍然是root的工作目录,而用su - cyan命令切换后工作目录变成cyan的工作目录,同时环境变量也发生变化。

2)切换用户并执行命令su -c ls root

临时切换帐号为 root 并在执行 ls 命令,输入root密码执行命令,执行完成后回到原用户。

[cyan@centos7 ~]$ su -c ls root
Password: 
Desktop  Documents  Downloads  Music  Pictures	Public	Templates  Videos
[cyan@centos7 ~]$ 

二、sudo


1.命令详解

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

通过sudo,把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全。

sudo 也能被称为受限制的su。

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

而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权

2.语法格式

sudo      [options]  [-]   [user [argument...]]
sudo       [选项]      -    [用户]

3.选项描述

  -A, --askpass                 use a helper program for password prompting
  #使用辅助程序(可能是图形化界面的程序)读取用户的密码并将密码输出到标准输出。
  -b, --background              run command in the background
                               #把 sudo 所要运行的命令放到后台运行
  -E, --preserve-env            preserve user environment when running command
      --preserve-env=list       preserve specific environment variables
         #向安全策略指示用户希望保存他们现有的环境变量。
  -e, --edit                    edit files instead of running a command
                                #编辑文件,而不是运行命令
  -g, --group=group             run command as the specified group name or ID
                                 #使用指定的组名或ID执行命令
  -H, --set-home                set HOME variable to target user’s home dir
                                #设置HOME变量为目标用户的HOME目录
  -i, --login                   run login shell as the target user; a command may
                                also be specified
                                #以目标用户运行login shell;还可以指定命令
  -K, --remove-timestamp        remove timestamp file completely
                                #完全删除时间戳文件
  -k, --reset-timestamp         invalidate timestamp file
  		                        #失效时间戳文件
  -l, --list                    list user’s privileges or check a specific
                                command; use twice for longer format
 列出用户的特权或检查特定命令;使用两次是较长的格式
  -n, --non-interactive         non-interactive mode, no prompts are used
                                #非交互模式,不使用提示
  -p, --prompt=prompt           use the specified password prompt
                                #使用指定的密码提示符
  -r, --role=role               create SELinux security context with specified role
                                创建SELinux安全上下文规则
  -S, --stdin                   read password from standard input
  -s, --shell                   run shell as the target user; a command may also
                                be specified
                                #以目标用户运行shell;命令还可以被指定
  -u, --user=user               run command (or edit file) as specified user name or ID
                                #按指定的用户名或ID运行命令(或编辑文件)


4.命令示例

1)指定用户执行命令 sudo -u root

以root身份使用useradd命令创建cat用户;

前提条件,当前用户需要加入/etc/sudoers中,否则会报错。
cyan is not in the sudoers file. This incident will be reported.

[cyan@centos7 ~]$ sudo -u root useradd testuser888
[sudo] password for cyan: 
[cyan@centos7 ~]$ tail -1 /etc/passwd
testuser888:x:3457:3457::/home/testuser888:/bin/bash

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的区别

通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su 。

另外,用户使用sudo命令,需要在配置文件/etc/sudoers来进行授权。


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 命令让用户有权限做任何事情。



一些 Linux 发行版(如 Ubuntu)默认禁用 root 用户帐户。鼓励用户在需要 root 权限时使用 sudo 命令。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值