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