Linux中su、su-和sudo区别
Contents
这几个命令基本都是跟 Linux 下的用户权限控制相关。在 Linux 中开发,是不推荐使用 root 用户直接操作的。如果直接使用 root 用户,对内:用户本身权限过大,很容易对系统误伤;对外:一旦 root 身份运行的程序被攻击了,自己机器的 root 权限就直接暴露了。
su 和 su -
su 的英文全称是 Substitute User
,亦或者可以理解为 Switch User
,即切换用户。
使用 su - username
或者 su username
,可以切换用户。当 root 用户切换到其他用户时,不需要输入密码;当其他用户向 root 用户切换,需要输入 root 密码。
命令后边不加目标用户名时,直接使用 su
和 su -
命令,向 root 用户切换。
- 使用
su
命令从普通用户向root用户切换,这种方式得到一个non-login shell
,可以看到 pwd 以及 PATH 都没改变,这样仅仅是切换了 root 身份,shell环境仍然是普通用户的。 - 使用
su -
命令,在登录和退出时可以看到login
以及logout
,因为这种方式得到的是一个login shell
,pwd 和 PATH 都分别切换到了 root 用户的家目录和 PATH.
上图中我的普通用户前边没有用户标识,是由于我在用户环境下安装了Zsh.
sudo
sudo 的英文全称是 superuser user do
,即使用 root 权限去执行命令。
在开发中,难免有些命令需要root权限执行,此时不建议切换root用户去执行,效率问题倒是其次,这样需要在普通用户和root用户下配置两套环境,有可能造成环境管理混乱,或者是冗余。因此建议只在普通用户下操作,使用 sudo
命令,执行需要root权限的操作。
在 Linux 中,管理 sudo 的配置文件是 /etc/sudoers
,这是一个只读文件,通过命令 visudo
更改文件配置。
如果需求比较复杂的话,文件中也给出了 Host、User、Command等多种别名配置的示例,具体可以参考 /etc/sudoers
文件。
配置好之后,普通用户即可通过 sudo
+ command,执行一些需要 root 权限的命令,只需要输入当前用户密码,而不用输入 root 用户密码。这样无论是在安全性,还是在环境管理等方面,都有极大的益处。
Author bjjdkp
LastMod 2019-04-11