切换用户 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 命令。
### 如何从 su 切换sudo 使用权限管理 Linux 系统 在 Linux 系统中,`su` 和 `sudo` 是两种常见的权限管理工具。虽然两者都可以用于提升权限,但它们的使用方式和安全性有显著差异。以下是关于如何从 `su` 切换到 `sudo` 进行权限管理的详细说明: #### 1. 配置 `sudo` 用户 为了使用 `sudo`,需要将普通用户添加到具有 `sudo` 权限的组中,或者直接在 `/etc/sudoers` 文件中为特定用户配置权限。 - **添加用户到 `sudo` 组**(适用于大多数现代 Linux 发行版): ```bash usermod -aG sudo username ``` 这里的 `username` 是需要赋予 `sudo` 权限的用户名[^1]。 - **手动编辑 `/etc/sudoers` 文件**: 使用 `visudo` 命令安全地编辑 `/etc/sudoers` 文件,确保语法正确。 ```bash visudo ``` 在文件中添加以下内容以赋予特定用户 `sudo` 权限: ```plaintext username ALL=(ALL:ALL) ALL ``` 这表示 `username` 可以在所有主机上以任何用户身份执行任何命令[^1]。 #### 2. 移除对 `su` 的依赖 如果系统中当前依赖 `su` 进行权限切换,建议逐步减少其使用频率,并最终完全移除对 `su` 的依赖。 - **限制 `su` 的使用**: 修改 `/etc/pam.d/su` 文件,限制只有特定用户组可以使用 `su` 命令。例如,只允许 `wheel` 或 `sudo` 组成员使用 `su`: ```plaintext auth required pam_wheel.so use_uid ``` - **禁用 `root` 登录**: 通过修改 SSH 配置文件 `/etc/ssh/sshd_config`,禁用 `root` 用户的直接登录: ```plaintext PermitRootLogin no ``` 然后重启 SSH 服务以应用更改: ```bash systemctl restart sshd ``` #### 3. 使用 `sudo` 替代 `su` `sudo` 提供了更灵活和安全的方式来执行特权命令,而无需知道 `root` 用户的密码。 - **临时提升权限**: 使用 `sudo` 执行单个命令,输入用户的密码即可: ```bash sudo command ``` - **模拟 `su` 的功能**: 如果需要切换到 `root` 用户,可以使用以下命令: ```bash sudo -i ``` 这将启动一个具有 `root` 权限的交互式 shell[^3]。 - **指定用户切换**: 使用 `sudo -u` 切换到其他用户: ```bash sudo -u username command ``` #### 4. 安全性和审计 相比 `su`,`sudo` 提供了更细粒度的权限控制和日志记录功能。 - **日志记录**: `sudo` 的所有操作都会被记录到系统日志中(通常是 `/var/log/auth.log` 或 `/var/log/secure`),便于审计和追踪[^1]。 - **权限限制**: 可以为不同用户用户组分配不同的权限,避免过度授权。例如,仅允许某用户执行特定命令: ```plaintext username ALL=/bin/mount,/bin/umount ``` #### 5. 示例:从 `su` 切换到 `sudo` 假设当前系统中管理员通过 `su` 切换到 `root` 用户进行管理,现在希望改为使用 `sudo`: 1. 添加管理员用户到 `sudo` 组: ```bash usermod -aG sudo adminuser ``` 2. 测试 `sudo` 功能: ```bash sudo whoami ``` 3. 禁用 `root` 直接登录并限制 `su` 的使用: - 修改 `/etc/ssh/sshd_config`: ```plaintext PermitRootLogin no ``` - 修改 `/etc/pam.d/su`: ```plaintext auth required pam_wheel.so use_uid ``` 4. 使用 `sudo -i` 替代 `su`: ```bash sudo -i ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_Jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值