zoukankan      html  css  js  c++  java
  • 6、用户管理

    1.用户基本概述

    1.1.什么是用户?

    用户指的是能够正常登录Linux或Windows系统(可以理解为你租了房⼦,能够正常入驻)
    F:那Linux与Windows系统的用户有什么区别? Q:本质都是登陆系统,只不过Linux⽀持多个用户
    同时登陆。
    F:难道Windows就不算多用户操作系统吗? Q:其实不是,在Windows系统中可以创建多个用户,
    但不允许同⼀时刻多个用户登陆系统,但Linux系统则允许同⼀时刻多个用户同时登陆,登陆后
    相互之间操作并不影响。

    1.2.Linux下的用户有什么用,或者说我们为什么要创建用户?

            1.系统上的每⼀个进程(运行的程序),都需要⼀个特定的用户运行
            2.通常在公司是使用普通用户管理服务器,因为root权限过⼤,容易造成故障。
    

    1.3.如何查看系统中所存在的用户

    1.查看当前登录的用户信息

    [root@bgx    ~]#    id                #查看当前所登陆的用户信息
    uid=0(root)    gid=0(root)    groups=0(root)
    [root@bgx    ~]#    id    oldboy    #查看其它用户的信息
    uid=1000(oldboy)    gid=1000(oldboy)    groups=1000(oldboy)

    2.每⼀个进程都会由⼀个用户身份运行

    [root@bgx    ~]#    ps    aux|less    #简单使用⼀下,不用理解
    root        33782        0.0        0.0        0    0    ?    R    02:46        0:00    [kworker/u256:0]
    root        35637        0.0        0.0        0    0    ?    R    05:11        0:03    [kworker/0:2]

    1.4.那我们的用户存在哪呢?

    Linux系统会将用户的信息存放在/etc/passwd,记录了用户的信息,但没有密码信息,密码被存
    放在/etc/shadow中。也就是说这两个文件非常的重要,不要轻易删除与修改。
    1./etc/passwd 配置文件解释如下图,或者man 5 passwd

    2./etc/shadow 配置文件解释如下图,或者man 5 shadow
    PS: 使用change修改密码过期时间示例

    4.最后我们需要了解下系统对用户的⼀个约定?(约定娶你,就真的会娶吗?)

    用户UID 系统中约定的含义
    0 超级管理员,最⾼权限,有着极强的破坏能力
    1~200 系统用户,用来运行系统自带的进程,默认已创建
    201~999 系统用户,用来运行用户安装的程序,所以此类用户无需登录系统
    1000+ 普通用户,正常可以登陆系统的用户,权限比较小,能执行的任务有限

    PS:在CentOS7系统之前, UID1-499用于系统用户, 而UID 500+则用于普通用户

    2用户相关命令

    下⾯我们就围绕着用户的创建、变更、删除等来讲讲涉及到的命令: useradd、usermod、
    userdel

    2.1.使用useradd命令新增用户,注意: adduser命令软链接指向useradd命令

    #选项
    #    -u    指定要创建用户的UID,不允许冲突
    #    -g    指定要创建用户默认组
    #    -G    指定要创建用户附加组,逗号隔开可添加多个附加组
    #    -d    指定要创建用户家目录
    #    -s    指定要创建用户的bash    shell
    #    -c    指定要创建用户注释信息
    #    -M    给创建的用户不创建家目录
    #    -r    创建系统账户,默认无家目录
    #1.创建bgx用户,UID5001,基本组students,附加组sa    注释信息:2019    new    student,登陆shell:/b
    in/bash
    [root@bgx    ~]#    groupadd    sa
    [root@bgx    ~]#    groupadd    students
    [root@bgx    ~]#    useradd    -u    5001    -g    students    -G    sa    -c    "2019    new    student"    -s    /bin/bash   
    bgx
    #2.创建mysql系统用户,-M不建立用户家目录    -s指定nologin使其用户无法登陆系统
    [root@bgx    ~]#    useradd    mysql    -M    -s    /sbin/nologin
    [root@bgx    ~]#    useradd    -r    dba    -s    /sbin/nologin

    2.2.如何使用usermod命令修改用户信息

    #选项
    #    -u    指定要修改用户的UID
    #    -g    指定要修改用户基本组
    #    -G    指定要修改用户附加组,使用逗号隔开多个附加组,    覆盖原有的附加组
    #    -d    指定要修改用户家目录
    #    -s    指定要修改用户的bash    shell
    #    -c    指定要修改用户注释信息
    #    -l    指定要修改用户的登陆名
    #    -L    指定要锁定的用户
    #    -U    指定要解锁的用户
    
    #1.检查此前创建的用户信息
    [root@bgx    ~]#    grep    "bgx"    /etc/passwd
    bgx:x:5001:503:2019    new    student:/home/bgx:/bin/bash
    
    #2.修改bgx用户uid、gid,附加组
    [root@bgx    ~]#    groupadd    -g    5008    network_sa
    [root@bgx    ~]#    groupadd    -g    5009    devops
    [root@bgx    ~]#    usermod    -u    6001    -g5008    -a    -G    5009    bgx
    
    #3.修改bgx用户的注释信息,    用户家目录,    登录shell,    登录名
    [root@bgx    ~]#    usermod    -c    "2019    new    student"    -md    /bgx    -s    /bin/sh    -l    change_bgx    bgx
    #检查是否修改成功
    [root@bgx    ~]#    grep    "bgx"    /etc/passwd
    bgx_xuliangwei:x:6001:5008:2019    new    student:/bgx:/bin/sh
    [root@bgx    ~]#    id    change_bgx
    uid=6001(change_bgx)    gid=5008(network_sa)    groups=5008(network_sa),503(sa),5009(devo
    ps)
    [root@bgx    ~]#    ll    -d    /bgx
    drwx------.    2    bgx_xuliangwei    network_sa    4096 2014-09-23 00:13    /bgx
    
    #4.锁定用户[扩展]
    [root@bgx    ~]#    echo    "123"    |passwd    --stdin    change_bgx
    [root@bgx    ~]#    usermod    -L    change_bgx        #锁定后会无法登陆系统
    
    #5.解锁用户[扩展]
    [root@bgx    ~]#    usermod    -U    change_bgx

    PS: 当然还有很多命令可以查看用户的信息,以下简单列举⼀些,但都是我们常用,所以了解即

    1) 使用finger命名查询用户信息以及登录信息,示例: finger UserName
    2) 使用chfn命令修改用户信息,示例: chfn UserName
    3) 使用chsh命令修改用户登录Bash Shell,示例: chsh UserName
    4) 使用who、whoami、w检查用户登陆情况

    2.3.使用userdel命令删除账户

    #选项    -r    删除用户同时删除它的家目录
    #1.删除user1用户,但不删除用户家目录和    mail    spool
    [root@bgx    ~]#    userdel    user1
    #2.-r参数可以连同用户家目录⼀起删除(慎用)
    [root@bgx    ~]#    userdel    -r    user1

    3.用户扩展知识

    3.1.前⾯我们学习如何创建、修改、删除用户,接下来了解下用户的创建流程?

    1.useradd创建用户时,系统会以/etc/login.defs、/etc/defaults/useradd两个配置文件作为参照物,如果在创建用户时指定了参数则会覆盖/etc/login.defs、/etc/defaults/useradd文件默认配置,如未指定则使用默认。

    [root@bgx    ~]#    grep    -Ev    "^#|^$"    /etc/login.defs
    MAIL_DIR                /var/spool/mail
    PASS_MAX_DAYS            99999
    PASS_MIN_DAYS            0
    PASS_MIN_LEN            5
    PASS_WARN_AGE        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
    UMASK                    077
    USERGROUPS_ENAB            yes
    ENCRYPT_METHOD            SHA512
    
    [root@bgx    ~]#    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文件。

    2.当使用useradd创建用户时,创建的用户家目录下会存在 .bash_* 环境变量相关的文件,这些环境变量文件默认从/etc/skel目录中拷贝。这个默认拷贝环境变量位置是由/etc/defaults/useradd配置文件中定义的。

    #故障案例,在当前用户家目录执行了rm    -rf    .*,下次登录系统时出现-bash-4.1$,如何解决!
    -bash-4.1$    cp    -a    /etc/skel/.bash*    ./
    -bash-4.1$    exit
    [root@bgx    ~]#            #重新连接即可恢复

    3.2.如何为新用户设定密码,⼜如何变更用户密码

    创建用户后,如需要使用该用户登陆系统则需要为用户设定密码,设定密码使用passwd命令。
    建议密码复杂度⾼⼀些、⻓度⼤于10、出现各种特殊字符、无任何规律(不要出现名字,电话,⽣日等)
    PS: 注意事项
    1.普通用户只允许变更自己的密码,无法修改其他⼈密码,并且密码⻓度必须8位字符
    2.管理员用户允许修改任何⼈的密码,无论密码⻓度多⻓或多短。

    #1.使用passwd命令修改用户密码
    #    passwd                #给当前用户修改密码
    #    passwd    root            #给root用户修改密码
    #    passwd    oldboy            #给oldboy用户修改密码,普通用户只能自己修改自己
    
    #2.验证如下⼏项指标
    #    passwd                #root管理员用户登陆,修改root用户密码
    #    passwd    xuliangwei    #root用户登陆,修改其他用户的密码
    $    passwd    root            #普通用户修改root管理员密码
    #    echo    "123"    |    passwd    --stdin    xuliangwei        #非交互式修改密码
    
    #3.系统内置变量⽣成随机字符串
    [root@bgx    ~]#    echo  $RANDOM|md5sum|cut  -c  1-10
    d09fe9b1xs
    [root@bgx    ~]#    echo  $(echo    $RANDOM|md5sum  |cut  -c    5-14)  |tee  pass.txt|  passwd    --sn    xuliangwei
    
    #4.mkpasswd⽣成随机字符串,    -l设定密码⻓度,-d数⼦,-c小写字⺟,-C⼤写字⺟,-s特殊字符
    [root@bgx    ~]#    yum    install    -y    expect            //需要安装扩展包
    [root@bgx    ~]#    mkpasswd    -l    10    -d    2    -c    2    -C    2    -s    4
    |K&13bR)i/

    PS: 推荐密码保存套件工具,⽀持windows、MacOS、Iphone以及浏览器插件Lastpass官方⽹站

    4.用户组的管理

    4.1.什么是用户组?

    其实就是⼀种逻辑层⾯的定义,逻辑上将多个用户归纳至⼀个组,当我们对组操作,其实就相当于对组中的所有用户操作。

    4.2.对于用户来说,组有⼏种类别?

    基本组,用户只能有⼀个基本组,创建时可通过-g指定,如未指定则创建⼀个默认的组(与用户同名)
    附加组,基本组不能满⾜授权要求,创建附加组,将用户加入该组,用户可以属于多个附加组

    4.3.那组的信息保存在哪呢?

    组账户信息保存在/etc/group和/etc/gshadow两个文件中。重点关注group

    4.3.1./etc/group 配置文件解释如下图

    4.3.2./etc/gshadow 配置文件解释如下图


    1.使用groupadd命令新增组,groupadd [-g GID] groupname

    #创建基本组,    不指定gid
    [root@bgx    ~]#    groupadd    no_gid
    [root@bgx    ~]#    tail    -n1    /etc/group
    no_gid:x:1000
    
    #创建基本组,    指定gid为5555
    [root@bgx    ~]#    groupadd    -g    5555    yes_gid
    [root@bgx    ~]#    tail    -n1    /etc/group
    yes_gid:x:5555:
    
    #创建系统组,gid从201-999
    [root@bgx    ~]#    groupadd    -r    sys_group
    [root@bgx    ~]#    tail    -n1    /etc/group
    sys_group:x:990:

    2.使用groupmod命令新增组

    #-g    修改组gid
    [root@bgx    ~]#    groupmod    -g    1111    no_gid
    [root@bgx    ~]#    tail    -1    /etc/group
    no_gid:x:1111
    
    #-n    修改组名称
    [root@bgx    ~]#    groupmod    -n    active_group    yes_gid
    [root@bgx    ~]#    tail    -1    /etc/group
    active_group:x:5555:

    3.groupdel删除组,删除时需要注意,如果用户存在基本组则无法直接删除该组,如果删除用户则会移除默认的私有组,而不会移除基本组。

    #删除组
    [root@bgx    ~]#    groupdel    active_group
    
    #删除用户附加组
    [root@bgx    ~]#    id    xuliangwei
    uid=1069(xuliangwei)    gid=5005(xuliangwei)    groups=5005(xuliangwei),5004(devops)
    [root@bgx    ~]#    groupdel    devops
    [root@bgx    ~]#    id    xuliangwei
    uid=1069(xuliangwei)    gid=5005(xuliangwei)    groups=5005(xuliangwei)
    
    #无法删除用户基本组
    [root@bgx    ~]#    groupdel    network_sa
    groupdel:    cannot    remove    the    primary    group    of    user    'bgx_xuliangwei'
    #只有删除用户或者用户变更基本后,方可删除该组

    4.使用gpasswd设置组密码[扩展,可以不会]

    [root@bgx    ~]#    groupadd    devops
    [root@bgx    ~]#    gpasswd    devops
    Changing    the    password    for    group    devops
    New    Password
    Re-enter    new password:

    5.使用newgrp命令切换基本组身份[扩展,可以不会]

    #1.检查账户信息
    [root@bgx    ~]#    useradd    xuliangwei
    [root@bgx    ~]#    id    xuliangwei
    uid=1069(xuliangwei)    gid=5005(xuliangwei)    groups=5005(xuliangwei)
    
    #2.切换普通用户
    [root@bgx    ~]#    su    -    xuliangwei
    
    #3.创建新文件,查看文件的属主和属组
    [xuliangwei@bgx    ~]$    touch    file_roots
    [xuliangwei@bgx    ~]$    ll
    -rw-rw-r--    1    xuliangwei    xuliangwei    0    Jun    13 10:06    file_roots
    
    #4.使用newgrp切换到devops组
    [xuliangwei@bgx    ~]$    newgrp    devops
    Password:
    
    #5.创建文件,检查属主和属组
    [xuliangwei@bgx    ~]$    touch    file_test
    [xuliangwei@bgx    ~]$    ll
    -rw-rw-r--    1    xuliangwei    xuliangwei    0    Jun    13 10:06    file_roots
    -rw-r--r--    1    xuliangwei    devops                    0    Jun    13 10:08    file_test

    5.用户如何提权

    往往公司的服务器对外都是禁止root用户直接登录,所以我们通常使用的都是普通用户,那么问题来了?
    当我们使用普通用户执行/sbin目录下的命令时,会发现没有权限运行,这种情况下我们无法正常的管理服务器,那如何才能不使用root用户直接登录系统,同时⼜保证普通用户能完成日常工作?
    PS: 我们可以使用如下两种方式: su、sudo
    1.su切换用户,使用普通用户登录,然后使用su命令切换到root。优点:简单 缺点:需要知道root密码
    2.sudo提权,当需要使用root权限时进行提权,而无需切换至root用户,优点:安全、方便 缺点:复杂

    5.1.su身份切换

    在使用su切换前,我们需要了解⼀些预备知识,比如shell分类、环境变量配置文件有哪些

    5.1.1.Linux Shell主要分为如下⼏类

    交互式shell,等待用户输入执行的命令(终端操作,需要不断提示)
    非交互式shell,执行shell脚本, 脚本执行结束后shell自动退出
    登陆shell,需要输入用户名和密码才能进入Shell,日常接触的最多的⼀种
    非登陆shell,不需要输入用户和密码就能进入Shell,比如运行bash会开启⼀个新的会话窗⼝

    5.1.2.bash shell配置文件介绍(文件主要保存用户的工作环境)

    个⼈配置文件: ~/.bash_profile  ~/.bashrc 全局配置文件:/etc/profile  /etc/profile.d/*.sh  /etc/bashrc
    profile类文件, 设定环境变量, 登陆前运行的脚本和命令。bashrc 类文件, 设定本地变量, 定义命令别名
        PS: 如果全局配置和个⼈配置产⽣冲突,以个⼈配置为准。

    5.1.3.登陆系统后,环境变量配置文件的应用顺序是?

    登录式shell配置文件执行顺序: /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
    非登陆式shell配置文件执行顺序: ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
        PS: 验证使用echo在每行添加⼀个输出即可

    5.1.4.说了这么多预备知识,那这些和su命令切换用户有什么关系?

    su - username属于登陆式shell,su username属于非登陆式shell,区别在于加载的环境变量不⼀样。
    普通用户 su    - 可以直接切换至root用户,但需要输入root用户的密码。
    超级管理员root用户使用 su  -  username 切换普通用户不需要输入任何密码。
    #1.普通用户使用su切换root
    [xuliangwei@node1    ~]$    su
    密码:                                    #输入root的密码
    [root@node1    xuliangwei]#    pwd
    /home/xuliangwei
    #2.普通用户使用su    -切换到root,会加载root的环境变量
    [xuliangwei@node1    ~]$    su    -
    密码:
    [root@node1    ~]#    pwd
    /root
    #3.以某个用户的身份执行某个服务,使用命令`su    -c    username`
    [root@bgx    ~]#    su    -    xuliangwei    -c    'ifconfig'
    [root@bgx    ~]#    su    -    xuliangwei    -c    'ls    ~'

    5.2.sudo提权

    su 命令在切换用户身份时,如果每个普通用户都能拿到 root 用户的密码,当其中某个用户不小心泄漏了 root 的密码,那系统会变得非常不安全。
    为了改进这个问题,从而产⽣了 sudo 这个命令。
    sudo 执行⼀个仅有 root 身份才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是 root 的密码而是用户自己的密码。
    默认只有 root 用户能使用 sudo 命令,普通用户想要使用 sudo 需要 root 预先设定,即使用visudo 命令去编辑相关的配置文件 /etc/sudoers

    Centos7 提权
    [root@node1    ~]#    usermod    bgx    -G    wheel
    //日志审计
    [root@node1    ~]$    sudo    tail    -f    /var/log/secure
    
    CentOS6 提权
    #1.系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装
    [root@bgx    ~]#    yum    install    -y    sudo
    #2.使用`visudo`命令编辑sudo配置文件,    相当于    vim    /etc/sudoers`配置文件
    [root@bgx    ~]#    visudo        #会对配置进行验证
    xuliangwei    ALL=(ALL)    /bin/rm,    /bin/cp        #新增
    #3.配置选项详解
    1.用户名                        2.主机名            3.⻆⾊名                            4.命令名
    root                                                ALL=                (ALL)                                            ALL
    xuliangwei                        ALL                    使用最⾼⻆⾊执行                /bin/rm,    /bin/cp    #允许使用sudo执行命令
    xuliangwei            ALL=(ALL)        NOPASSWD:/bin/cp,    /bin/rm            //不需要密码使用rm、cp命令
    #4.使用visudo    -c检查配置文件
    [root@bgx    ~]#    visudo        -c
    /etc/sudoers:    parsed    OK

    5.3.普通用户验证 sudo 权

    #1.切换普通用户
    [root@bgx    ~]#    su    -    xuliangwei
    
    #2.检查普通用户sudo权限明细
    [xuliangwei@xuliangwei    ~]$    sudo    -l
    ...
    User    xuliangwei    may    run    the    following    commands    on this host:
                    (ALL)    /bin/rm,    (ALL)    /bin/cp
    #3.普通用户删除opt目录,删除失败
    [xuliangwei@xuliangwei    ~]$    rm    -rf    /opt/
    rm:    cannot    remove    `/opt':    Permission    denied
    
    #4.使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码
    [xuliangwei@xuliangwei    ~]$    sudo    rm    -rf    /opt

    5.4.sudo免密码配置选项

    #1.普通用户执行sudo不需要输入密码配置
    [root@bgx    ~]#    visudo
    xuliangwei    ALL=(ALL)    /bin/rm,    /bin/cp        #默认
    xuliangwei            ALL=(ALL)        NOPASSWD:/bin/rm,    /bin/cp        #修改后
    
    #2.默认普通用户无权删除
    [xuliangwei@xuliangwei    ~]$    rm    -f    /root/002
    rm:    cannot    remove    `/root/002':    Permission    denied
    #3.验证sudo免密码执行权限
    [xuliangwei@xuliangwei    ~]$    sudo    rm    -f    /root/002

    5.5. sudo 配置组

    //如果每增加⼀个用户需配置⼀行sudo,这样设置非常麻烦。所以可以进行如下设置
    %gbx        ALL=(ALL)                    NOPASSWD:/bin/rm,    /bin/cp        #新增组
    //group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。
    
    //创建用户加入该组
    [root@bgx    ~]#    groupadd    bgx
    [root@bgx    ~]#    useradd    bgx1    -g    bgx
    [root@bgx    ~]#    useradd    bgx2    -g    bgx
    
    //root用户建立目录
    [root@bgx    ~]#    mkdir    /root/bgx_sudo
    
    //切换用户并删除测试
    [root@node1    ~]#    su    -    bgx1
    [bgx1@xuliangwei    ~]$    rm    -rf    /root/bgx_sudo
    rm:    cannot    remove    `/root/bgx_sudo':    Permission    denied
    
    //使用sudo
    [bgx1@xuliangwei    ~]$    sudo    rm    -rf    /root/bgx_sudo

    当然配置文件 /etc/sudoers 包含了诸多配置项,可以使用命令 man sudoers 来获得帮助信息。
    下⾯介绍⼀个很实用的案例,我们的需求是将 Linux 服务器设置成如下:
    1.仅允许使用普通账户登陆 Linux 服务器,禁止root直接登录
    2.可以让普通用户不输入密码就能 sudo su - 切换到 root 账户

    //禁止root用户登陆
    [root@bgx    ~]#    sed    -i        's@#PermitRootLogin    yes@PermitRootLogin    no@g'    /etc/ssh/sshd_c
    onfig[root@bgx    ~]#    systemctl    restart    sshd
    //配置sudo权限
    [root@bgx    ~]#    visudo
    User_Alias USER_SU    =    bgx1,bgx2,xuliangwei
    Cmnd_Alias SU    =    /bin/su
    USER_SU ALL=(ALL)    NOPASSWD:SU
    //使用root登陆服务器失败
    ➜        ~    ssh    root@192.168.56.11
    root@192.168.56.11's    password:
    Permission    denied,    please    try    again.
    //使用普通用户登陆服务器
    ➜        ~    ssh    xuliangwei@192.168.56.11
    xuliangwei@192.168.56.11's    password:
    Last    login:    Mon Oct 30 09:28:21 2017    from    192.168.56.2
    //使用sudo提权至root用户
    [xuliangwei@xuliangwei    ~]$    sudo    su    -
    [root@bgx    ~]

    5.6. sudo 执行流程:

    1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存
    2.如果存在则不需要输入密码, 否则需要输入用户与密码
    3.输入密码会检测是否该用户是否拥有该权限
    4.如果有则执行,否则报错退出





  • 相关阅读:
    dedecms中如何去掉文章页面的广告
    织梦新建顶级栏目打不开,解决办法
    织梦dede模板中广告的去除方法?
    php 转码
    安卓插件
    计时器的实现
    json剥离
    安卓解析json
    安卓 读取网页源码
    java不用jni,也可以获得当前系统性能信息
  • 原文地址:https://www.cnblogs.com/Forever-x/p/75bbadf60d36d2e5edd0c91ad4ad4e94.html
Copyright © 2011-2022 走看看