美文网首页Linux推文上热门(千万赞三)
Linux下两大用户身份切换命令su和sudo,有什么区别?

Linux下两大用户身份切换命令su和sudo,有什么区别?

作者: 学知 | 来源:发表于2020-02-27 14:33 被阅读0次

Linux系统作为多用户多任务的操作系统,在实际操作中,切换用户身份是常有的事。有时候要从普通用户切换到root用户执行授权命令,有时候要从root用户切花到普通用户启动某些服务,比如elasticsearch服务是拒绝root用户启动的。

Linux中切换用户身份的命令涉及两个:su命令和sudo命令,那么这两个命令有什么区别?该怎么用?su命令有何弊端?

su是最简单的身份切换命令,如下是su命令的具体用法以及功能

su命令:su [-lm] [-c "命令"] [用户名]   <= 方括号表示可以省略
命令用法如下:
su  <=省略用户名,默认切换到root用户
su - 或者su -l  <=切换用户的同时读取新用户的配置文件
su -m [用户名]或者su -p [用户名]  <=读取当前户配置文件
su -c "命令" [用户名] <=以目标用户身份执行一次命令后又回到当前户

值得注意的是,如果要连带着环境配置完整的切换到新用户,则需要执行 su -或者su -l命令,我们可以使用 env | grep 用户名 查看环境配置,比如env | grep root。

[root@VM_0_8_centos ~]# env | grep root
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
:/usr/local/softins/jdk1.8/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root

su的用法中,最常见的两种应用场景:

  • 由root用户切换到普通用户执行命令,如启动某些服务
  • 由普通用户切换到root用户执行命令,如授权命令

开篇我们提到过,有些软件是拒绝root用户启动的,比如elasticsearch,所以需要我们以普通用户的身份执行命令

su -c "nohup ./elasticsearch&" user1 <=临时切换到ser1执行命令

当然你也可以su - user1,然后再执行启动命令,只不过那是下下策罢了。

有时候我们也需要临时切换到root用户,给某些目录或者文件授权,命令如下

命令:su -c "命令" root
举个栗子:
[user1@centos soft]$ su -c "chmod -R 777 /usr/local/soft/" root
Password:    <=输入密码
[user1@centos soft]$ ll  <=查看权限
total 436028
-rwxrwxrwx 1 root root      2640 Dec 11 16:17 docker-ce.repo
-rwxrwxrwx 1 root root  29049540 Feb 23 11:46 elasticsearch-6.2.2.tar.gz
-rwxrwxrwx 1 root root 194545143 Feb 23 11:15 jdk-8u241-linux-x64.tar.gz
-rwxrwxrwx 1 root root  83415765 Feb 23 11:27 kibana-6.2.2-linux-x86_64.tar.gz
-rwxrwxrwx 1 root root 139464029 Feb 23 11:45 logstash-6.2.2.tar.gz

到此,你可能已经发现su命令的问题所在了,普通用户切换到root用户居然需要root用户的密码,这会导致root密码流失,始终不是稳妥的办法。所以,sudo命令闪亮登场。

相比于su命令切换到root身份需要root密码,sudo命令切换到root身份时只需要输入当前身份的密码即可,但只有/etc/sudoers配置文件中指定的用户才能执行sudo命令,root用户默认在该配置文件中。

sudo命令可以让你以新用户的身份执行某项任务,这个功能有点类似su -c "命令",用法如下:

sudo [-u 用户名] 单条命令   <=以新用户身份执行命令
sudo [-u 用户名] sh -c "命令1;命令2;命令3" <=sh -c执行一串命令

由于/etc/sudoers配置文件有其特定语法,所以需要用visudo命令进行编辑,在保存退出时系统会检查sudoers的语法。

下面我举例说明sudo命令的几种用法。
让普通用户可以执行root用户的所有命令

[root@VM_0_8_centos ~]# visudo
...省略...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL   <=系统默认
user1   ALL=(ALL)       ALL   <=新增的,让ser1可以执行sudo命令
...省略...
#user1代表用户账号,第一个ALL代表登录者的来源主机名,第二个(ALL)代表可
#可切换的身份,第三个ALL表示可执行的命令

经过上述的更改,user1用户便可以通过sudo命令执行root用户的命令。

#执行单条命令
[user1@VM_0_8_centos local]$ sudo -u root mkdir test1
#加入sh -c,一次执行多条命令
[user1@VM_0_8_centos local]$ sudo -u root sh -c "chmod -R 777 test1;ls"

让普通用户可以执行root用户的某些命令

如果普通用户可以执行所有的root命令,总归是不安全的,那在sudo命令授权是如何做限制呢?如下,

[root@VM_0_8_centos ~]# visudo
...省略...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL   <=系统默认
user1   ALL=(ALL)  !/usr/bin/passwd,!/usr/bin/passwd root,
/usr/bin/passwd [A-Za-z]*  
...省略...

上述命令表示,user1用户可以切换到任何用户,可以执行"passwd 任意字符"命令,但对passwd root命令做了限制,防止普通用户更改了root密码。

到此,su命令和sudo命令的基本用法已经讲解完毕,关于sudo命令,还有设置别名、用户组等高级操作,如有需求,可单独咨询。

相关文章

网友评论

    本文标题:Linux下两大用户身份切换命令su和sudo,有什么区别?

    本文链接:https://www.haomeiwen.com/subject/qpithhtx.html