linux - 使用sudo 和 su 切换用户身份

1. su 切换用户身份

  • 切换到root身份
    su -
  • 切换到root身份并执行命令
    su - -c pwd
  • 切换到其他普通用户
    su - gogs
    su -l gogs
  • 切换到其他普通用户并执行命令
    su -l gogs -c pwd

2. sudo 提升权限执行命令

  • 切换到root身份
    sudo -i

  • 切换到root身份
    sudo su -

  • 重新设定root的密码
    sudo passwd root

  • 提升的权限执行命令
    sudo less /etc/sudoers

  • 以普通用户的身份执行命令
    sudo -u gogs whoami

  • 以其他用户身份执行命令串
    sudo -u gogs sh -c "mkdir ~/www; cd ~/www; echo 'this is index.html file' > index.html"

  • 访问root shell 执行内置命令
    sudo bash

3. 通过visudo进行权限设置

  • 编辑 /etc/sudoers
    sudo visudo

  • 为用户增加执行sudo的权限
    gogs ALL=(ALL) ALL

- gogs 表示用户名
- 第一个 ALL 指示允许从任何终端、机器访问 sudo
- 第二个 (ALL) 指示 sudo 命令被允许以任何用户身份执行
- 第三个 ALL 表示所有命令都可以作为 root 执行
  • 无密码运行 sudo 命令
    gogs ALL=(ALL) NOPASSWD: ALL

  • 通过将用户加入sudo用户组使其具有sudo权限 (无需配置使用户具有sudo权限)
    sudo usermod -aG sudo gogs # 将用户gogs追加到sudo用户组

# /etc/sudoers 中sudo用户组的配置
%sudo ALL=(ALL:ALL) ALL 
  • 限制用户执行某些命令
    gogs ALL=(ALL) NOPASSWD: /bin/echo /bin/ls # 只能执行echo ls 命令
    gogs ALL=(root) !/user/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root # gogs 以root身份只能修改其他用户密码,但不能修改root的密码

  • 通过别名设置visudo(可以同时处理多个用户的权限)

# 设置用户别名,可以批量设置多个用户
User_Alias ADMPW = user1, user2, user3
# 设置命令别名, 设置多个命令
Cmnd_Alias ADMPWCOM = !/user/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
# 设置主机别名
Host_Alias MYHOST = 192.168.0.105, 192.168.0.101
# 权限设置
ADMPW MYHOST=(root) ADMPWCOM

4. su 与 sudo的区别

  • sudo 命令需要输入当前用户的密码,su 命令需要输入切换的用户的密码。
  • sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。
  • sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 sudoer 所配置的用户名来记录是谁执行命令。而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。
  • sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。
posted @ 2023-12-06 23:25  箫笛  阅读(1215)  评论(0编辑  收藏  举报