L44.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- su和visudo

7.9 su:切换用户

7.9.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ su命令用户将当前用户切换到指定用户或者以指定用户的身份执行命令或程序

【语法格式】

su [option] [user]
su [选项] [用户名]

说明:

​ 1)在su命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。

​ 2)若命令后面的用户名省略了,则默认切换为root用户。

​ 3)从root用户切换到普通用户时,不需要任何密码,从普通用户切换到root用户时,则需要输入root密码。

【选项说明】

​ 表7-11针对该命令的参数选项进行了说明。

​ 表7-11 su命令的参数选项及说明

在这里插入图片描述

7.9.2 使用范例

​ **范例7-19:**由普通用户neteagle切换到root用户。

[C:\~]$ ssh [email protected]


Connecting to 10.0.0.201:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Sat Oct 17 20:44:31 2020
Wellcome to Linux!
[neteagle@centos7 ~]$ whoami	#当前登录的用户为普通用户neteagle。
neteagle
[neteagle@centos7 ~]$ su root	#切换用户,若切换的用户为root,则可以省略不写。
Password: 	#这里当然就是root用户的密码了。

[root@centos7 /home/neteagle]# env |egrep 	"USER|MAIL|PWD|LOGNAME"		#查看当前登录用户root的环境变量。
USER=neteagle
MAIL=/var/spool/mail/neteagle
PWD=/home/neteagle	#已经登录到root了,为什么家目录还是/home/neteagle呢?
LOGNAME=neteagle

​ 细心的读者应该已经看到了,如果使用su而不加上“-”这个参数,那么切换前的用户的环境信息还会存在,这会引起很多麻烦,甚至还会出现意想不到的结果。因此,切换用户时,最好是"su - 用户名"。这是生产场景中标准的切换用户的操作方法。

​ 退出到普通用户重新测试,命令如下:

[root@centos7 /home/neteagle]# exit
[neteagle@centos7 ~]$ su - root	#第二种切换用户的方式,使用参数"-",root可省略。
Password: 
Last login: Sun Oct 18 16:32:33 CST 2020 on pts/1
[root@centos7 ~]# env |egrep "USER|MAIL|PWD|LOGNAME"	#再次查看环境变量。
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root

​ 这回环境变量的内容都已经切换到root下了,这里需要提醒一下的是,不只是切换到root,切换到其他用户也是一样。

​ 从上面的范例可以得出如下结论。

  • "su 用户名"虽然能够切换到对应用户,但是登录后的环境变量信息有些还是切换前用户的环境变量信息。

  • “su - 用户名”不但能切换到相应的用户,还能将登录后的环境变量一并切换,这是标准规范的操作方法。

  • ​ **范例7-20:**如何让系统在每次开机时自动以普通用户身份启动指定服务脚本?

    [neteagle@centos7 ~]$ tail -1 /etc/rc.local	#在开机启动文件/etc/rc.local中写入启动命令。
    su - neteagle -c '/bin/sh /server/scripts/deploy.sh'	#以普通用户身份执行脚本,但并不是在用户的下面。
    

    ​ **提示:**除此之外还有很多方法,例如,可以进入到普通用户下再执行该脚本。

    ​ 通过普通用户运行服务是一个很好的提升系统安全性的办法,在生产环境中,大多数服务都可以通过普通用户启动(不使用特权端口),而不用root用户启动。这样就可以使系统的安全性又提高一个等级,同时使用普通用户管理就可以了,管理者不需要具体root权限。

7.9.3 su命令总结

  • 普通用户切换到root用户,可使用su -或su - root,但必须输入root密码才能完成切换。
  • root用户切换到普通用户,可使用“su - 普通用户名”的写法。不需要输入任何密码就能完成切换。在CentOS 5.X系统中,切换到普通用户后,在执行一些命令如ifconfig时,可能会遇到环境变量PATH路径问题,也会因此找不到某些命令(一般是/sbin、/usr/sbin等下面的命令),这时就需要使用全路径执行或者调整配置普通用户的PATH变量内容,CentOS 6和CentOS 7不存在这方面的问题。
  • 如果仅希望在某用户下执行命令,而不直接切换到该用户下操作,则可以使用"su - 用户名 -c 命令"的方式。

7.10 visudo:编辑sudoers文件

7.10.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ visudo命令是专门用来编辑/etc/sudoers这个文件的,同时它还提供了语法检查等功能。/etc/sudoers文件是sudo命令(见下文)的配置文件。

【语法格式】

visudo [option]
visudo [选项]

​ **说明:**在visudo命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。

【选项说明】

​ 表7-12针对该命令的参数选项进行了说明。

​ 表7-12 visudo命令的参数选项及说明
在这里插入图片描述

7.10.2 使用范例

​ **范例7-21:**执行visudo对普通用户neteagle和younggirl授权的例子。

​ 执行如下visudo命令,即可打开sudo的配置文件进行编辑:

[root@centos7 ~]# visudo	#相当于直接执行vim /etc/sudoers编辑,但使用命令方式更安全,推荐此种方式。

​ 在/etc/sudoers文件的大约第100行下面添加需要提升为root权限的普通用户名及对应权限,格式如下:

neteagle        ALL=(ALL)       ALL
  #此行是第100行,将neteagle提权为root身份。
younggirl ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
#授权younggirl使其可以以root身份添加和删除用户权限。
#分别对neteagle和younggirl两个用户做不同的授权,如上。
:wq

​ 其中,visudo或者vim /etc/sudoers,可在100行下面加入,也可以在其他位置加入。

​ 上述授权内容对应的说明见表7-13。

​ 表7-13 sudo提权配置说明

待授权的用户或组 机器=(授权角色) 可以执行的命令
user MACHINE= COMMANDS
neteagle ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel

​ **提示:**如果younggirl用户被授予上述权限,那么它可以在所有的机器上以所有的角色运行useradd、userdel命令,而neteagle用户则会拥有与root相同的权限,并且可以切换到root账户。

​ 如果是针对用户组,则对应的授权命令如下:

​ %用户组 机器=(授权使用哪个角色的权限) /usr/sbin/useradd

​ 通过sudo命令进行系统的授权管理的目的是,既能让运维人员正常工作,又不会威胁到系统的安全,还可以审计用户使用sudo的提权操作命令,默认的用户时无法获取root权限的。、

​ 为了管理方便,工作中可以为neteagle授权ALL权限,neteagle既可管理整个系统,平时也可以使用neteagle用户处理工作,而不使用root用户。

​ **范例7-22:**检查sudoers文件语法的例子。

​ 有的时候,用户并不是使用visudo(保存时会自动检查语法)编辑的sudoers文件,而是使用vim或者echo等命令编辑的sudoers文件,此时就需要执行如下命令检查编辑文件的语法是否正确,如果语法不正确,则可能会导致授权无法生效的问题。

​ 例如,工作中若有批量管理用户的需求,那么使用快速操作命令增加sudo授权,就 需要单独执行语法检查,快速操作命令如下:

[root@centos7 ~]# \cp /etc/sudoers /etc/sudoers.ori
[root@centos7 ~]# echo "neteagle ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
[root@centos7 ~]# tail -1 /etc/sudoers
neteagle ALL=(ALL) NOPASSWD: ALL

​ 上述操作是直接追加内容到sudoers文件,并没有进行语法检查,因此需要单独执行语法检查命令:

[root@centos7 ~]# visudo -c	#使用-c选项进行语法检查。
/etc/sudoers: parsed OK

猜你喜欢

转载自blog.csdn.net/qq_25599925/article/details/125686804