Linux

Linux上su和su – 和sudo命令的区别

一 命令解释

su,其全称是switch user。表示切换到其它用户执行。

二 su和su – 的区别

1 su

表示切换到其它用户,同时使用的shell还是当前用户的shell,并没有开启一个新的shell。

2 su –

切换到新用户的同时,使用一个新的shell,同时读取新用户的配置信息。

3 典型举例

当前是root用户,分别执行su oracle和su – oracle这两条命令:

su oracle

[root@localhost ~]# pwd
/root
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@localhost ~]# pwd
/root
[root@localhost ~]# su oracle
[oracle@localhost root]$ pwd
/root
[oracle@localhost root]$ env|grep ORA
[oracle@localhost root]$ sqlplus / as sysdba
bash: sqlplus: command not found
[oracle@localhost root]$ 

su – oracle

[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@localhost ~]# pwd
/root
[root@localhost ~]# su - oracle
localhost-> env|grep ORA
ORACLE_UNQNAME=orcl
ORACLE_SID=orcl
ORACLE_BASE=/u01/app/oracle
ORACLE_HOSTNAME=localhost.localdomain
ORACLE_TERM=xterm
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
localhost-> pwd
/home/oracle
localhost-> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sun Jul 18 18:43:27 2021

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> 

当初刚刚入行Oracle的时候,不知道这个基础知识点。疑惑了良久,为啥我从root切换到oracle用户之后,无法执行sqlplus命令呢?

三 sudo

1 sudo的解释和作用

表示切换用户之后,可以执行一些较高权限的操作,同时而不需要输入root用户的口令,这在安全上比较稳妥一些。

比如,root用户可以执行一个较高权限的操作:shutdown -c取消定时关机的操作;现在如果普通用户pg11,想要执行该操作的话,那么,一个简单的途径是,su – root,然后以root用户身份去执行该操作。这样一来,我们就得把root用户的口令给到pg11,那么这样的话,对于整个系统的安全性而言,就变得不可控了。

那么怎么办呢?我们可以提前以root用户把shutdown -c这操作赋权给普通用户pg11,待到将来pg11需要执行该命令的时候,可以直接在命令行上执行:sudo shutdon -c;而不再需要知道root口令。

2 如何配置sudo

需要以root用户执行visudo命令,进行配置。

[root@centos-master ~]# visudo 
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
...

pg11  ALL=/sbin/shutdown -c

然后,普通用户pg11就可以执行sudo shutdown -c命令来取消系统关机的定时任务了。同时,而不再需要知道root用户的口令了:

[root@centos-master ~]# su - pg11
上一次登录:日 7月 18 18:37:17 CST 2021pts/4 上
[pg11@centos-master ~]$ shutdown -c
Failed to talk to shutdownd, shutdown hasn't been cancelled: 权限不够
[pg11@centos-master ~]$ sudo shutdown -c

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] pg11 的密码:
[pg11@centos-master ~]$ 
Broadcast message from root@centos-master (Sun 2021-07-18 18:36:50 CST):

The system shutdown has been cancelled at Sun 2021-07-18 18:37:50 CST!


[pg11@centos-master ~]$ 
3 小结

关于visudo的配置,可以查看该文件自身的解释和帮助说明,即执行visudo之后,前面有一大堆的提示信息,可以阅读一遍。

另外,root用户执行visudo命令编辑的文件,其实就是/etc/sudoers这个文件。

留言