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


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

    7.11.1 命令详解

    【命令星级】 ★★★★★

    【功能说明】

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

    【语法格式】

    sudo [option]
    sudo [选项]
    
    • 1
    • 2

    ​ **说明:**在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目录的权限。
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

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

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

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

      [C:\~]$ ssh younggirl@10.0.0.201
      
      
      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用户被授权的权限。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
    • 对于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
    
    • 1
    • 2
    • 3

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

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

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

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

    ​ 待用户执行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
    
    • 1
    • 2

    ​ 建议使用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 [选项] [用户名]
    
    • 1
    • 2

    ​ **说明:**在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    JS服务端技术—Node.js知识点锦集
    03-【HAL库】STM32实现SYN6288模块语音播报.md
    【从零开始学习 SystemVerilog】8.17、SystemVerilog 约束—— Disable Randomization(关闭随机)
    看完这篇,不信你还能不会用 MyBatis-Plus
    LabVIEW
    刷题记录(NC15033 小G有一个大树,NC51178 没有上司的舞会)
    1.3.20 交换机端口安全
    搜索与图论 ---- 染色法判定二分图
    Spark Core
    UE5和UE4版本更新重大改变汇总。
  • 原文地址:https://blog.csdn.net/qq_25599925/article/details/125686843