Linux 命令 su 和 sudo 的区别

su 命令介绍及主要用法

首先需要解释下 su 代表什么意思。
su 是表示 「switch user」「切换用户」

su 的一般使用方法是:

su  <user_name>
su - <user_name>
su - -c "指令串"  # 以 root 的方式执行 "指令串"
[zhangsan@localhost root]$ su - -c "tail -n 10 /etc/passwd"
密码:   #输入 root 用户密码
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zhangsan:x:1000:1001::/home/zhangsan:/bin/bash

两种方法只差了一个字符 -,会有比较大的差异:

如果加入了 - 参数,那么是一种 login-shell 的方式,意思是说切换到另一个用户 <user_name> 之后,当前的 shell 会加载 <user_name> 对应的环境变量和各种设置;

如果没有加入 - 参数,那么是一种 non-login-shell 的方式,意思是说我现在切换到了 <user_name>,但是当前的 shell 还是加载切换之前的那个用户的环境变量以及各种设置

sudo命令介绍及主要用法

sudo 的英文全称是 super user do,即以超级用户(root 用户)的方式执行命令。这里的 sudo 和之前 su 表示的 switch user 是不同的

  • 主要用法

我们在 Linux 中经常会碰到 Permission denied 这种情况,比如以 zhangsan 用户的身份查看 /etc/shadow 的内容。因为这个文件的内容是只有 root 用户能查看的

[zhangsan@localhost root]$ tail -n 3 /etc/shadow
tail: 无法打开"/etc/shadow" 读取数据: 权限不够
[zhangsan@localhost root]$ sudo !!
sudo tail -n 3 /etc/shadow
[sudo] zhangsan 的密码:
ntp:!!:19104::::::
tcpdump:!!:19104::::::
zhangsan:$6$WxrcPCRU$x/jWGSH0pcF1K/IytsUPbW29cvX2PXetcnXAR15Zl1NhoCt5EYcs2tAlb/z.1K.L6ltdG7jCSJ5jBicAuumSP/:19244:0:99999:7:::

ps:实例中,我们使用了 sudo !! 这个小技巧,表示重复上面输入的命令,只不过在命令最前面加上 sudo

因为我已经设置了 sudo 命令不需要输入密码,所以这里 sudo !! 就能直接输出内容。如果没有设置的话,需要输入当前这个用户的密码,例如本例中,我就应该输入 ubuntu 用户的登录密码。

两次相邻的 sudo 操作,如果间隔在 5min 之内,第二次输入 sudo 不需要重新输入密码;如果超过 5min,那么再输入 sudo 时,又需要输入密码。所以一个比较省事的方法是设置 sudo 操作不需要密码。

  • 切换到 root 用户
sudo su -

这种方式也能以 login-shell 的方式切换到 root 用户,但是它和 su - 方法是由区别的:
前者输入 sudo su - 后,需要提供当前用户的登录密码,也就是 ubuntu 用户的密码;
后者输入 su - 后,需要提供 root 用户的登录密码。

扫描二维码关注公众号,回复: 16648870 查看本文章
sudo -i

这个命令和 sudo su - 效果一致,也是切换到 root 用户,也是需要提供当前用户的登录密码。

一个用户能否使用 sudo 命令,取决于 /etc/sudoers 文件的设置。
从上面查看/etc/shadow中我们已经看到,zhangsan用户可以正常使用 sudo ,这是因为 /etc/sudoers 文件里已经配置 zhangsan ALL=(ALL) ALL

/etc/sudoers 也是一个文本文件,但是因其有特定的语法,我们不要直接用 vim 或者 vi 来编辑它,需要用 visudo 这个命令。输入这个命令之后就能直接编辑 /etc/sudoers 这个文件了。
需要说明的是,只有 root 用户有权限使用 visudo 命令。

二者的差异对比

  • 使用 su - ,提供 root 账户的密码,可以切换到 root 用户;

  • 使用 sudo su - ,提供当前用户密码,也可以切换到 root 用户

猜你喜欢

转载自blog.csdn.net/weixin_43824520/article/details/126773837