L45.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- sudo和id

7.11 sudo:以另一个用户身份执行命令

7.11.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ sudo命令可以让普通用户在执行指定的命令或程序时,拥有超级用户(也可以是其他用户)的权限,并且可以有针对性地(精细)将不同命令或程序授予指定的普通用户,同时普通用户不需要知道root密码就可以得到授权,这个授权可以使用visudo配置管理。

【语法格式】

sudo [option]
sudo [选项]

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

【选项说明】

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

​ 表7-14 sudo命令的参数选项及说明

在这里插入图片描述

7.11.2 使用范例

​ **范例7-23:**查看用户被visudo授权后拥有的权限。

​ 在7.10节,我们已经对neteagle用户进行了授权,此时再以neteagle用户的身份登录系统,就可以通过执行类似于sudo ls -l /root(sudo后面加上正常命令)的命令来以root用户的权限管理系统了,命令如下:

[neteagle@centos7 ~]$ ls /root
ls: cannot open directory /root: Permission denied	#可以看到,neteagle用户是无法直接访问/root家目录的。
[neteagle@centos7 ~]$ sudo ls /root	#如果授权配置中含有NOPASSWD,则执行时不提示密码,否则会要求输入当前用户的密码。
anaconda-ks.cfg 
#通过sudo命令使得neteagle用户具备访问/root目录的权限。

​ 对于上述代码段的说明,具体如下:

  • 通过sudo授权管理后,所有用户执行授权的特殊权限格式为“sudo 命令”。

  • 如果需要切换到root执行相关操作,则可以通过“sudo su -”命令,注意,此命令提示的密码为当前用户的密码,而不是root的密码。

  • 执行“sudo -l”命令可以查看当前用户被授予的sudo权限集合。

    ​ 以下是查看younggirl用户授权的结果情况:

    [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: Sun Oct 18 14:58:13 2020
    Wellcome to Linux!
    [younggirl@centos7 ~]$ sudo -l	#注意,这里是younggirl用户,授权较低。
    
    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 younggirl: 	#提示输入密码,注意是younggirl用户的密码,而非root密码。
    Matching Defaults entries for younggirl on centos7:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
        HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
        LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User younggirl may run the following commands on centos7:
        (ALL) /usr/sbin/useradd, /usr/sbin/userdel
    #查看到younggirl用户被授权的权限。
    
  • 对于Linux系统bash的内置命令,一般无法进行sudo授权,例如,cd命令。

    ​ sudo授权与su切换的原理示意图如图7-1所示。

在这里插入图片描述
​ 图7-1 su与sudo用户角色切换原理图

​ 生产环境中通常会禁止root远程登录,不过,系统会为每个运维人员建立一个普通账户,然后根据运维人员的要求,通过sudo控制登录系统的权限,事实证明这是一个不错的权限管理方式。当然,笔者在生产环境中还使用了ldap统一认证登录及授权管理的方式。

​ 普通用户的环境变量问题:在早期的CentOS 5系统中,普通用户在执行系统管理相关的命令时会遭遇到环境变量的问题,导致找不到执行的命令(CentOS 6以后的系统已经不存在这个问题了)。

​ sudo授权对于bash的内置命令处理是个难题,因为内置命令没有实体文件和路径,不过一般都有解决方法,例如可以使用sudo ls替代sudo cd,有的网友使用sudo bash后再使用内置命令,这与做是很危险的,不推荐使用这种方法。

7.11.3 扩展知识

【时间戳文件位置】

​ 以下命令可用查看CentOS 5.8的时间戳文件位置:

[root@centos5 ~]# ll /var/run/sudo
total 0
drwx------. 2 root neteagle 4096 8-25 12:21 neteagle

​ 要想查看CentOS 6的时间戳文件位置,则要使用如下命令:

[root@centos6 ~]# ll /var/db/sudo
total 4
drwx------ 2 root neteagle 4096 Feb 10 10:35 neteagle	#初始状态是没有这个文件。

​ 若要查看CentOS 7的时间戳文件位置,则要使用如下命令:

[root@centos7 ~]# ll /var/run/sudo
total 0
drwx------. 2 root root 60 Oct 18 17:56 ts

​ 待用户执行sudo并且输入密码后,用户会获得一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。但超时以后,用户就必须重新输入密码了。

​ 可以使用sudo的-k或-K参数清空sudo用户的时间戳,这样还会提示输入密码,但是如果配置授权对应的用户时加入了NOPASSWD选项,那么执行sudo命令时就永久不会提示输入密码了。

【sudo的配置文件/etc/sudoers】

​ 以下命令可用于查看sudo的配置文件/etc/sudoers里的内容:

[root@centos7 ~]# ll /etc/sudoers
-r--r-----. 1 root root 4441 Oct 18 17:40 /etc/sudoers

​ 建议使用visudo编辑这个文件,因为该命令带有语法检查,否则一旦出错了,普通用户就会无法使用sudo了。直接在命令行执行visudo即可自动打开/etc/sudoers文件。

​ 如果是通过vim编辑/etc/sudoers,则在保存时要使用"wq!"强制保存,否则会提示只读不能保存的错误,而且最后还要用visudo -c做语法检查,这与做实在是太麻烦了,无特殊要求时建议都使用visudo编辑sudo的配置文件。

7.12 id:显示用户与用户组的信息

7.12.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ id命令通常用了查询用户和组信息以及对应的UID、GID等信息。

【语法格式】

id [option] [username]
id [选项] [用户名]

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

【选项说明】

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

​ 表7-15 id命令的参数选项及说明

在这里插入图片描述

7.12.2 使用范例

​ **范例7-24:**显示用户的UID和GID等信息。

[root@centos7 ~]# id neteagle	#查看neteagle的用户及组相关的信息。
uid=1004(neteagle) gid=1005(incahome) groups=1005(incahome)	#用户和组信息以及对应的UID、GID。
[root@centos7 ~]# id -u neteagle	#只查看用户UID。
1004
[root@centos7 ~]# id -g neteagle	#只查看用户GID。
1005
[root@centos7 ~]# id -un neteagle	#只查看用户名。
neteagle
[root@centos7 ~]# id -gn neteagle	#只查看用户组名。
incahome

猜你喜欢

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