首页 > 代码库 > #5 用户和组的管理(AAA认证的由来)

#5 用户和组的管理(AAA认证的由来)

用户和组的管理


  用户账户

  组账户

  权限的分配


  Cisco开发的AAA认证体系:

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

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

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


  多用户、多任务的系统;(在服务器上通常是多用户、多任务的操作系统)            


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


  安全上下文:secure context


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


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

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

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

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


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

  用户分类:

    超级用户(管理员):root

    普通用户:除root用户外的用户

      系统用户:

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

      登录用户:       

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


    用户的标识:

      用户登录名称;

        为操作者准备的简单易记的字符串标识; 16bit-->32bit

      用户的ID(UID):       

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

          超级用户:ID号为0

          系统用户:

            centOS5.6:ID号为1~499

            centOS7:ID号为1~999

          登录用户:

            centOS5.6:ID号为500~60000

            centOS7:ID号为1000~60000

          60000+的标识符为用户自定义表示;

    

    名称解析:

      名字<-->UID


    解析库:/etc/passwd 


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


    认证库

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

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


    采用密码认证的机制:

      设置密码的一般性策略:

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

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

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

        4.不定期更换,每隔一段时间换一个密码;(推荐42天内应该改密码)


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

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

        单向加密算法的特征:

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

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

          3.雪崩效应(蝴蝶效应)

          4.不可逆


        单向加密常用的算法;

          1.md5:Message Digest,消息摘要,128bit定长输出;

          2.sha1:Secure Hash Algorithm,安全的哈希算法,160bit定长输出;

          3.sha224:Secure Hash Algorithm,安全的哈希算法,224bit定长输出;

          4.sha256:Secure Hash Algorithm,安全的哈希算法,256bit定长输出;

          5.sha384:Secure Hash Algorithm,安全的哈希算法,384bit定长输出;

          6.sha512:Secure Hash Algorithm,安全的哈希算法,512bit定长输出;


        salt(盐、杂志):随机数

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

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


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

          在认证库中存放的信息:$6(算法)$salt(盐)$crytped_password(密码)


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

  组类别:

    管理员组:

    普通用户组:

      系统组:

      登录组:


  组的标识方法:

    组名:

      方便操作者使用的;

    组的ID(GID):

      为系统提供组标识;

        管理员组:ID号为0

        系统组:

            centOS5.6:ID号为1~499

            centOS7:ID号为1~999

        登录组:

            centOS5.6:ID号为500~60000

            centOS7:ID号为1000~60000

  

    解析库:/etc/group 


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


    组也需要密码保护:


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


    以用户为互信来对组进行分类:

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


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


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

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

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


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


用户和组的管理:

  主要使用命令完成:

    组管理相关的命令:

      groupadd、groupdel、groupmod

    用户管理相关的命令:

      useradd、userdel、usermod

    认证管理相关的命令:

      passwd、gpasswd、chage

    其他的相关管理命令:

      chsh、finger、su、id


两个解析库:etc/passwd、etc/group

两个认证库:etc/shadow、etc/gshadow


/etc/passwd:

name:password:UID:GID:GECOS:directroy:shell

name:登录名;

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

UID:用户的ID;

GID:此用户主要组的ID;

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

directroy:用户的家目录的绝对路径;

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


etc/group:

group_name:password:GID:user_list

group_name:组名;

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

GID:组的ID;

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


etc/shadow:

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

login name:用户的登录名;

encrypted password:加密了的密码

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

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

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

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

date of last password change:

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

minimum password age:

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

maximum password age:

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

password warning period:

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

password inactivity period:

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

account expiration date:

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

reserved field:

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


/etc/group

group name:encrypted password:administrators:members


组管理命令:

    groupadd:新建组账户,添加组;  

    groupadd [-g gid [-o]] [-r] [-f] groupname;

       -g(gid):在创建组账户的时候,指定组账户的GID;如果不使用该选项指定,

        系统会选择在组解析文件中出现在的不大于60000最大GID加1;

       -r:创建系统组;意思就是创建一个IGD在1~999(1~499)之间的组;


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

    groupmod [选项] GROUP;

       -g(gid):修改组账户的ID;

       -n:new_groupname:修改组名;


    groupdel:删除组账户;

    groupdel [选项] GROUP;

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


用户管理的命令:

    useradd:添加用户账户;

    useradd [选项] 登录名;

       /etc/default/useradd

       /etc/loging.defs

       /etc/skel

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


      选项:

       -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:--uidUID:在创建用户的时候,为用户指定UID,这个UID可以超过60000的限制;

       -s:--shellSHELL:在创建用户时,为用户指定默认shell,使用绝对路径;

       -D:--defaults:显示或修改用户默认属性值;

         -s:--shell /path/to/shell:修改/etc/default/useradd文件中shell的默认值;


    usermod:修改用户账户信息

    usermod [选项] 登录名;

      选项:

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

       -g:--gidGROUP:修改用户的主要组;

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

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

       -d:--home /path/to/home:修改用户的家目录;

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

       -l:--loginNEW_LOGIN:更改用户账户的登录名;

       -s:--shell /path/to/shell:修改用户的登录shell;

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

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

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


    userdel:删除用户账户;

    userdel [选项] 登录名;

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


用户认证相关命令:

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

    passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] 

      [-i inactivedays] [-S] [--stdin] [username];

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

      2.如果指定用户名,更改指定用户的密码,只能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 "xxxx" |passwd --stdin |&>/dev/null


     gpasswd:管理组

     gpasswd [选项] group;

        选项:

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

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


其他命令:


     su:switch user,切换用户身份;

       su username:

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

       su -username:

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

       

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


       使用su命令的时候,从root切换到其他普通用户,无需密码,但普通用户进行切换时,必须给出目标用户的密码;


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


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



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

     id [OPTION]... [USER];

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

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

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

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

        -G:--groups:显示用户所有组的ID;

        -n:--name:一名乘来代替ID进行显示;


        

     chage:用来修改帐号和密码的有效期限;

     chage [选项] 登录名;

        -d:--lastday:1970年1月1日到最后一次修改密码的那天的天数;

        -E:--expiredate:修改密码的有效期,0表示立即过期,-1表示永不过期;

        -m:--mindays:修改密码的最小间隔天数;

        -M:--maxdays:修改密码的过期天数;

        -W:--warndays:修改密码过期之前的友善提醒天数


    chsh:修改用户的默认shell 相对于username -s

      -s shell


#5 用户和组的管理(AAA认证的由来)