用户和组的管理方法:

     在Linux中,有两种账户:用户帐户和组账户。

     因为Linux是一个多用户,多任务共同协作的系统,当有多个任务或多个用户同时运作时,要保证他们能够在系统中正常地运行,就得涉及到权限的分配问题了。在Linux中,是按AAA来分配权限的。所谓的AAA就是:

     Cisco的AAA的认证体系:                                     

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

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

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

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

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

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

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

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

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


1.用户的管理

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

    用户分类:

   超级用户(管理员):root

   普通用户:

     系统用户:为了保证安全,

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


    用户的标识:

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

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

   超级用户的ID:0

   系统用户:

   CentOS5、 6:1-499

   CentOS 7:1-999

   登录用户:

    CentOS 6:500-60000

   CentOS 7:1000-60000

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

    在Linux中,系统会自己完成名称解析:即从 "名字<-->ID"的相互转换。

    在用户登录操作时时,需要系统中解析库和认证库。

      解析库:  /etc/passwd

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

    /etc/passwd:

      name:password:UID:GID:GECOS:shell

name:登录名

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

UID:

GID:

GECOS:comment,注释类的信息,现在一般都会用来  (可空)

directory: 用户的家目录的绝对路径,

shell: 用户的登录的绝对

      认证库:

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

    /etc/shadow

         login name: 登录名

         encrypted password:加了密的密码                root:$6$0Ef5CZmupkY4oM7I$9gKtVNLW0D0IbBTduOGrm0mljjb6tWrCGNHEMsKXXA1a5krPHJxpPeeNyDU4QCStN         cemiEIxJ6qvHowTvx5HA0::0:99999:7:::

bin:*:16659:0:99999:7:::

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

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

如果该字段为空,则表明用户可以


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

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

       单项加密算法的特征:

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

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

       3. 雪崩效应

       4. 不可逆

       单项加密常用算法:

       1. md5:message digest。  消息摘要

       2. sha1: Secsure Hash Algorithm。  安全的哈希算法

       3. sha224:

        4. sha256:

                        5. sha384:

       6. sha512: 

     如果2个密码完全相同的话,则加密后的结果也完全相同,所以在加密后的结果中,还需从熵池中抽取一个随机数。即salt:随机数。有两种抽取情况,一般情况下,我们建议使用第一种情况来抽取,因为这样更安全,

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

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

所以最终得到的验证字符串为: 算法+salt+密码

在认证库中存放的信息: $6$salt$crytpyed_password

   

    用户管理的命令:

useradd - 帐 号 建 立 或 更 新 新 使 用 者 的 资 讯

useradd [选项] 登录名

/etc/default/useradd

/etc/login.defs

/etc/skel

     useradd [-c comment] [-d home_dir]

               [-e expire_date] [-f inactive_time]

               [-g initial_group] [-G group[,...]]

               [-m [-k skeleton_dir] | -M] [-s shell]

               [-u uid [ -o]] [-n] [-r] login

       useradd -D [-g default_group] [-b default_home]

               [-f default_inactive] [-e default_expire_date]

               [-s default_shell]

选项:

-c, --comment COMMENT

               任何字符串。通常是关于登录的简短描述,当前用于用户全名。

       

       -d, --home   HOME_DIR      /PATH/TO/HOME_DIR

               将创建新用户,并使用 HOME_DIR 作为用户登陆目录的值。默认值是将 LOGIN 名附加                到 BASE_DIR

               后面,并使用这作为登陆目录。目录不一定必须已经存在 HOME_DIR,但是会在需要时               创建。

            

            -g, --gid  GROUPNAME

               在创建时,为用户指定主组

               用户初始登陆组的组名或号码。组名必须已经存在。组号码必须指代已经存在的组。

               如果没有指定, useradd 的行为将依赖于 /etc/login.defs 文件中的               USERGROUPS_ENAB

               参数。如果此参数设置为了 yes (或者在命令行上指定了

               -U/--user-group),将会为用户创建一个组,组名和登录名相同。如果选项设置为了 no

               (或者在命令行上指定了 -N/--no-user-group),useradd 会把新用户的主组设置为

               /etc/default/useradd 中 GROUP 变量指定的值,再或者默认是 100。

            

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

               用户还属于的附加组列表。每个组都用逗号隔开,没有中间的空格。这里的组受到了 - g

               选项给定的组同样的限制。默认上,用户只属于初始组。

            

            -m, --create-home

               如果不存在,则创建用户主目录。骨架目录中的文件和目录(可以使用 -k

               选项指定),将会复制到主目录。

               默认上,如果没有指定此选项并且 CREATE_HOME 没有启用,不会创建主目录。

            -M (不能与-m同时使用)

               绝不创建用户主目录,即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为 yes。

           

            -r, --system

               创建一个系统账户。


            -u, --uid  UID(可超过6万的限制)

               用户 ID 的数字值。此值必须为唯一的,除非使用了 -o 选项。此值必须非负,默认使用大于等于

               UID_MIN,且大于任何其他用户 ID 最小值。


            -s, --shell  SHELL  (使用绝对路径)

               用户的登录 shell 名。默认为留空,让系统根据 /etc/default/useradd 中的 SHELL

               变量选择默认的登录 shell,默认为空字符串。


            -D:--defaults

              显示或修改用户默认属性值

    usermod:

   选项:

   -a, --append

              将用户添加到附加组。只能和 -G 选项一起使用。    

   -c:

   -g:

   -G:

   -d, --homeHOME_DIR

               用户的新登录目录。

               如果给了 -m 选项,当前主目录的内容将会移动到新主目录中,如果不存在,则创建。

            -m:    

            

            -l, --loginNEW_LOGIN

                用户的名称将会从 LOGIN 修改为

                NEW_LOGIN。不会更改别的任何东西。特别是,用户的主目录名和邮件池也需要手动修改以和新登录名对应  

            -L, --lock

          锁定用户的密码。这会在用户加密的密码之前放置一个“!”,可以快速禁用密码。您可以和 -p 或 -U

          配合使用此选项。

          注意:如果希望锁定账户(不仅仅是通过密码访问),您也需要设置 EXPIRE_DATE 为 1。


userdel:删除用户

userdel [-r] login

-r   使 用 者 目 录 下 的 档 案 一 并 移 除 。 在 其 他 位 置 上 的

              档案 也 将 一 一 找 出 并 删 除 。

  用户认证相关命令:

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

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

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

2.如果指定用户名,则更改指定用户名的密码,但只能root使用。  

        -S  --stdin(重要)

       借助于管道将输入数据流当作标准输入信息送给passwd命令,常与echo使用。

       echo


2.组的管理(对比用户的管理,更容易掌握)

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

    组类别:

管理员组:

普通用户组:

   系统组:

   登录组:

   组的标识方法:

   组名:方便操作者使用

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

   管理员组:

   CentOS5、 6:1-499

   CentOS 7:1-999

   登录组:

    CentOS 6:500-60000 

   CentOS 7:1000-60000

    在Linux中,系统会自己完成名称解析:即从 "名字<-->ID"的相互转换。

    在用户登录操作时时,需要系统中解析库和认证库。

   解析库:  /etc/group

                      /etc/group:

                  group_name:password:GID:user_list

                  group_name:

                  password: 密码占位符,默认空

                  GID:

                  user_list

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


   组也需要密码保护:

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


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

   用户的主要组(基本组):primary


   用户的附加组(附属组、额外组):Addition



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

   私有组:

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


             组管理相关命令:

   groupadd :

   格式:groupadd [-g gid [-o]] [-r] [-f] groupname

         -g gid:在创建组用户的时候,指定组账户

         -r  :

   groupdel :

   注意:如果某个组是主要组,则删除不了。 

   groupmod : 

                                   格式:groupmod [-g gid [-o]] [-n group_name] group

                                 -g:

                                 -r:


   用户管理相关的命令: useradd     userdel     userhelper  usermod     

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

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

组认证相关命令:

gpsswd:

gpasswd [option] groupname

其他命令:

su:switch user

su USERNAME:部分切换,半切换,在切换用户时,不会重新读取目标用户

su - USERNAME(= su-l USERNAME):

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

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

   真实的id:

   有效的id:

   id [OPTION]... [USER]