用户和组的管理

  系统中,创建用户和群组的目的,就是对系统资源进行权限的统一分配管理。好比说,在一个公司内的资源,不同级别的在职员工对资源的利用权限需要进行统一分配; 


如何避免权限分配后的滥用呢?

 用户进行权限使用的时候,都必须遵守Cisco公司开发的AAA认证体系,即:

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

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

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


进行资源认证的必要性最主要来源于计算机系统资源的有限性;在系统中,能够实现资源使用和完成任务的主体是:程序进程;linux作为一个多用户、多任务的操作系统,进程是以其发起者的身份运行的:可以理解为,进程的所有者就是发起者;在进程上会将发起者标记在进程上;


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

    首先查看进程的所有者是不是资源的所有者:

    如果是,就按照属主的权限使用资源;

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

        如果是 按照属组的权限使用资源;

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

因此这里引出了用户的概念:

一、用户

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

 2.分类:

     超级用户(管理员):root

     普通用户:

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

       登录用户:能够正常使用整个系统资源的用户;

 3.用户的标识

    1)用户登录名称:为操作者准备的简单易记的字符串标识

    2)用户ID:为计算机系统准备的数字标识; 

        超级用户:0;

        系统用户:CentOS 5、6:1-499;CentOS 7:1-999;

        登录用户:CentOS 5、6:500-60000;CentOS 7:1000-60000   6W+的标识符是用户自定义的标识;


    3)名称解析:名字<--->UID ; 解析库:/etc/passwd

     系统利用解析库完成认证机制:即验证登录用户是否是输入的用户;

     认证库:

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

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


   采用密码认证机制

       设置密码的一般性策略;

         1.尽量使用随机字符串作为密码;

         2.密码长度不要少于8字符;

         3.至少包括:大小写字母、数字、标点符号四类中的三类;

         4.不定期更换密码;

     在linux中,保存到认证库中的密码信息是经过加密的方式保存的:

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

          单向加密算法的特征:

            1.只要数据相同,加密结果就必然相同

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

            3.雪崩(蝴蝶)效应:原始信息修改一丁点,加密后的结果大不同

            4.不可逆

           常用的单向加密算法:

             md5(Message Digest 5): 128bit定长输出;

             shal(Secure Hash Algorithm) 160bit定长输出;sha224\256\384\512

           salt:随机数

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

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

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


二、群组

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

    组的类别:

      管理员组

      普通用户组:

        系统组:

        登陆组:

     组的标识方法:

       组名:方便操作者使用的组的标识

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

         管理员组:0

         系统组:CentOS 5、6:1-499;CentOS 7 :1-999;

         登陆组:CentOS 5、6:500-60000 CentOS 7:1000-60000;

      解析库:/etc/group 认证库:/etc/gpasswd

      组也需要密码保护;

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

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

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

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


      根据组所容纳的用户来分:私有组和公共租;

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

        公共租:组织可以包含其他多个不同用户;


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



用户和组的管理(主要使用命令完成):

  组管理相关:

    groupadd groupdel groupmems groupmod groups 

  用户管理:

    useradd userdel usermod userhelper users

  认证管理相关:

    passwd gpasswd chage 


  其他相关管理:

    chsh finger su id 


/etc/passwd文件:

 格式:name:password:UID:GID:GECOS:directory:shell

  name:登录名

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

  UID: 用户的id

  GID:用户的主要组的id

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

  directory:用户的家目录路径(一般是绝对路径);

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


/etc/group文件:

  格式: group_name:password:GID:user_list

  group_name:组名;

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

  GID:组的ID

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


/etc/shadow文件:

  格式:login name:encrypted password … …


  login name:用户的登录名;

  encrypted password:加密了的密码

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

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

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

     如果该位置为空:则表明用户可以无数如密码即可登录,不推荐

   date of last password change:

     相对时间概念,1970.1.1到最后一次修改密码的时间

   mimimum password age:

     在多长时间内无法修改密码,默认是0 ,意即 随时可以改密码,

   maximum password age:

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

   password warning period:

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

   password inactivity period

      密码过期之后的宽限期,默认为-1,意思是永久宽限

   Account expiration date:

      一个用户账户密码过期的日期,是一个绝对期限;

   reserved field

     保留字段,以备以后使用;


 /etc/gpasswd



 组的管理命令:

   1.groupadd:新建组账户。

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

      -r :创建系统组,意思就是创建一个GID在1-999/1-499之间的组;

   2.groupmod:修改组的相关属性信息;

     -g  gid:修改组ID

     -n  修改组名

   3.groupdel:删除组账户

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


 用户管理命令:

   1.useradd:添加用户账户;

      /etc/default/useradd

      /etc/login.defs

      /etc/ske1;

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


    【选项】

      -c,--comment ‘COMMENT’在创建用户时为用户添加注释信息,一般为全民

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

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

      -G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:每个组都用逗号隔开,没有中间的空格。创建用户时,为用户添加附加组;

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

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

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

      -u,--uid:创建用户时,为用户指定UID,这个UID可以超过60000;

      -s,--shell /PATH/TO/SHELL :创建用户时,为用户指定默认shell;

      -D,--default 显示或修改用户默认属性值;

        -s,--shell  /PATH/TO/SHELL  :修改 /etc/default/useradd文件中SHELL的默认值;

   2.usermod: 修改用户账户信息:

      选项:

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

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

       -G,--groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用户的附加组为列表中的组(覆盖)

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

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

         如果给了-m选项,将旧的家目录的数据移动至新的家目录中;

       -l:更改用户的登录名

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

       -u, --uidUID  修改uid

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

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

   3.userdel:删除用户账户

       -r, --remove

           用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。


用户认证相关:

   1.passwd:设置和查看用户的口令信息-密码;

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


     如果省略用户名,意味着修改当前登录用户的密码;如果指定用户名,更改指定用户的密码,且只能root使用;


   【选项】:

      -l,--lock

      -u,--unlock

        相比较usermod里的-L -U 其优先级更高

        如果使用usermod -L锁定的用户密码,可以用passwd -u解锁

        而使用passwd -l锁定的用户密码,不可以用usermod -U解锁;


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

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

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

            echo "PASSWORD" |passwd --stdin USERNAME

组认证相关:

    gpasswd:

     gpasswd 【选项】 groupname

      -a,--adduser  向名为group的组中添加用户


      -d,--deleteuser 从名为 group 的组中移除用户 user。   


其他命令:

  su : 切换用户身份;

     su USERNAME 

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

     su - USERNAME == su -l USERNAME        

         登录式切换,完全切换;即切换用户时,会重新读取目标用户的配置文件,并且初始化工作环境;

     

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


     用su命令从root切换至普通用户时,无需密码;反过来,就必须给出目标用户的正确密码否则切换失败;


     进行切换后不要连续切换,而是要用exit命令返回之前的用户;


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


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

     所谓真实的:就是在/etc/passwd定义的用户的UID&GID

     所谓有效的:就是指当前生效的用户的UID&GID

     【选项】

     -u,--user,只显示用户的有效的uid

     -g, 只显示用户的gid

     -G 显示用户的所有组的gid

     -n 显示用户和组的名字而不是id号