Linux上su和su – 和sudo命令的区别
Contents
一 命令解释
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这个文件。