Linux系统可以支持多个用户使用不同的终端设备登录系统,用户又按不同的属性划分成不同的组,为了系统的安全性需要对不同用户设置不同的权限,所以涉及到对用户和组的管理。


用户和组的管理


   用户账户

   组账户

   权限的分配


 Cisco开发的AAA认证体系

    Authentication: 认证,核实身份是否正确

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

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

  

  多用户多任务的操作系统:

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


   安全上下文:secure context


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

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

     首先查看进程的所有者是不是资源的所有者,如果是,就按属主的权限使用资源;

     如果不是,则判断进程的所有者是否属于资源所属组,

     如果是,按照属组的权限使用,

     如果不是,则直接使用资源的其他人访问权限来使用资源


 用户账户:就是计算机操作者在操作系统中的身份映射; 在满足了认证条件之后的身份映射;

 用户分类:

  超级用户(管理员):root

   普通用户:

    系统用户:

     为了保证安全,必须让那些运行在后台的进程或者服务类进程以非管理员的身份运行;这类用户一般不需要登录到系统

    登录用户:

       能够正常使用整个系统资源的用户


 用户的标识:

   用户的登录名称:

     为操作者准备的简单易记的字符串标识;

   用户的ID:

      为计算机系统准备的数字标识;

        超级用户的ID号: 0

        系统用户:

          Centos5、6: 1~499

          Centos7: 1~999

        登录用户:

           Centos5、6: 500~60000

          Centos7: 1000~60000

        60000以上的标识符为用户自定义的标识


     名称解析:名字 <--> ID

     解析库: /etc/passwd


     系统利用解析库完成认证: 验证用户是否是你声称的那个人


     认证库

       用户的认证信息库: /etc/shadow

       组的认证信息库: /etc/group


     采用密码的认证机制:

       设置密码的一般性策略:

         1、尽量使用随机字串作为密码

         2、密码的长度一般不少于8个字符

         3、密码中尽量包括大写字母、小写字母、数字和标点符号中四类字符中的至少三类

         4、不定期更换,每隔一段时间就换一个密码


     在Linux中,保存到认证库中的密码信息是经过加密保存的;

        hash单向加密算法: 抽取原始数据的特征信息,数据指纹;

          单向加密算法特征:

            1、只要数据相同,其加密结果必然相同

            2、无论数据多大,其加密结果定长输出

            3、雪崩效应

            4、不可逆

         单向加密常用算法:

           1、md5: message digest, 消息摘要,128bit的定长输出;

           2、sha1: Secure Hash Algorthm,安全的哈希算法,160bit的定长输出

           3、sha224:

           4、sha256:

           5、sha384:

           6、sha512:


      salt: 随机数

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

        dev/urrandom : 先试图从熵池中返回随机数,如果熵池被耗尽,则利用伪随机数生成器生产的伪随机数

      最终认证字符串: 算法+salt+密码 

        下认证库中存放的信息: $6$salt$crytped_passeord


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

   组类别:

     管理员组

     普通用户组:

       系统组

       登录组


  组的标识方法:

    组名: 方便操作者使用

    组的ID(GID):为系统提供组标识

       管理员组标识:0

       系统组:

          Centos5、6: 1~499

          Centos7: 1~999

        登录组:

          Centos5、6: 500~60000

          Centos7: 1000~60000


    解析库: /etc/group


    组也需要认证,也有认证库: /etc/gpasswd

    组也需要密码保护:

      如果组没有设置密码保护的话,则不能随时加入;


      以用户为核心来对祖进行分类:

        用户的主要组(基本组):primary group,对用户来讲,这样的组必须要有且只能有一个

        用户的附属组(额外组,附加组):Addition group, 这样的组 对用户来说可以没有,也可以有多个


     根据组所容纳的用户来分:

       私有组: 组名与用户登录名相同,并且组中只有 此用户

       公共组: 组中可以包含多个不同用户


      注意: 默认情况下,用户的主要组都是其私有组


用户和组的管理:

  主要使用命令来完成:

    组管理相关的命令:

      groupadd

      groupdel

      groupmod

    用户相关的命令: useradd  userdel  usermod

    认证管理相关命令:  passwd  gpasswd  chage

    其他的相关管理命令: chsh   finger  su  id  


etc/passwd:

  name:password:UID:GID:GECOS:direstory:shell

  name:登录名

  password:密码字段,现在使用了shadow机制的系统中,通常使用"x"作为占位符

  UID: 用户的ID

  GID: 此用户主要组的ID

  GECOS: comment,注释类信息,现在一般用来存放用户的说明信息或全名

  direstory:用户家目录的绝对路径

  shell: 用户的默认登录shell的绝对路径


/etc/group:

  group_name:password:GID:user_lise

  group_name:组名

  password: 组密码占位符,默认为空

  GID:组的ID

  user_list: 以该组为附加组的用户的列表



/etc/shadow:

   login name:encrypted password:date of last password change:minimum password age:maxinum password age:password warning period:password inactivitty period:account expiration date: reserved field

  login name: 用户的登录名

  encrypted password:加密了的密码

     格式:$算法$salt$真正意义的加密密码

         如果该位置为!,则表明该用户的密码被禁用

         如果该位置为*,则表明该用户为系统用户,不能登录

         如果该字段为空,则表明该用户无需密码即可登录,不推荐使用

   date of last password change:

       相对时间概念,相对于1970年1月1日到最后一次修改密码的那天的天数

   minimum password age:

       在多长时间内无法修改密码,默认值为0,即:随时可以修改密码,如果是非0事务其他数字,意思是在这么唱的天数内无法修改密码

    maxinum password age:

        在多长时间之后密码过期,默认为99999 ,意思是永久有效

    password warning period:

        密码过期的友善提醒,提醒天数默认值为7天;

    password inactivitty period

        密码过期后的宽限期,默认情况下不启用,意思是宽限期为永久

    account expiration date

         一个用户账户密码过期的日期,这是一个绝对的过期期限,XXXX/XX/XX

    reserved field:

         保留字段,以备以后使用

 /etc/gpasswd


   group name:encrypted password:administrators:members



 组管理命令:

    groupadd:新建组账户,添加组    # groupadd  选项  GROUP 

      -g gid: 在创建组账户的时候指定组账户的GID; 如果不使用该选项指定,系统会选择在组解析文件中出现在的不大于60000最大GID加一;

      -r: 创建系统组,就是创建一个GID在1~999(1~499)之间的组

    groupmod: 修改组的相关属性信息   # groupadd  选项  GROUP

       -g gid: 修改组账户的ID

       -n NEW_GROUPNAME: 修改组名

    groupdel:删除组账户   groupdel  选项  GROUPNAME

      注意:如果某个组是某个用户的主要组或私有组,则该组无法删除

    groupmems: 管理组成员的命令


  用户管理的命令:

     useradd:  useradd 选项  登录名   :添加用户账户 

       /etc/default/useradd

       /etc/login.defs

       /etc/skel

       以上三个文件和目录能够帮助管理员在未指定任何选项的时候也能创建用户,并为用户赋予默认属性

      选项:

        -c, --comment 'COMMENT':在创建用户时为用户添加注释信息,一般为全名

        -d, --home/PATH/TO/ HOME_DIR: 在创建用户的时候为用户指定家目录的绝对路径,被指定的目录应该是实现不存在的目录

        -g, --gid GEOUP:在创建用户的时,为用户指定主组

        -G, --groups GROUP1[,GROUP2,...[,GROUPN]]

          在创建用户的时候,为用户添加附加组

        -m, --creat-home :在创建用户时,强制为用户创建家目录

        -M,  在创建用户时,不会创建用户家目录,即使在/etc/login.defs中CREAT_HOME的值为yes也不创建

        -r, --system  创建一个系统用户

        -u, --uid UID: 在创建用户的时候,为用户指定UID,这个UID可以超过60000的限制

        -s, --shell /PATH/TO/SHELL: 在创建用户的时候为用户指定默认shell,使用绝对路径


        -D, --defaults: 显示或修改用户默认值

          -s, --shell:修改/etc/default/useradd中SHELL的默认值

        

     usermod:修改用户账户信息

       -c, --comment 'COMMENT':修改用户的注释信息

       -g, --gid GROUPNAME: 修改用户的主要组

       -G, --groups GROUP1[,GROUP2,....[,GROUPN]]:修改用户附加组为列表中的组

       -a, --append: 与-G选项同时使用,给用户添加新的附加组

       -d, --home /PATH/TO/HOME——DIR:修改用户家目录

         -m, --move-home:与-d选项同时使用,将旧的家目录中的数据移动至新家之中

       -l, --login NEW_LOGIN:更改用户账户的登录名

       -s , --shell /PATH/TO/SHELL: 修改用户账户登录SHELL

       -u, --uid UID:更改用户的UID

       -L,  锁定用户密码


       -U, 解锁用户密码


    userdel:删除用户账户

      userdel 选项登录名

     选项

         -r:删除用户的同时,删除用户家目录


  用户认证相关命令

    passwd:设置和查看用户的密码信息


      1、如果省略用户名,意味更改当前登录用户的密码

      2、如果指定用户名,更改指定用户名密码,仅限root用户使用

    选项

     -L, --lock  :锁定用户密码

     -U, --unlock:解锁用户密码

    相比较usermod -L|-U而言,其优先级更高,如果 使用 usermod 锁定的密码可以使用passwd解锁,反之不行

     -d,  --delete:删除用户密码,将/etc/shadow文件中的第二字段删空

     -s, --status;查看密码状态

     --stdin:借助于管道将输入数据流当做标准输入信息送给passwd命令

        echo "PASSWD" | passwd --stdin USERNAME


  组认证相关命令

    gpasswd:

     gpasswd 选项 groupname

      -a: 向名为group的组中添加用户 user

      -d: 从名为 group的组中移除用户user


   其他命令

    su: switch user, 切换用户身份

    su  USERNAME:

       部分切换,半切换;在切换用户的时候,不会重新读取目标用户的配置文件,因此用户并没有登录行为,所以工作环境并没有初始化

     su - USERNAME:

        登录式切换,完全切换,在切换用户的时候,重新读取目标用户的配置文件并且初始化工作化环境;相当于su -l USERNAME

     -c COMMAND: 并不会切换用户身份,而是以目标用户的身份执行某命令

   使用su命令 的时候


  newgrp GROUPNAME:临时更改当前登录用户的主要组,使用exit返回之前的状态

  id :显示真实的有效的用户和组的ID

    真实的ID:在/etc/passwd定义的用户的UID和GID

    有效的ID: 当前生效的用户的UID和GID

    选项

      -g: 只显示用户的有效id

      -u: 只显示用户有效gid

      -G: 输出所有的组ID号

      -n,--name: 显示用户,所属群组或附加群组的名称

   chage  :更改用户密码过期信息

     -d: 上次更改密码的日期

     -E: 账号到期的日期。过了这天此账号将不再用

     -m: 密码可更改的最小天数。为零时代表任何时候都可以更改密码

     -M: 密码保持有效的最大天数

     -w: 用户密码到期前,提前受到警告信息的天数

   chsh:修改用户的默认shell相当于usermod -s


   finger:finger [选项]  [使用者] [用户@主机] 

     -s:显示用户的注册名、实际名称、终端名称、写状态、停滞时间、登录时间等信息

     -l:除了用-s选项的信息外,还显示用户的主目录、登录shell、邮件状态等信息,以及用户主目录下的.plan .project和.fowward文件的内容

     -p: 除了不显示.plan文件和.project文件以外,与-l选项相同



   chfn: chfn指令可用来更改执行finger指令时所显示的信息。若不指定任何参数,则chfn指令会进入问答式界面

     功能说明:改变finger指令显示的信息

     语法:chfn[-f<真实姓名>][-h<家中电话>][-o<办公地址>][-p<办公电话>][-uv][账号名称]

     -f<真实姓名>或--full-name<真实姓名>  设置真实姓名。 

  

  -h<家中电话>或--home-phone<家中电话>  设置家中的电话号码。 

  

  -o<办公地址>或--office<办公地址>  设置办公室的地址。 

  

  -p<办公电话>或--office-phone<办公电话>  设置办公室的电话号码。


   pwck: 检查用户密码文件的完整性(/etc/passwd以及/etc/shadow)

    用法:pwck [-q][-s] [passwd [shadow]]

          pwck [-q][-r] [passwd [shadow]]

      参数:

        -q: 只显示错误信息,警告不显示

        -s: 按id排序

        -r: 只读方式检查

   qrpck:

    检查用户组及密码文件的完整性(/etc/group以及/etc/gshadow文件)

    用法:grpck [-r] [group[shadow]]

          grpck [-s] [group [shadow]]

     参数:与pwck一样