su
和sudo
的差异自己在初次接触su
和sudo
的时候有疑问,为何它俩的功能如此相近呢?有什么差异呢?
第一、
su
意思为swith user
即切换用户的意思,从字面意思其可以”向上“切换成超级用户权限,也可以”向下“切换成普通用户权限
sudo
意思为super user do
,即允许非root用户运行通常需要超级用户权限的其他Linux命令。
第二、
以普通用户权限切换到超级用户为例
su -
或者su
,切换的过程中需要root账户密码
而sudo su -
在切换到超级用户的权限中时,只需要输入当前用户密码即可。
这个差异就保证了root账号密码不会被大多数人所知,保证了系统不会被恶意破坏;而root用户能够控制哪些用户可以具有sudo
的功能。
第三、
su -
或者 su
,只要用户知道root账户密码,就可以执行su命令,而此时需要额外产生一个新的shell
而sudo su -
在切换到超级用户的权限时,临时获取root权限来执行需要root权限的命令,此时不会产出一个新的shell。
第四、
sudo su -
在使用超级用户权限时,需要在/etc/sudoers
配置中进行配置本地用户对应有相应的权限,而su -
命令不需要该配置项。所以,报错xxx is not in the sudoers file. This incident will be reported.
就因为在sudoers
中没有配置本地客户的信息。
了解了su
和 sudo
的差异后,我们来看看在实际工作中所遇到的问题。
sudo
报错以及解决方案[songj@instance-jgzzg4xl ~]$ tail -n 4 /etc/shadow
tail: cannot open ‘/etc/shadow’ for reading: Permission denied
由于文件/etc/shadow
在非超级账号的环境下没有权限打开,因此报错permission denied
。我们使用sudo
命令来执行
[songj@instance-jgzzg4xl ~]$ sudo !!
## !! 表示执行上一条语句
sudo tail -n 4 /etc/shadow
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for songj:
songj is not in the sudoers file. This incident will be reported.
此时报了我们标题中的错误,如果是第一次遇到可能很懵逼,这里是说在sudoers文件中没有账户songj
的配置,我们需要切换到超级账户,对/etc/shadow
文件进行添加songj
用户的配置即可,具体如下:
su -
,切换到超级用户登录页面,提示你输入超级用户密码,输入密码后就进入了超级用户模式。(当然,你也可以直接用root账户直接进行操作) chmod u+w /etc/sudoers
。 /etc/sudoers
文件。也就是输入命令vim /etc/sudoers
,输入i
进入编辑模式,找到这一 行:"root ALL=(ALL) ALL",在它的下面添加"user ALL=(ALL) ALL"(这里的user是你的用户名),然后保存(就是先按一 下Esc键,然后输入:wq
)退出。 chmod u-w /etc/sudoers
。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。