用户和组的介绍:

用户和组管理分为:

  用户账户

  组账户

  权限分配

为了计算机的安全运作和权限分配,Cisco开发并建立了AAA认证体系:

    Authentication:认证,核实使用者身份;

    Authorization:授权,对已经核实身份的使用者进行资源分配;

    Accounting:审计,监管资源被使用的情况;

后来发现AAA可以运用于绝大多数领域。

能够实现资源使用和完成任务的主体是:应用程序进程;

在文件上会有一层安全上下文:Secure Context,如果安全安全上下文匹配,就可以访问这个资源;

进程是以其发起者的身份运行的;可以理解为,进程的所有者就是其发起者;每个进程上都会标记上其所有者的身份信息;

当进程试图访问资源的时候,安全上下文会比对进程的所有者和资源的所有者之间的关系:

     首先,查看进程的所有者是否和资源的所有者为同一用户,如果是,就按照所有者拥有的权限来使用资源;

     如果不是,则判断进程的所有者是否属于该资源所属组的成员;如果是,按照所属组的权限来使用资源;

     如果不是,就按照最为普通的其他用户的权限来使用资源;

用户账户:实现操作者和计算机交互式操作的基础,是操作者的身份在满足了验证条件之后的计算机系统中的映射;

用户账户分为:

   超级用户(管理员,只有一个):root

   普通用户:

          系统用户(非登录用户):为了保证安全,往往会让某些进程或服务必须以非管理员的用户身份运行;这类非管理员用户,称为系统用户;此类用户一般不允许登录到系统的;

          登录用户:能够通过登录行为验证用户身份进而获得资源访问权限并可以对资源进行操作的用户,可以称为登录用户;

计算机用户账户的验证方式:

      用户登录名称:为操作者提供的简单易记的字符串标识;

      用户的数字ID(UID):为计算机操作系统提供的标准的数字标识符号,范围:0~2^32-1

超级用户:

  用户名:root

  UID(不允许重复):0

普通用户:

   系统用户(UID):

          CentOS 6-:1~499

          CentOS 7+:1~999

   登录用户(UID):

         CentOS 6-:500+

         CentOS 7+:1000+

 注意:60000+的UID通常需要用户自定义标识;

系统将用户的名称和UID进行识别叫做名称解析,首先将用户名放入系统中叫做用户解析库,

用户名解析库:/etc/passwd,来实现验证机制;

操作系统中的认证组件通过解析库实现认证机制,即验证登录用户是否为已经存在的用户;

用户的认证库:/etc/shadow,里面存放的是用户的认证机制

通过此前的解析库认定用户是存在的,再经过认证库的认证,来证明登录用户就是其声明的用户;

默认的认证机制:密码认证;

既然默认是密码认证机制,那就有了密码复杂性要求:

    1.尽量避免使用有规律的或者来源于字典中的字符串作为密码;

    2.密码要足够长,一般不得少于6个字符;

    3.密码要足够复杂,其中应该至少包括大写字母,小写字母,数字及其他符号中的三类;

    4.不定期更换,每隔一段时间进行密码更换;

在Linux中,保存到认证库的密码是经过单向加密算法处理过的;

     能够加密密码的算法:

           MD($1):MD5,Message Digest Version 5,消息摘要算法第5版,128位定长输出;

           SHA:Secure Hash Algorithm,安全的哈希算法;

              sha1($2):160位加密输出(稍强于MD5)

              sha224($3)、sha256($4)、sha384($5)、

              sha512($6):512位算法,密码重复的概率较低,所以成为Linux中默认的加密算法;

     salt:通过随机算法计算得到的随机数;

      随机数的生成装置:

          /dev/random:仅仅从熵池中返回随机数;如果熵池中随机数耗尽,进程会被阻塞;

          /dev/urandom:首先试图从熵池中返回随机数,如果熵池中随机数耗尽,则利用伪随机数生成                                        器生成伪随机数;

      

     

 最后系统中,在认证库中的密码的最终形态:算法+salt+加密字符串;

         算法:$1~$6($1代表MD5,$6代表加密算法sha512,上方加密算法依次排序代入)

          salt:$随机字符串(一般为8个)

          加密字符串:$单向加密的结果(此结果是连同salt一块加入的,增加了破解难度)

  

上图中:root代表当前系统管理员用户;$6代表所使用的加密算法;第二个$后连续的字符代表加密结果salt和字符串。

组账户:将具有某些相同或相似属性的用户联系在一起以便可以集中授权的容器;

   组的分类:

       超级用户组

       普通用户组:

            系统用户组

            登录用户组

组账户的验证方法(类似于用户验证方法):

        组账户名称:

        组账户ID(GID):

超级用户组:GID为0

普通用户组:

     系统用户组(GID):

          CentOS 6-:1~499

          CentOS 7+:1~999

      登录用户组(GID):

          CentOS 6-:500+

          CentOS 7+:1000+

组名的解析:

解析库:/etc/group

认证库:/etc/gshadow

组也需要使用密码加密保护;

用户账户和组账户之间的关系:

    在Linux中,每个用户必须至少属于一个组;

    用户账户的GID标识被称为用户的主要组(基本组),Primary Group;

    每个用户必须要有主要组,而且只能有一个(在主要组的基础之上,用户可以与其他的组账户存在逻                                                                           辑关系,此类组称为用户的附加组(附属组,额外组),                                                                           Addtion Group;对于用户来说,此类组可以没有,也                                                                         可以有多个);

用户和组的管理相关命令:

     组账户的管理命令:groupadd、groupdel、groupmod

     用户账户的管理命令:useradd、userdel、usermod

     认证相关的命令:passwd、gpasswd

     其他的相关命令:chage,chsh,finger,su,id

与用户和组相关的命令:

   1.groupadd        创建一个新组

     格式:groupadd [Options...] group

      如下,创建一个新组grp1,默认的GID为1001:

       常用选项:

        -g GID:指定要创建的组的GID;

                如下图,指定GID为23334:

         

        -r:将组创建为系统组,此时应该保证GID在系统组范围内;

         下图中,创建系统组grp0,默认的GID为982,如果使用-g指定GID的话,应保证GID的范围

           在1-999:

         

2.groupdel         删除一个组

   格式:groupdel [Options...] group

  下图中,删除系统组grp0:

   

注意:如果某个组是某个用户的主要组,则该组不能删除;

3.groupmod  在系统中更改一个组的定义

  groupmod - modify a group definition on the system

        格式: groupmod [Options...] group

        常用选项:

           -g GID:修改指定组的GID;

           下图中,修改后的grp1的GID为34567:

            

          -n GROUP_NAME:修改指定组的组帐户名称;

            将组grp1的组账户名称改为group1:

           

 4.useradd        创建一个新用户或更新默认新用户信息

      格式:useradd [选项] username

                useradd -D [选项]

       常用选项:

          -c, --commentCOMMENT:为用户添加注释信息;

          -d, --homeHOME_DIR:为用户指定家目录的路径;此目录不能事先存在;

          -e, --expiredateEXPIRE_DATE:用户密码的过期的绝对时间;如:2018/01/01

          -f, --inactiveINACTIVE:为用户指定密码使用达到最大时间之后的宽限期;

          -g, --gidGROUP:为用户指明GID;如果不写此选项,系统会创建一个与用户名相同的组并且将                                        之设置为诶此用户的主要组;

          -G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:为用户添加附加组;

          -m, --create-home:必须为用户创建家目录;

          -M:不为用户创建家目录;在创建系统用户时常用此选项;

          -r, --system:创建系统用户;

          -s, --shellSHELL:为用户指定默认的shell;

          -u, --uidUID:为用户指定UID;

例:

创建用户czk1,设置备注信息-c为first,指定家目录/tmp3,设置密码过期时间-e为2018/01/01,宽限期为4天,添加用户的附加组-G为grp2,-s选项指定默认shell,-u选项设置指定UID,如下:

            查看创建的用户所在组 tail /etc/group,其中显示grp2为用户czk1的附加组,而且我们没有指定主要组,所以默认创建组czk1,可以用groupdel 命令试删一下主要组czk1(显示无法删除,可以删除附加组);查看创建的用户的详细信息tail /etc/passwd,显示信息为用户的UID、GID、注释信息、指定家目录、默认shell为bin目录下的tcsh;查看密码验证的信息:tail /etc/shadow,命令回车后显示7为密码警告时间为7天,5天为宽限期,17532为从1970年1月1日到设置的2018/01/01的天数;利用su命令来切换新创建的用户czk1:su czk1;

5.userdel       删除用户账户和相关文件

     格式:userdel [选项] username

     常用选项:

          -r, --remove:删除用户的同时删除用户的家目录及用户邮箱文件;

6.usermod(使用方法类似于useradd)     修改一个用户账户

     格式:usermod [选项] username

     常用选项:

        -c, --commentCOMMENT:修改用户的注释信息;

        -d, --homeHOME_DIR:修改用户的家目录;

        -e, --expiredateEXPIRE_DATE:修改用户密码过期的绝对日期;

        -f, --inactiveINACTIVE:修改用户密码过期之后的宽限期;

        -g, --gidGROUP:修改用户的主要组(GID);

        -G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用户的附加组为此列表中的组,如果同时                                                                                        使用了-a选项,则保留原有的附加组,将此列                                                                                        表中的组追加至用户的附加组列表;

        -l, --loginNEW_LOGIN:修改用户的登录名;

        -s, --shellSHELL:修改用户的登录shell;

        -u, --uidUID:修改用户的UID;

        -L, --lock:锁定用户;

        -U, --unlock:解锁被usermod -L锁定的用户;

7.passwd

    passwd - update user's authentication tokens

     格式:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i                                  inactivedays] [-S] [--stdin] [username]

        常用选项:

            -l, --lock:锁定用户;

            

            -u, --unlock:解锁用户

             ;

            --stdin:通过标准输入接受密码,可以用于管道

                             

                          管道方法,输出123456并将密码通过管道送于用户cl,即更改密码:

                            ;

            -d, --delete:删除用户的密码,也可以用于解除用户锁定

                      ;

            -e, --expire:直接设置用户密码过期;

            -n, --minimum DAYS:用户密码的最短使用时长;默认值为0;

            -x, --maximum DAYS:用户密码的最长使用时长;默认值为99999;

            -w, --warning DAYS:用户密码过期之前多少天开始发送警告信息;

             -i, --inactive DAYS:用户密码过期之后的宽限期;

            -S, --status:查看用户密码的状态信息;

   注意:

      在锁定用户登录密码方面:

         usermod -L    ---锁定:

          passwd -l  ---锁定;

   

       usermod -L    ---锁定:

          [qhdlink@localhost ~]$ su - root -c "usermod -L gentoo"

          密码: 

      查询库:[qhdlink@localhost ~]$ su - root -c "tail -n -3 /etc/shadow"

                   密码:

                                                gentoo:!$6$.oHk9UV5$FFMH0zKTjh6VP9I3nRrM72wW7Ff2EBJYhwsqqUHRYvO5JmThsmjtZcYxv6WLhbZyc9fLGmD/ejn7FrCY6MFdi0:17472:0:99999:7:::

            fedora:$6$kOxmeojI$EDw1Qr3pQvewPCDsTJorDlbDUBys3jKwfQDy8ekOP7gw79WlDKHUzrI48Al8ZVmzwFatjzJ8uf9cwWpLA8jxj.:17472:0:99999:7:::

            iscsi:$6$2JuLmS9t$V24oadNSe.AL.I8aVVMREQ7Fo50y2Wvoz95/TB8ImoiqRVXfpSeFL.eqcljzGdL7RKdVkiKYgKnHLVNYvcHBY.:17472::::::

   

   passwd -l  ---锁定:

        [qhdlink@localhost ~]$ su - root -c "passwd -l gentoo"

        密码:

        锁定用户 gentoo 的密码 。

        passwd: 操作成功

    查询库:[qhdlink@localhost ~]$ su - root -c "tail -n -3 /etc/shadow"

                  密码:

            gentoo:!$6$.oHk9UV5$FFMH0zKTjh6VP9I3nRrM72wW7Ff2EBJYhwsqqUHRYvO5JmThsmjtZcYxv6WLhbZyc9fLGmD/ejn7FrCY6MFdi0:17472:0:99999:7:::

            fedora:$6$kOxmeojI$EDw1Qr3pQvewPCDsTJorDlbDUBys3jKwfQDy8ekOP7gw79WlDKHUzrI48Al8ZVmzwFatjzJ8uf9cwWpLA8jxj.:17472:0:99999:7:::

            iscsi:$6$2JuLmS9t$V24oadNSe.AL.I8aVVMREQ7Fo50y2Wvoz95/TB8ImoiqRVXfpSeFL.eqcljzGdL7RKdVkiKYgKnHLVNYvcHBY.:17472::::::

          

          同样出现!,只不过passwd -l的执行优先级高于usermod -L,passwd -l 权限高于usermod -L;

8.chage (选项作用类似于passwd,基本一致)更改用户密码过期信息

    格式:chage [选项] username

    常用选项:

        -d, --lastdayLAST_DAY:修改最后一次密码修改时间;

        -E, --expiredateEXPIRE_DATE:设置自1970年1月1日起,用户帐户将不再可访问的日期或天数。                                                   日期也可以以yyyy - mm - dd(或)的格式表示;

        -I, --inactiveINACTIVE:设置在帐户锁定前密码过期后的不活动天数;不活跃的选项是不活动的天                                                数;用户的帐户在再次使用系统之前,必须与系统管理员联系

        -l, --list:查看账户年龄信息

                         ;

        -m, --mindaysMIN_DAYS:最短多长时间改一次密码,默认是0,即任何时间都可以修改密码;

        -M, --maxdaysMAX_DAYS:设置密码的最大有效期;

        -W, --warndaysWARN_DAYS:设置密码过期之前的警告时间数;

9.chsh  修改用户的登录shell(相当于usermod -s)

   chsh - change your login shell == usermod -s 

   格式:chsh [-s shell] [-l] [-u] [-v] [username]

10.finger

    finger — user information lookup program

    格式:finger [-lmsp] [user ...] [user@host ...]

11.id

     id - print real and effective user and group IDs

     格式:id [OPTION]... [USER]

       常用选项:

          -u:显示用户的有效UID;

          -g:显示用户的有效GID;

          -n:显示名称;

12.su

     su - run a command with substitute user and group ID

     格式:su [options...] [-] [user [args...]]

        常用选项:

           -, -l, --login:以后面的用户身份登录到系统;

           -c "COMMAND":以前面指定的用户身份运行COMMAND;不进行身份登录切换;