linux中su与sudo的区别

Posted 果子哥丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中su与sudo的区别相关的知识,希望对你有一定的参考价值。

su命令

之前一直以为 su 是 super user,查阅资料之后才知道原来表示 switch user。

- 参数
su 的一般使用方法是:
su  `<user_name>`
或者
su - `<user_name>`

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

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

sudo

sudo 的英文全称是 super user do,即以超级用户(root 用户)的方式执行命令。

sudo su -
这种方式也能以 login-shell 的方式切换到 root 用户,但是它和 su - 方法是有区别的:

  • 前者输入 sudo su - 后,需要提供当前用户的登录密码,也就是 ubuntu 用户的密码;
  • 后者输入 su - 后,需要提供 root 用户的登录密码。

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

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

需要说明的是,只有 root 用户有权限使用 visudo 命令。

rumenz@local:~# visudo

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
ubuntu  ALL=(ALL:ALL) NOPASSWD: ALL
  • 第一个表示用户名,如 root 、ubuntu 等;
  • 接下来等号左边的 ALL 表示允许从任何主机登录当前的用户账户;
  • 等号右边的 ALL 表示:这一行行首对一个的用户可以切换到系统中任何一个其它用户;
  • 行尾的 ALL 表示:当前行首的用户,能以 root 用户的身份下达什么命令,ALL 表示可以下达任何命令。
    test_user  ALL=(ALL:ALL)  ALL       # test_user 使用 sudo 需要提供 test_user 的密码
    

如果一个用户在 /etc/sudoers 文件中,那么它就具有 sudo 权限,就能通过 sudo su - 或者 sudo -i 等命令切换到 root 用户了

二者的差异对比
我们已经看到:

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

以上是关于linux中su与sudo的区别的主要内容,如果未能解决你的问题,请参考以下文章

linux中su与sudo的区别

linux su和sudo命令的区别

linux命令su,sudo 使用和区别

linux su和sudo命令的区别

linux su和sudo命令的区别

linux su和sudo命令的区别