• 06-Linux用户管理


    1. 用户

    1.1 基本概述
    用户: 指的是能够正常登录Linux或Windows系统的使用者. (可以理解为你租了房子, 能够正常入驻) 
    
    Linux与Windows系统的用户区别:
    本质都是登陆系统, bus
    Windows系统中可以创建多个用户, 但不允许同一时刻多个用户登陆系统, 
    Linux系统则允许同一时刻多个用户同时登陆, 登陆后相互之间操作并不影响.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1.2 Linux下创建用户的作用
    1. 通常在公司是使用普通用户管理服务器, 因为root权限过大, 容易造成故障.
    2. 系统上的每一个进程(运行的程序), 都需要一个的用户运行, 可以创建特定的用户运行某些程序.  
    
    • 1
    • 2
    1.3 用户与分组
    一个用户只能属于一个基本组, 可以有多个附加组.
    每个组拥有一定的权限, 将用户添加到某个组, 用户就有了该组拥有的权限.
    
    • 1
    • 2

    img

    2. 查看用户信息

    2.1 查看用户信息命令
    查看用户信息命令: id [选项]  [用户]
    uid: 用户id, 系统只能识别uid, 不能识别名字, 人看名字
    gid:组id  
    groups: 用户所属附加组的id 
    context: 信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 查看当前用户信息(如果省略用户名, 则id命令显示有关当前登录用户的信息.)
    [root@kid ~]# id
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    
    • 1
    • 2
    • 3
    # 查看指定用户信息
    [root@kid ~]# id 用户名
    ... # 目前只有一个root用户
    
    • 1
    • 2
    • 3
    ps: 每一个进程都会由一个用户身份运行
    
    • 1
    [root@kid ~]# ps aux|less 
    root        279  0.0  0.0      0     0 ?        S<   14:13   0:00 [nfit]
    root        280  0.0  0.0      0     0 ?        S<   14:13   0:00 [mpt/0]
    
    • 1
    • 2
    • 3
    2.2 查看用户信息文本
    Linux系统中:
    用户的信息存放在/etc/passwd, (记录了用户的信息, 但没有密码信息, 一行为一个用户).
    密码被存放在/etc/shadow中, (加密后的密码).
    * 这两个文件非常的重要, 不要轻易删除与修改.
    
    • 1
    • 2
    • 3
    • 4
    # 查看第一行的文本信息
    [root@kid ~]# head -1 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    # 1  2 3 4  5    6     7     
    # /etc/passwd 配置文件解释如下图
    
    • 1
    • 2
    • 3
    • 4
    • 5

    img

    # 查看用户密码文本
    [root@kid ~]#  head -1 /etc/shadow 
    root:$6$v0xj2KgObMg2wBhC$Ba2rnT2w4F18i0arTc/SDm6RBlJ0u.B38neZ15Ma6P.hw9yASOLKwKNu2VKXkOtUPtmdiiifW/eMeeV/uDBJu1::0:99999:7:::
    
    # 配置文件解释如下图
    
    • 1
    • 2
    • 3
    • 4
    • 5

    img

    ps: 使用change修改密码过期时间示例: https://kid.cnblogs.com/xuliangwei/p/10679004.html
    
    • 1
    2.3 系统对用户的ID的约定
    用户UID系统中约定的含义
    0超级管理员, 最高权限, 有着极强的破坏能力
    1~200系统用户, 用来运行系统自带的进程, 默认已创建
    201~999系统用户, 用来运行用户安装的程序, 所以此类用户无需登录系统
    1000+普通用户, 正常可以登陆系统的用户, 权限比较小, 能执行的任务有限
    ps: 在CentOS7系统之前, UID1-499用于系统用户, 而UID 500+则用于普通用户
    
    • 1

    3. 新增用户命令

    新增用户命令: useradd [选项] [用户名]   (注意: adduser命令软链接指向useradd命令)
    选项  
        -u 指定要创建用户的UID,不允许冲突 (某些UID已经被使用)
        -g 指定要创建用户默认组  
        -G 指定要创建用户附加组, 逗号隔开可添加多个附加组  
        -d 指定要创建用户家目录  
        -s 指定要创建用户的bash shell [/bin/bash(默认使用的)   /sbin/nologin (不可以登入, 用于运行特定软件)]
        -c 指定要创建用户注释信息  
        -M 给创建的用户不创建家目录  
        -r 创建系统账户, 默认无家目录  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3.1 新增用户组命令
    新增用户组命令:groupadd [选项] [组名]	
    选项:
    	-g:设定组的 ID
    	
    第九小节详细介绍...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    3.2 新增用户练习
    新增xx用户
    
    • 1
    [root@kid ~]# useradd xx
    
    [root@kid ~]# id xx
    uid=1001(xx) gid=1004(xx) groups=1004(xx)
    
    # 查看倒数第一行的信息, 新添加的用户信息, 已追加的方式添加到文本中.
    [root@kid ~]# tail -1 /etc/passwd
    xx:x:1001:1004::/home/xx:/bin/bash
    # 按照配置文件创建用户, 在/home/下创建用户目录, 默认使用的bash shi /bin/bash,  详情见第七小节.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    用户名qz, UID5001, 基本组students, 附加组f1, f2 注释信息:2022 new student,登陆shell: /bin/bash  
    
    • 1
    # 添加分组students f1 f2 
    [root@kid ~]# groupadd students
    [root@kid ~]# groupadd f1
    [root@kid ~]# groupadd f2
    
    # 新增用户
    [root@kid ~]# useradd -u 5001 -g students -G f1,f2 -c "2022 new student" -s /bin/bash qz  
    
    # 附加分组可以有多个使用,隔开 中间不允许有空格否则提示(useradd: group '' does not exist
    
    # 查看用户信息
    [root@kid ~]# id qz
    uid=5001(qz) gid=1000(students) groups=1000(students),1001(f1),1002(f2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    创建mysql系统用户, -M不建立用户家目录 -s指定nologin使其用户无法登陆系统  
    * 这个用户账户用于运行特定的运行, 不需要有家目录, 也不需要登入.
    
    • 1
    • 2
    # 新增用户
    [root@kid ~]# useradd mysql -M -s /sbin/nologin  
    
    # 查看用户信息
    [root@kid ~]# id mysql
    uid=5002(mysql) gid=5002(mysql) groups=5002(mysql)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4. 修改用户信息

    修改用户信息命令: usermod [选项] [用户名]
    选项:  
        -u 指定要修改用户的UID  
        -g 指定要修改用户基本组  
        -G 指定要修改用户附加组, 使用逗号隔开多个附加组, 覆盖原有的附加组, -aG追加  
        -d 指定要修改用户家目录 -md 旧家搬新家  
        -s 指定要修改用户的bash shell  
        -c 指定要修改用户注释信息  
        -l 指定要修改用户的登陆名  
        -L 指定要锁定的用户  
        -U 指定要解锁的用户  
        -md 移动环境(家目录)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    # 1.检查此前创建的qz用户信息  
    [root@kid ~]# grep "qz" /etc/passwd  
    qz:x:5001:1000:2022 new student:/home/qz:/bin/bash
    
    • 1
    • 2
    • 3
    # 2. 修改qz用户uid、gid, 附加组  -a表示追加
    # 添加分组network, network
    [root@kid ~]# groupadd -g 5008 network
    [root@kid ~]# groupadd -g 5009 network  
    [root@kid ~]# usermod -u 6001 -g 5008 -a -G 5009 qz  
    [root@kid ~]# id qz
    uid=6001(qz) gid=5008(network) groups=5008(network),1001(f1),1002(f2),5009(devops)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 3.修改qz用户的注释信息, 用户家目录, 登录shell, 登录名 -l:改名字, -md, 移动环境
    [root@kid ~]# usermod -c "x x x" -md /qz -s /bin/sh -l change_qz qz  
    # 检查是否修改成功 
    [root@kid ~]# grep "qz" /etc/passwd  
    change_qz:x:6001:5008:x x x:/qz:/bin/sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 4.锁定用户
    # 为用户设置密码 为 123
    [root@kid ~]# echo "123" |passwd --stdin change_qz 
    Changing password for user change_qz.
    passwd: all authentication tokens updated successfully.
    # 锁定用户
    [root@kid ~]# usermod -L change_qz 
    
    # 使用change_qz用户登入系统 ↓ SSH服务器拒绝了密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20220829175521916

    # 5.解锁用户 
    [root@kid ~]# usermod -U change_
    
    # 再次输入密码 123 登入成功
    
    • 1
    • 2
    • 3
    • 4

    image-20220829175833407

    5. 删除用户

    删除账户命令: userdel [选项] [用户名]
    选项:
    	-r 删除用户同时删除它的家目录  
    	(一般不会删除用户的家目录, 删除用户即可, 用户家目录可能安装一些需要使用的软件...)
    
    • 1
    • 2
    • 3
    • 4
    # 1.删除mysql用户, 但不删除用户家目录用户邮箱
    [root@kid ~]# userdel mysql  
    [root@kid ~]# ls /var/spool/mail/  
    kid  change_qz  mysql
    
      
    #2.-r参数可以连同用户家目录一起删除(慎用)  
    [root@kid ~]# userdel -r change_qz  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6. 用户相关命令

    finger命名查询用户信息以及登录信息(yum install finger -y), 示例: finger UserName  
    
    • 1
    [root@kid ~]# finger root
    Login: root           			Name: root
    Directory: /root                    	Shell: /bin/bash
    On since Sun Aug 28 22:03 (CST) on tty1    20 hours 7 minutes idle
    On since Mon Aug 29 15:39 (CST) on pts/1 from 10.0.0.1
       4 seconds idle
    Last login Mon Aug 29 17:53 (CST) on pts/0 from 10.0.0.1
    No mail.
    No Plan.
    ________________________________________________________________________
    登录名:root                     名称:root
    目录:/root                            Shell:/bin/bash
    自8月28日星期日22:03(美国中部时间)起,tty1 20小时7分钟空闲
    自8月29日星期一15:39(CST)起,从10.0.0.1开始在pts/1上
    	4秒空闲
    最后一次登录:8月29日星期一17:53(CST)从10.0.0.1开始在pts/0上
    没有邮件。
    没有计划。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    chfn命令修改用户信息(其实是修改注释), 示例: chfn UserName 
    
    • 1
    [root@kid ~]# chfn root
    Changing finger information for root.
    Name [root]: root
    Office []: python
    Office Phone []: 21
    Home Phone []: 10086
    
    Finger information changed.
    [root@kid ~]# finger root
    Login: root           			Name: root
    Directory: /root                    	Shell: /bin/bash
    # 多了这一行备注
    Office: python, 21			Home Phone: x1-0086   
    On since Sun Aug 28 22:03 (CST) on tty1    20 hours 10 minutes idle
    On since Mon Aug 29 15:39 (CST) on pts/1 from 10.0.0.1
       3 seconds idle
    Last login Mon Aug 29 17:53 (CST) on pts/0 from 10.0.0.1
    No mail.
    No Plan.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    chsh命令修改用户登录Bash Shell, 示例: chsh UserName  
    
    • 1
    ps: /bin/下有bash  sh
    sh(Bourne Shell)是一个早期的重要shell, 1978年写的
    bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。1987年写的
    
    • 1
    • 2
    • 3
    # 创建用户qz
    [root@kid ~]# useradd qz
    
    # 查看用户信息
    [root@kid ~]# cat /etc/passwd | grep 'qz'
    qz:x:5003:5003::/home/qz:/bin/bash
    
    # 修改登入bash
    [root@kid ~]# chsh qz
    Changing shell for qz.
    # 输入新的bash所在路径
    New shell [/bin/bash]: /bin/sh
    Shell changed.
    # 查看用户信息
    [root@kid ~]# cat /etc/passwd | grep 'qz'
    qz:x:5003:5003::/home/qz:/bin/sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    who 当前有哪些用户登录了
    
    • 1
    [root@kid ~]# who
    # tty1 文本模式模式 (VMware)
    root     tty1         2022-08-28 22:03
    # pts/1 伪(虚拟)终端 (xshell)
    root     pts/1        2022-08-29 15:39 (10.0.0.1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    whoami 查看当前有登入用户名
    
    • 1
    [root@kid ~]# whoami
    root
    
    • 1
    • 2
    w 查看系统中当前活动的用户
    
    • 1
    [root@kid ~]# w
    # 提示边框太小无法展示, 将终端窗口拉伸一下
    w: 69 column window is too narrow
    
    [root@kid ~]# w
     18:30:07 up  4:16,  2 users,  load average: 0.01, 0.04, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1                      Sun22    4:07   0.21s  0.21s -bash
    root     pts/0    10.0.0.1         18:26    7.00s  0.02s  0.00s w
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2022-08-29_00858

    7. 创建用户流程

    * 1. useradd创建用户时,
    系统会以/etc/login.defs、/etc/defaults/useradd两个配置文件作为参照物, 
    如果在创建用户时指定了参数则会覆盖/etc/login.defs、/etc/defaults/useradd文件默认配置, 如未指定则使用默认.
    
    • 1
    • 2
    • 3
    [root@kid ~]# grep -Ev "^#|^$" /etc/login.defs  
    [root@kid ~]# cat /etc/login.defs  
    MAIL_DIR    /var/spool/mail  # 定义了邮件路径放在哪  
    PASS_MAX_DAYS   99999        # 密码过期时间  
    PASS_MIN_DAYS   0            # 密码最少0天  
    PASS_MIN_LEN    5            # 密码长度  
    PASS_WARN_AGE   7            # 7天提醒  
    UID_MIN                  1000  
    UID_MAX                 60000  
    SYS_UID_MIN               201  
    SYS_UID_MAX               999  
    GID_MIN                  1000  
    GID_MAX                 60000  
    SYS_GID_MIN               201  
    SYS_GID_MAX               999  
    CREATE_HOME yes             # 是否创建home  
    UMASK           077  
    USERGROUPS_ENAB yes         # 用户不指定组, 默认创建一个同名组  
    ENCRYPT_METHOD SHA512       # 密码加密算法  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    [root@kid ~]# cat /etc/default/useradd  
    GROUP=100  
    HOME=/home              # 把用户的家目录建在/home中.  
    INACTIVE=-1             # 是否启用账号过期停权,-1表示不启用.   
    EXPIRE=                 # 账号终止日期,不设置表示不启用.  
    SHELL=/bin/bash         # 新用户默认所有的shell类型.  
    SKEL=/etc/skel          # 配置新用户家目录的默认文件存放路径.  
    CREATE_MAIL_SPOOL=yes   # 创建mail文件.  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    * 2. 当使用useradd创建用户时, 创建的用户家目录下会存在 .bash_
    	环境变量相关的文件, 这些环境变量文件默认从/etc/skel目录中拷贝.
    	这个默认拷贝环境变量位置是 /etc/defaults/useradd配置文件中定义的.
    
    • 1
    • 2
    • 3
    # 故障案例, 在当前用户家目录执行了rm -rf ., 下次登录系统时出现-bash-4.1$, 如何解决!  
    -bash-4.1$ cp -a /etc/skel/.bash ./  
    -bash-4.1$ exit  
    # 重新连接即可恢复  
    [root@kid ~]#   
    
    • 1
    • 2
    • 3
    • 4
    • 5

    8. 设置、修改密码

    创建用户后, 如需要使用该用户登陆系统则需要为用户设定密码, 设定密码使用passwd命令.
    建议密码复杂度高一些、长度大于10、出现各种特殊字符、无任何规律(不要出现简单的弱口令, 很容易被入侵...)
    
    ps: 注意事项  
    1.普通用户只允许变更自己的密码, 无法修改其他人密码, 并且密码长度必须8位字符  
    2.管理员用户允许修改任何人的密码, 无论密码长度多长或多短.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    * 1. 修改用户密码命令:  passwd 
    
    • 1
    passwd           # 给当前用户修改密码  
    passwd root      # 给root用户修改密码  
    passwd qz        # 给qz用户修改密码, 普通用户只能自己修改自己  
    
    • 1
    • 2
    • 3
    * 2. 非交互式修改密码 
    
    • 1
    [root@kid ~]# echo "123" | passwd --stdin qz  
    Changing password for user qz.
    # passwd:所有身份验证令牌都已成功更新。
    passwd: all authentication tokens updated successfully.
    
    • 1
    • 2
    • 3
    • 4
    * 3. 批量创建100个用户的shell脚本, 密码都为123456  
    
    • 1
    for i in {1..100}  
    do  
    useradd test$1  
    echo "123456" |passwd --stdin test$1  
    done  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    * 4.系统内置变量生成随机字符串(对随机字符串进行md5加密)  
    
    • 1
    [root@kid ~]# echo $RANDOM|md5sum|cut -c 1-10  
    d09fe9b1xs  
    [root@kid ~]# echo $(echo $RANDOM|md5sum |cut -c 5-14) |tee pass.txt| passwd --stdin qz  
    
    • 1
    • 2
    • 3
    * 5. mkpasswd生成随机字符串, -l设定密码长度,-d数子,-c小写字母,-C大写字母,-s特殊字符  
    
    • 1
    # 需要安装扩展包  
    [root@kid ~]# yum install -y expect   
    [root@kid ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4
    # 密码↓
    2KS1!">cp%
    
    • 1
    • 2
    • 3
    • 4
    • 5
    ps: 推荐密码保存套件工具, 支持windows、MacOS、Iphone以及浏览器插件,
    Lastpass官方网站: https://kid.lastpass.com/zh
    
    • 1
    • 2

    9. 用户组管理

    9.1 组有类别
    对于用户来说, 组分以下两种类别:
    基本组: 用户只能有一个基本组, 创建时可通过-g指定.
    私有组: 创建用户时未指定基本组则会创建一个默认的私有组(与用户同名).
    附加组: 基本组不能满足授权要求, 创建附加组, 将用户加入该组, 用户可以属于多个附加组.  
    
    • 1
    • 2
    • 3
    • 4

    img

    9.2 组的信息位置
    用户组的信息保存在 /etc/group (重点)  /etc/gshadow 两个文件中. 
    
    • 1
    [root@kid ~]# head -1 /etc/group  
    root:x:0:
    # /etc/group 配置文件解释如下图
    
    • 1
    • 2
    • 3

    img

    [root@kid ~]# head -1 /etc/gshadow 
    root:::
    # /etc/gshadow 配置文件解释如下图  
    
    • 1
    • 2
    • 3

    xx

    9.3 新增组
    使用新增组命令: groupadd [-g GID] 组名
    
    • 1
    # 创建基本组, 不指定gid  
    [root@kid ~]# groupadd no_gid 
    
    # 查看倒数第一行的文本信息
    [root@kid ~]#  tail -n1 /etc/group  
    no_gid:x:5010:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 创建基本组, 指定gid为5555  
    [root@kid ~]# groupadd -g 5555 yes_gid
    
    # 查看倒数第一行的文本信息
    [root@kid ~]# tail -n1 /etc/group 
    yes_gid:x:5555:
    
    # 创建系统组, gid从201-999  
    [root@kid ~]# groupadd -r sys_group  
    [root@kid ~]# tail -n1 /etc/group  
    sys_group:x:990:  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    9.4 修改组
    修改组命令: groupmod [选项] [组名]
    选项:
    	-g 修改组gid  
    	-n 修改组名称
    
    • 1
    • 2
    • 3
    • 4
    # 修改组id
    [root@kid ~]# groupmod -g 1111 no_gid  
    [root@kid ~]# tail -1 /etc/group  
    no_gid:x:1111:  
    
    • 1
    • 2
    • 3
    • 4
    # 修改组名(把yes_gid名字改为active_group)  
    [root@kid ~]# groupmod yes_gid -n active_group   
    [root@kid ~]# tail -1 /etc/group  
    active_group:x:5555:  
    
    • 1
    • 2
    • 3
    • 4
    9.5 删除组
    删除组命令: groupdel [选项] [组名]
    
    删除组注意事项:
    用户正在使用的基本组与私有组, 无法直接删除该组,
    (用户正在使用这个组, 只有删除用户或者用户变更, 解除对该组的占用, 方可删除该组).
    删除用户则会移除默认的私有组, 而不会移除基本组. 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 删除组  
    [root@kid ~]# groupdel active_group  
    
    • 1
    • 2
    # 添加分组students f1 f2 (之前创建过qz就不要再执行了新增qz用户的命令了)
    [root@kid ~]# groupadd students
    [root@kid ~]# groupadd f1
    [root@kid ~]# groupadd f2
    
    # 新增用户(指定基本组 students)
    [root@kid ~]# useradd -u 5001 -g students -G f1,f2 -c "2022 new student" -s /bin/bash qz 
    
    # 查查用户信息
    [root@kid ~]# id qz
    uid=5001(qz) gid=1000(students) groups=1000(students),1001(f1),1002(f2)
    
    # 删除用户附加组   
    [root@kid ~]# groupdel f1
    [root@kid ~]# groupdel f2
    [root@kid ~]# id qz
    uid=5001(qz) gid=1000(students) groups=1000(students)
    
      
    # 无法删除用户基本组(这个组被用户占用中...)  
    [root@kid ~]# groupdel students  
    groupdel: cannot remove the primary group of user 'qz'
    
    # 删除用户qz
    [root@kid ~]# userdel -r qz
    
    # 查看qz的基本组students(这个组不上私有组是基本组, 私有组的组名与用户名一样...)
    [root@kid ~]# cat /etc/group | grep 'students'
    students:x:1001:
    
    # 删除qz的基本组students
    [root@kid ~]#  groupdel students  
    
    • 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
    • 30
    • 31
    • 32
    # 新建用户没有指定基本组则会默认创建私有组(私有组的组名与用户名一致)
    [root@kid ~]# useradd xxx
    [root@kid ~]# id xxx
    uid=1000(xxx) gid=1003(xxx) groups=1003(xxx)
    
    # 删除私有组 (这个组被用户占用中...)  
    [root@kid ~]# groupdel xxx
    groupdel: cannot remove the primary group of user 'xxx'
    
    # 删除用户 
    [root@kid ~]# userdel xxx
    # 查看私有组xxx(已经被移除)
    [root@kid ~]# cat /etc/group | grep 'xxx'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    9.6 设置组密码
    设置组密码命令: gpasswd
    
    • 1
    # 创建分组
    [root@kid ~]# groupadd devops  
    # 设置组密码
    [root@kid ~]# gpasswd devops  
    Changing the password for group devops  
    New Password:  123
    Re-enter new password: 123
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    9.7 切换基本组身份
    切换基本组身份命令: newgrp
    
    • 1
    # 创建用户 
    [root@kid ~]# useradd qq  
    
    # 查看用户 信息  
    [root@kid ~]# id qq
    uid=1000(qq) gid=1004(qq) groups=1004(qq)
    
    # 切换普通用户  
    [root@kid ~]# su - qq  
    
    # 创建新文件,查看文件的属主和属组  
    [qq@kid ~]$ touch file_roots  
    [qq@kid ~]$ ll file_roots 
    -rw-rw-r--. 1 qq qq 0 Aug 29 21:20 file_roots
    
    # 使用newgrp切换到devops组  
    [lqz@kid ~]$ newgrp devops  
    Password:  
    
    # 创建文件, 检查属主和属组  
    [qq@kid ~]$  newgrp devops  
    Password: 
    [qq@kid ~]$ touch file_test
    [qq@kid ~]$ ll
    total 0
    -rw-rw-r--. 1 qq qq     0 Aug 29 21:20 file_roots
    -rw-r--r--. 1 qq devops 0 Aug 29 21:22 file_test
    # 后面创建的文件属组是devops, 账户默认使用自己的基本组或私有组, 使用newgrp切换分组(临时有效)
    
    # 用户分组信息不会改变
    [qq@kid ~]$ id qq
    uid=1000(qq) gid=1004(qq) groups=1004(qq)
    
    • 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
    • 30
    • 31
    • 32

    10. 用户提权

    往往公司的服务器对外都是禁止root用户直接登录, 所以通常使用的都是普通用户.
    使用普通用户执行/sbin目录下的命令时, 会发现没有权限运行, 这种情况下我们无法正常的管理服务器, 
    那么如何才能不使用root用户直接登录系统, 同时又保证普通用户能完成日常工作?  
    
    通过以下两种方式:
    1. su 切换用户, 使用普通用户登录, 然后使用su命令切换到root. 
       优点:简单 缺点:需要知道root密码  
    2. sudo 提权, 当需要使用root权限时进行提权, 而无需切换至root用户.
       优点:安全、方便 缺点:复杂
       
    * 在使用su切换前, 我们需要了解一些预备知识, 比如shell分类、环境变量配置文件有哪些
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    10.1 Linux Shell介绍
    1. Shell分类
    Linux Shell主要分为如下几类 : 
    
    交互式shell, 等待用户输入执行的命令(终端操作,需要不断提示)  
    非交互式shell, 执行shell脚本, 脚本执行结束后shell自动退出  
    
    登陆shell, 需要输入用户名和密码才能进入Shell, 日常接触的最多的一种  
    非登陆shell, 不需要输入用户和密码就能进入Shell,比如运行bash命令就会开启一个新的会话窗口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 切换用户
    [root@kid ~]# su qq
    # bash新开一个会话窗口并切换到该窗口(非登陆shell)
    [qq@kid ~]$ bash 
    # 退出新开窗口到之前的窗口
    [qq@kid ~]$ exit
    exit
    # 退到登入用户的窗口(由此看出切换用户其实是新开一个会话窗口)
    [qq@kid ~]$ exit
    exit
    # 在退就退出连接了
    [root@kid ~]# exit
    logout
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    2. shell配置文件
    bash shell配置文件介绍(文件主要保存用户的工作环境)  
    个人配置文件(当前用户目录下)
    ~/.bash_profile 
    ~/.bashrc .
    
    全局配置文件:
    /etc/profile 
    /etc/profile.d/*.sh 
    /etc/bashrc  
    profile类文件, 设定环境变量, 登陆前运行的脚本和命令.
    bashrc 类文件, 设定本地变量, 定义命令别名.  
    
    ps: 如果全局配置和个人配置产生冲突,以个人配置为准。
    
    登陆系统后, 环境变量配置文件的应用顺序:
    登录式shell配置文件执行顺序: 
    /etc/profile-> /etc/profile.d/*.sh -> ~/.bash_profile
    -> ~/.bashrc-> /etc/bashrc  
    
    非登陆式shell配置文件执行顺序: 
    ~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh  
    
    验证方法: 使用echo在每行添加一个输出即可.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    10.2 切换用户
    su命令切换用户有什么关系?
    su - username 属于登陆式shell, 
    su username   属于非登陆式shell, 区别在于加载的环境变量不一样.  
    su username   属于非登陆式shell
    
    选项-绝对切换目录时时候, 加载当前用户的环境, 切换到当前用户的家目录中.
    没有选项-执行切换用户命令不会目录不会发生改变.
    
    普通用户输入: su - 可以直接切换至root用户, 但需要输入root用户的密码.  
    超级管理员root用户输入: su - username 切换普通用户不需要输入任何密码.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    # 普通用户使用su切换root  
    [qq@kid ~]$ su
    Password: 
    [root@kid qq]# pwd
    /home/qq
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 普通用户使用su -切换到root, 会加载root的环境变量  
    [qq@kid ~]$ su -
    Password: 
    Last login: Mon Aug 29 22:18:41 CST 2022 on pts/0
    [root@kid ~]# pwd
    /root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 以某个用户的身份执行某个服务(不会切换用户), 使用命令: su - 用户 -c 命令  
    
    # ifconfig 命令需要安装 net-tools
    [root@kid ~]# yum install net-tools -y
    # 查看网卡信息
    [root@kid ~]# su - qq -c 'ifconfig' 
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.0.0.128  netmask 255.255.255.0  broadcast 10.0.0.255
            inet6 fe80::2f36:687e:30de:1e0  prefixlen 64  scopeid 0x20<li
    ...
    
    # 查看qq的home目录下的文件
    [root@kid ~]# su - qq -c 'ls ~'  
    file_roots  file_roots2  file_test
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    # pstree命令以树状图显示进程间的关系
    [root@kid ~]# yum provides pstree  
    ...
    [root@kid ~]# yum install psmisc -y  
    ...
    [root@kid ~]# pstree  
    systemd─┬─NetworkManager─┬─dhclient
            │                └─2*[{NetworkManager}]
            ├─VGAuthService
            ├─auditd───{auditd}
            ├─chronyd
            ├─crond
            ├─dbus-daemon───{dbus-daemon}
            ├─firewalld───{firewalld}
            ├─login───bash───vi
            ├─lvmetad
            ├─master─┬─pickup
            │        └─qmgr
            ├─polkitd───6*[{polkitd}]
            ├─rsyslogd───2*[{rsyslogd}]
            ├─sshd───sshd───bash───su───bash───su───bash───su───bash─┬─su
            │                                                        └─su───bash───pstree
            ├─systemd-journal
            ├─systemd-logind
            ├─systemd-udevd
            ├─tuned───4*[{tuned}]
            └─vmtoolsd───2*[{vmtoolsd}]
    
    • 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
    # 关闭root远程登陆, 普通用户登进来, su - 切换到root用户  
    [root@kid ~]#  vim /etc/ssh/sshd_config  
    # 搜索
    :/PermitRootLogin
    # 设成no, wq保存退出
    PermitRootLogin yes   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image-20220829223355789

    10.3 提权
    su命令在切换用户身份时, 如果每个普通用户都能拿到root用户的密码, 
    当其中某个用户不小心泄漏了root的密码, 那系统会变得非常不安全.为了改进这个问题, 从而产生了sudo这个命令.
    
    • 1
    • 2
    # 快速配置sudo方式  
    # 切换到普通用户
    [root@kid ~]# su - qq
    Last login: Mon Aug 29 22:29:06 CST 2022 on pts/0
    [qq@kid ~]$ pwd
    /home/qq
    
    # 查看日志文件
    [qq@kid ~]$ tail -f /var/log/secure 
    # 提示没有权限
    tail: cannot open ‘/var/log/secure’ for reading: Permission denied
    tail: no files remaining
    
    # 在root下把qq用户加到wheel组中  wheel拥有一些权限
    [root@kid ~]# usermod qq -G wheel 
    
    # 检查普通用户能提权的命令  
    [qq@kid root]$ sudo -l
    [sudo] password for qq: 
    Matching Defaults entries for qq on kid:
        !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
    
    # 用户qq可以在kid上运行以下命令:
    User qq may run the following commands on kid:
    #  (全部)全部
        (ALL) ALL
    
    # 为qq用户设置密码123
    [root@kid ~]# passwd qq
    Changing password for user qq.
    New password: 123
    # 忽略这个提示
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 123
    passwd: all authentication tokens updated successfully.
    
    # 切换用户
    [root@node1 ~]$ sudo tail -f /var/log/secure    # sudo 审计日志  
    [qq@kid ~]$ sudo tail -f /var/log/secure 
    # 提示
    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.
        
        #1) 尊重他人的隐私。
        #2) 在你打字之前先想一想。
        #3) 权力越大,责任越大。
    
    # 输入当前账户的密码不上root的密码, 如果没有密码会提示, 直接回车会提示 Sorry, try again.
    [sudo] password for qq: 123
    # 日志的内容
    Aug 29 22:41:41 kid su: pam_unix(su-l:session): session opened for user qq by root(uid=0)
    Aug 29 22:42:12 kid sudo: pam_unix(sudo:auth): authentication failure; logname=root uid=1000 euid=0 tty=/dev/pts/0 ruser=qq rhost=  user=qq
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    普通用户不设置密码提权会出错!
    
    • 1

    2022-08-29_00863

    10.4 提权限制
    提升后权限太大, 能否有办法限制仅开启某个命令的使用权限? 其他命令不允许? (提权后只允许执行特定的命令)
    
    • 1
    多用户多角色多命令配置, 需求如下:
    
    • 1
    用户角色可以执行的命令
    ops1 ops2运维网络命令:ifconfig/ping 软件命令:rpm/yum 服务命令:service/systemctl 进程命令:kill/killall
    dev1 dev2开发网络命令:ifconfig/ping 服务命令:service/systemctl
    一般正常配置sudo方式使用visudo进入配置文件  ( visudo命令等同于 vi /etc/sudoers  )
    __________________________________________方式1格式_____________________________________
    
    # 1. 命令别名  别名 = 用户(多个用户使用,隔开)   
    User_Alias OPS = ops1,ops2
    
    # 2. Cmnd别名  别名 = 命令 (多个命令使用,隔开)
    Cmnd_Alias 别名 = /usr/bin/yum,/usr/sbin/useradd 
    
    # 3. 别名 主机名=(角色名)     命令别名(多个命令别名使用,隔开)  
    用户别名       ALL=(ALL)      命令别名    
    用户别名       ALL=(ALL)       命令别名   
    
    ___________________________________________方式2格式______________________________________
    # 1. Cmnd别名  别名 = 命令 (多个命令使用,隔开)
    Cmnd_Alias 别名 = /usr/bin/yum,/usr/sbin/useradd 
    
    # 2. 别名 主机名=(角色名) 命令别名(多个命令别名使用,隔开)  
    %group_ops ALL=(ALL) 命令别名
    
    _________________________________________________________________________________________
    # /usr/bin/yum, /usr/sbin/useradd   # 允许使用sudo执行命令  
    # NOPASSWD:/bin/cp, /bin/rm        # NOPASSWD不需要使用密码 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    visudo -c # 检查刚刚编辑的是否有错误  
    sudo -l  # 检查用户对主机有哪些权限  
    
    • 1
    • 2
    1. 方式1
    编辑sudo的配置文件 /etc/sudoers
    
    • 1
    # 第1步 创建用户与分组并配置密码
    [root@kid ~]# useradd ops1
    [root@kid ~]# useradd ops2
    [root@kid ~]# useradd dev1
    [root@kid ~]# useradd dev2
    
    # 设置密码(必须) 
    [root@kid ~]# echo "123" |passwd --stdin ops1
    Changing password for user ops1.
    passwd: all authentication tokens updated successfully.
    
    [root@kid ~]# echo "123"|passwd --stdin ops2
    Changing password for user ops2.
    passwd: all authentication tokens updated successfully.
    
    [root@kid ~]# echo "123"|passwd --stdin dev1
    Changing password for user dev1.
    passwd: all authentication tokens updated successfully.
    
    [root@kid ~]# echo "123"|passwd --stdin dev2
    Changing password for user dev2.
    passwd: all authentication tokens updated successfully.
    
    # 创建分组并设置密码
    [root@kid ~]# groupadd DEV
    
    • 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
    # 第2步 使用visudo命令来编辑sudo的配置文件, 命令等同于 vi /etc/sudoers
    [root@kid ~]# visudo
    # 将下面代码复制到文件中(末尾即可)
    
    • 1
    • 2
    • 3
    # 定义用户组(SPS DEV 与 group没有关系)
    # 用户别名 OPS = ops1,ops2
    User_Alias OPS = ops1,ops2
    # 用户别名 DEV = ops1,ops2
    User_Alias DEV = dev1,dev2
    
    # 定义可执行的命令组 
    # 网卡命令可以执行ifconfig, ping命令
    Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
    # 软件类命令可u执行 rpm yum命令
    Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
    # 服务类命令可以执行 service, systemctl start命令
    Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
    # 进程类命令可u执行 kill, killall命令
    Cmnd_Alias PROCESSES = /bin/kill, /usr/bin/kill, /usr/bin/killall
    
    # 将用户组合命令组进行关联(OPS可以执行上面四类命令, DEV可以执行软件类, 服务类命令)
    OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,PROCESSES
    DEV ALL=(ALL) SOFTWARE,SERVICES
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    # 3.登陆对应的用户使用 sudo -l 验证权限  
    [root@kid ~]# su - ops1
    # 查看权限
    [ops1@kid ~]$ sudo -l
    # 提示权限越大责任越大...
    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 ops1: 
    Matching Defaults entries for ops1 on kid:
        !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
    
    # 用户ops1可以在kid上运行以下命令:(刚才配置的所有命令, dev就不测试了)
    User ops1 may run the following commands on kid:
        (ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum, /sbin/service, /usr/bin/systemctl
            start, /bin/kill, /usr/bin/kill, /usr/bin/killall
    
    
    • 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
    2. 方式2
    使用groupadd添加组, 然后给组分配sudo的权限, 如果有新用户加入, 直接将用户添加到该组.
    
    • 1
    # 1.添加两个真实的系统组,  group_dev group_ops  
    [root@kid ~]# groupadd group_dev  
    [root@kid ~]# groupadd group_ops 
    
          
    # 2.添加四个用户, 并设置分组     group_ops(user_a  user_b)   group_dev(user_c  user_d)  
    [root@kid ~]# useradd user_a -G group_dev 
    [root@kid ~]# useradd user_b -G group_dev  
    [root@kid ~]# useradd user_c -G group_ops  
    [root@kid ~]# useradd user_d -G group_ops 
    
    # 3.设置密码(必须) 
    [root@kid ~]# echo "1" | passwd --stdin user_a
    Changing password for user user_a.
    passwd: all authentication tokens updated successfully.
    [root@kid ~]# echo "1" | passwd --stdin user_b 
    Changing password for user user_b.
    passwd: all authentication tokens updated successfully.
    [root@kid ~]# echo "1" | passwd --stdin user_c 
    Changing password for user user_c.
    passwd: all authentication tokens updated successfully.
    [root@kid ~]# echo "1" | passwd --stdin user_d  
    Changing password for user user_d.
    passwd: all authentication tokens updated successfully.
    
          
    # 4.在sudo中配置规则 (将方法一的代码替换为下列代码)
    [root@kid ~]# visudo  
    
    # 定义可执行的命令组 
    # 网卡命令可以执行ifconfig, ping命令
    Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
    # 软件类命令可u执行 rpm yum命令
    Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
    # 服务类命令可以执行 service, systemctl start命令
    Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
    # 进程类命令可u执行 kill, killall命令
    Cmnd_Alias PROCESSES = /bin/kill, /usr/bin/kill, /usr/bin/killall
    
    # 将用户组合命令组进行关联(OPS可以执行上面四类命令, DEV可以执行软件类, 服务类命令)
    %group_ops ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,PROCESSES 
    %group_dev ALL=(ALL) SOFTWARE,SERVICES
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    # 5.检查sudo是否配置有错  
    [root@kid ~]# visudo -c  
    /etc/sudoers: parsed OK  
    
    • 1
    • 2
    • 3
    # 6.检查user_a 的权限  
    [user_a@kid ~]$ sudo -l
    
    ...
    # 用户ops1可以在kid上运行以下命令:(刚才配置的所有命令, 其他的就不测试了)
    User user_a may run the following commands on kid:
        (ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum, /sbin/service, /usr/bin/systemctl
            start, /bin/kill, /usr/bin/kill, /usr/bin/killall
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    10.4 sudo命令执行流程
    1. 普通用户执行sudo命令时, 会检查/var/db/sudo是否存在时间戳缓存  
    2. 如果存在则不需要输入密码, 否则需要输入用户与密码  
    3. 输入密码会检测是否该用户是否拥有该权限  
    4. 如果有则执行, 否则报错退出
    
    • 1
    • 2
    • 3
    • 4

    img

    10.5 系统内置命令提权报错
    问题描述: 
    cd到/etc/docker, 提示权限不够的错误,
    使用sudo cd /etc/docker时, 提示sudo: cd:找不到命令.
    
    问题分析:
    cd不是一个应用程序而是Linux内建的命令, 而sudo仅仅只对应用程序起作用。
    
    >type cd 
    cd is a shell builtin. cd是一个内置的shell命令.
    
    sudo foo 只意味着以root权限运行foo程序
    所以, sudo cd /etc/docker会报sudo: cd:找不到命令。
    
    解决方法:
    使用sudo -i命令提升用户权限
    > sudo -i
    > cd /etc/docker
    使用sudo -s命令打开特殊shell(使用exit命令退出shell)
    > sudo -s
    > cd /etc/docker
    
    作者:craneyuan
    链接:https://www.jianshu.com/p/d172a92475f1
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    • 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
  • 相关阅读:
    【js】单文件上传和大文件分片上传功能实现
    【组成原理-数据】浮点数的编码与运算
    https协议
    labview下位机软件编程笔记
    华为机试真题专栏订阅指引
    Kotlin 设置和获取协程名称
    文件内容显示
    Golang入门笔记(10)—— 闭包 closure
    【计算机网络】计算机学习笔记
    java反射
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/126594323