用户和组账户的管理的基础和基本操作  



计算机就是让我们使用资源的,但是我们的计算机不能让每个人的权限一样,所以我们需要设置多个不同权限的用户,有不同的身份认证,从而使用不同的操作。从而就有了多任务操作系统。
    计算机能够实现资源使用和完成任务的主体是:应用程序进程
        进程是以发起者的身份运行的:可以理解为,进程的所有者就是其发起者;每个进程上都会标记上其所有者的身份信息;

        当进程试图访问资源的时候,安全上下文回避对进程的所有者和资源的所有者之间的关系:
            首先,查看进程的所有者是否和资源的所有者为同一用户,如果是,就按照所有者拥有的权限来使用资源;如果不是,则进行下一步的判断;

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

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

    用户账户:实现操作者和计算机交互式操作的基础,是操作者的身份在满足了验证条件之后的计算机系统中的映射;我们输入我们想要的操作,计算机会帮我们进行实现操作。

    用户账户分类:
        超级用户(管理员):root
        普通用户:
            系统用户(非登录用户):
                为了保证安全,往往会让某些进程或服务必须以非管理员的用户身份运行;这类非管理员用户,称为系统用户;此类用户一般不允许登录到系统的;是很危险的用户。
            登录用户:
                能够通过登录行为验证用户身份进而获得资源访问权限并可以对资源进行操作的用户,可以称为登录用户;

    用户账户的标识方式:
        用户登录名称:
            为操作者提供简单易记的字符串标识;一般我们的用户名
        用户数字ID(UID):
            为计算机操作系统提供的标准的数字标识符号,0~2^32-1,真正的计算机识别的“用户名”

    超级用户:
        用户名:root
        UID:0

    普通用户:
        系统用户:
            centos 6以前:1~499
            centos 7以后:1~999
        登录用户
            centos 6以前:500+
            centos 7以后:1000+
            注意:60000+的UID通常需要用户自定义标识,后面会说;

    名称解析:
        用户名 <--> UID

        用户名解析库: /etc/passwd(用tail命令可以看)
            操作系统中的认证组件通过解析库实现认证机制,即验证登录用户是否为已经存在的用户;

        用户认证库: /etc/shadow(用tail命令可以看)
            通过此前的解析库认证用户是存在的,在经过认证库的认证,来证明登录用户就是其声明的用户;

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

        密码复杂性要求:
            1.尽量避免使用有规律的或者来源于字典中的字符串作为密码;
            2.密码要足够长,一般不得少于6个字符;
            3.密码要足够复杂,其中应该至少包括大写字母,小写字母,数字及其他符号中的三类;
            4.不定期更换,每隔一段时间进行密码更换;

        在linux中,保存到认证库的密码是经过单向加密算法处理过的;
            能够加密密码的算法:
                MD:
                    MD5,Message Digest Version 5,消息摘要算法第5版;128位定长输出;
                SHA:Secure Hash Algorithm,安全的哈希算法;
                    sha1:160位加密输出
                    sha224:
                    sha256:
                    sha384:
                    sha512:默认的加密算法;

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

                    随机数的生成装置:
                        /dev/random:
                            仅仅是从熵池中返回随机数;如果熵池中随机数耗尽,进程会被阻塞;
                        /dev/urandom:
                            首先是从熵池中返回随机数;如果熵池中随机数耗尽,则利用伪随机数生成器生成伪随机数;

                    在认证库中的密码的最终形态:算法+salt+加密字符串;
                        算法:$1~$6
                        salt:$随机字符串
                        加密字符串:$单向加密的结果

        组账户:将具有某些相同或相似属性的用户联系在一起以便可以集中授权的容器;就和小组是一样的
        组的分类:
            超级用户组
            普通用户组
                系统用户组
                登录用户组


        组账户的表示方法:
            组账户名称:
            组账户ID(GID):
                超级用户组:0
                系统用户组:
                    centos 6-:1~499
                    centos 7+:1~999
                登录用户组:
                    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 [选项] group
        常用选项:
            -g GID:指定要创建的组的GID;
            -r:将组创建为系统组,此时应该保证GID在系统指定范围内;

    2.groupdel - 删除一个组
        格式:groupdel [选项] group

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

    3.groupmod
        groupmod - modify a group definition on the system
        格式:
            groupmod [选项] GROUP

        常用选项:
            -g GID:修改指定组的GID
            -n GROUP_NAME:修改指定组的组账户名称;

    4.useradd
        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, --no-create-home: 不为用户创建家目录;再创建系统用户时常用此选项;
                -s, --shellSHELL:为用户指定默认的shell
                -r, --system:为系统创建一个新的系统账户
                -u, --uidUID:为用户指定UID;

    5.userdel
        userdel - 删除用户账户和相关文件
        格式:userdel [选项] username
        常用选项:
            -r, --remove:用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。


    6.usermod
        usermod - 修改一个用户账户
        格式:usermod [选项] username
        常用选项:
             -c, --commentCOMMENT:修改用户的注释信息;
             -d, --homeHOME_DIR:修改用户的家目录;如果再加上 -m 参数(只与-d配合)。则会将现有home目录的地址重命名为新的home目录地址,如原来没有指定home目录地址,则为账号新建一个指定的home目录地址。
             -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 inac‐
       tivedays] [-S] [--stdin] [username]

       常用选项:
               -l, --lock:锁定用户;
               -u, --unlock:解锁用户;
               --stdin:通过标准输入接受密码,可以用于管道;
               -d, --delete:删除用户的密码,也可以用于解除用户锁定;
               -e, --expire:直接设置用户密码过期;
               -n, --minimum DAYS:用户密码的最短使用时长;默认值为0
               -x, --maximum DAYS:用户密码的最长时间时长;默认值为99999
               -w, --warning DAYS:用户密码过期之前多少天开始发送警告信息;
               -i, --inactive DAYS:用户密码过期之后的宽限期;
    8.change
        chage - 更改用户密码过期信息
        格式:chage [选项] username
            常用选项:
                -d, --lastdayLAST_DAY
                -E, --expiredateEXPIRE_DATE
                -I, --inactiveINACTIVE
                -l, --list
                -m, --mindaysMIN_DAYS
                -M, --maxdaysMAX_DAYS
                -R, --rootCHROOT_DIR
                -W, --warndaysWARN_DAYS

    9.chsh
        chsh - 改变登录 shell
        chsh [ -s shell ] [ -l ] [ -u ] [ -v ] [ username ]

    10.finger
        finger — 用户信息查找程序
        finger [-lmsp] [user ...] [user@host ...]
    11.id
        id - 显示真实和有效的 UID 和 GID
        id [OPTION]... [USERNAME]
        常用选项:
        -u, --user: 只 显示 用户 ID
        -n:显示名称
        -g:显示GID

    12.su
        su - 运行替换用户和组标识的shell
        su [OPTION]... [-] [USER [ARG]...]

        常用选项:
            -, -l, --login:以后面的用户身份登录到系统;
            -c, --commmand=COMMAND:以前面指定的用户运行COMMAND,


习题

1、创建用户qhdlink,要求如下:
    1) 使用centos和varnish作为附属组;

    2) 将其家目录设置于/qhdlink;

    3) 使用qhdlink用户登录到系统,在其家目录中创建名为projects的目录,并在该目录中创建demand、design、plan、project、report_bugs等文件。

    4) 后来出于统一管理需要,再将其家目录迁移至/home/qhdlink目录中(使用root用户才能完成此操作);

[root@localhost ~]# groupadd centos
[root@localhost ~]# groupadd varnish
[root@localhost ~]# useradd -d /qhdlink qhdlink
[root@localhost ~]# useradd -G centos,varnish qhdlink
[root@localhost ~]# su - qhdlink
[qhdlink@localhost ~]$ mkdir -pv projects
mkdir: 已创建目录 "projects"
[qhdlink@localhost ~]$ cd projects
[qhdlink@localhost projects]$ touch demand design plan project "report_bugs"
[qhdlink@localhost projects]$ ls -l
总用量 0
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:01 demand
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:01 design
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:01 plan
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:01 project
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:01 report_bugs
[root@localhost ~]# passwd qhdlink
更改用户 qhdlink 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# usermod -md /home/qhdlink qhdlink
[root@localhost ~]#  ll /home/qhdlink/projects
总用量 0
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:48 demand
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:48 design
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:48 plan
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:48 project
-rw-rw-r--. 1 qhdlink qhdlink 0 11月  1 16:48 report_bugs





2、以下所有命令均为使用qhdlink用户登录后,临时以root用户的身份完成,命令执行成功之后立即返回qhdlink用户环境;

[qhdlink@localhost ~]$ su 
密码:
[root@localhost qhdlink]#

  1)创建用户gentoo,UID为5000,基本组为centos,附加组为distro和peguin;

[root@localhost qhdlink]# groupadd distro
[root@localhost qhdlink]# groupadd peguin
[root@localhost qhdlink]# useradd gentoo -u 5000 -g centos -G distro,peguin
[root@localhost qhdlink]# id gentoo
uid=5000(gentoo) gid=1001(centos) 组=1001(centos),1004(distro),1005(peguin)
[root@localhost qhdlink]# passwd gentoo
更改用户 gentoo 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新

  2)创建用户fedora,其全名为"Fedora Core",附加组为distro和peguin,默认shell为/bin/tcsh;

[root@localhost qhdlink]# useradd -c "Fedora Core" -G distro,peguin -s /bin/tcsh fedora
[root@localhost qhdlink]# id fedora
uid=5001(fedora) gid=5001(fedora) 组=5001(fedora),1004(distro),1005(peguin)
[root@localhost qhdlink]# tail -n 1 /etc/passwd
fedora:x:5001:5001:Fedora Core:/home/fedora:/bin/tcsh

  3)将用户gentoo的附加组修改为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution";

[root@localhost qhdlink]# usermod -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
[root@localhost qhdlink]# tail -2 /etc/passwd
fedora:x:5001:5001:Fedora Core:/home/fedora:/bin/tcsh
gentoo:x:5000:1001:Gentoo Distribution:/home/gentoo:/bin/csh
[root@localhost qhdlink]# id gentoo
uid=5000(gentoo) gid=1001(centos) 组=1001(centos),0(root),1(bin)

  4)为用户fedora添加新的附属组centos,使得其隶属于四个组中;

[root@localhost qhdlink]# usermod -aG centos fedora
[root@localhost qhdlink]# id fedora
uid=5001(fedora) gid=5001(fedora) 组=5001(fedora),1001(centos),1004(distro),1005(peguin)

  5)创建系统用户iscsi,指定其UID为808,其主组是GID为808的系统组mydisk,并使其不可交互登录系统,且不为其创建家目录;

[root@localhost qhdlink]# groupadd -rg 808 mydisk
[root@localhost qhdlink]# tail /etc/group
stapdev:x:158:
tcpdump:x:72:
ex:x:1000:ex
centos:x:1001:qhdlink,fedora
varnish:x:1002:qhdlink
qhdlink:x:1003:
distro:x:1004:fedora
peguin:x:1005:fedora
fedora:x:5001:
mydisk:x:808:
[root@localhost qhdlink]# useradd iscsi -u 808 -g mydisk -rM
[root@localhost qhdlink]# tail -1 /etc/passwd
iscsi:x:808:808::/home/iscsi:/bin/bash