Linux 用户和用户组的管理

root 用户才是 ——>  整个系统的超级管理员

超级用户可以有权限管理整个系统,包括网络、配置、软件

在 Linux 中 root 并非是系统超级管理员;而是 UID 为 0 的用户才是超级管理员,只是 root 的 UID 刚好为 0

在 Linux 中每个用户都会被分配一个 UID(类似人的身份证),将其称为用户的身份标识符,所以人根据用户名来确定用户,而系统根据 UID 来确定用户

根据用户与 UID 的分配关系,我们将用户分为两类:

        一类是系统用户:0 - 999

        二类是普通用户:1000 - 60000

        可以通过修改 /etc/login.defs 文件,修改 UID 的上限

根据系统的使用用途来分,也将其分为两类:

        一类普通用户:通常指的是这一类用户由使用者来进行创建

        二类服务用户:通常由系统进行定义,或者服务来负责创建

一、用户存在的意义

在 Linux 系统中为什么要有用户???

因为不同的服务使用不同的用户来管理更加安全;并且使用多用户,能够让系统的运行效率更高;并且有利于系统的权限分配和管理

二、用户存储的位置

/etc/passwd 的文件中,在该文件中记录了 UID 和用户名的映射关系

root:x:0:0:root:/root:/bin/bash

root:用户名

x:密码占位符;如果有 x 则用户登录时需要验证密码,如果没有 x 则不需要验证(x 不是真正的密码,仅仅只是验证密码)

第三位 0:指的是用户的 UID

第四位0:指的是用户的 GID(GID 指的是组的 ID)

第五位 root:用户的描述信息

第六位 /root:指的是用户的家目录(也就是用户登录系统后所在的位置)

第七位 /bin/bash:指的是用户的登录 shell(指的是用户登录操作系统后运行的第一个程序,称为 shell 程序),如果 shell 是 /bin/bash 表示该用户不能登录操作系统,也无法与系统交互;如果不用不能登录操作系统,不代表用户不能使用;该用户可以用作服务的运行用户,专门用来运行和管理服务

三、组的信息

在 Linux 系统中,每一个用户都必须要有一个组

组的出现是为了更好的管理用户,因此可以将组看成是用户的集合;如果对一个组分配权限,则组内的所有用户都会继承这个权限;通过用户组可以简化对用户的管理

在系统中,组被分成两类:

        一类是私有(属)组:在用户创建的时候,一并指定的组称为私有组;每个用户都必须要有一个私有组;且只能有一个私有组

        一类是公共(附加组):将用户加入到其他组,则其他组成为该用户附加组,用户可以没有附加组

如果 A 加入 IT 组

        A 是 IT 组的成员

        IT 是 A 的附加组

四、GID 与组名的映射关系

/etc/group 中记录 GID 和组的映射关系

        root:x:0:zhangsan

        root:表示组的名称

        x:表示组的密码占位符(组也是可以设置密码,且可以登录的)

        0:表示组的 ID 也就是 GID

        zhangsan:表示组内的用户

 为什么在组内找不到用户???

 因为系统在创建用户时,如果没有指定用户的私有组;则创建用户时系统会以用户的名字作为组名创建一个组,并且将该用户加入到组内,让该组成为用户的私有组,如果一个组是用户的私有组,则组内不会出现该用户

五、创建用户

useradd    创建用户

    -u     指定用户的 UID
    
    -g     指定用户的私有组
    
    -c     指定用户的描述信息(开机登录时的用户名)

    -G     指定用户的附加组
    
    -d     指定用户的家目录

    -s     指定用户的 shell 程序  
           可以通过 su - zhangsan  -s  /bin/bash  临时给用户指定一个 shell 进行登录

问题:

        a. 如果两个相同的用户名使用不同的 UID 能否正常使用 ???

        两个相同的用户名,可以使用两个不同的 UID,但是没有意义;是因为用户的条目会发生覆盖,系统读取 /etc/passwd 文件时,从下往上读,相同的用户会被覆盖掉

        b. 张三和李四能否使用同一个 UID ???

        张三和李四可以使用同一个 UID,相当于系统中一个用户有两个别名,实际上两者是同一个用户,人根据用户名来区别用户,系统则根据 UID 来识别用户,如果两个用户的 UID 一致,则系统将两个用户作为同一个用户

        c. /etc/passwd 中 UID 的产生时将 passwd 文件中最大的 UID+1,来生成新的 UID,UID 不能随意的分配 ——> 涉及到权限

        因此系统中服务的保留 UID,是不会被分配出去的;在分配 UID 时,使用 passwd 文件最大的 UID+1 来进行分配,因此在创建用户指定 UID 时,要考虑 UID 的大小;因为所指定的 UID 前面的范围将会被系统保留;举例:创建一个用户 zhangsan,将其 UID 设置为 3000,则默认创建用户从 3001 开始分配 UID,导致 3000 以前的 UID 全部被保留 !!!无论是否使用

六、修改用户和删除用户

useradd    创建用户

usermod    修改用户
             
userdel    删除用户


usermod 用法:

    usermod -l ituser00 ituser7      修改用户名

    usermod -u 2026 ituser00         修改用户的 UID

    usermod -g zhaoliu ituser00      修改用户私有组

    usermod -G user1 ituser00        修改用户的附加组
        注意:在添加附加组时使用 -aG,单用 -G 会发生覆盖

    usermod -c "test user" ituser00  修改用户的描述信息

    usermod -md /wuhan ituser00      -m 移动家目录  -d 指定路径   修改用户的家目录

    usermod -s /bin/bash ituser00    修改用户的登录 shell

删除用户要理解用户在系统中生成了哪些文件

userdel  用户名  仅仅只是在 /etc/passwd 和 /etc/group 中删除了 UID 和 GID 映射关系,没有删除用户的文件(该用户的文件指的是用户创建时生成的文件,而并非用户在系统创建的数据文件)

创建用户时一并被创建出来的文件有哪些 ???

a. 创建用户时 UID 和用户名的映射关系写入到 /etc/passwd 文件中

b. 创建用户时 GID 和组名的映射关系写入到 /etc/group 文件中

c. 创建用户时,用户的密码写入 /etc/shadow 文件中

d. 创建用户时,用户组的密码写入 /etc/gshadow 文件中

e. 创建用户时,用户的家目录默认保存在 /home 目录下,且使用用户名作为目录名

f. 创建用户时,用户的邮箱将被创建在 /var/spool/mail 目录下以用户名作为文件名

当使用 userdel  用户名   删除用户时 ,仅仅删除了 a - d 生成的内容,并没有删除用户的家目录和用户的邮箱文件

userdel  -r  干净的删除用户,也就是连同用户的邮箱和家目录一下删除(也就会将家目录下用户的文件也将被删除)

七、用户的管理

创建组
    
    groupadd    
        
        groupadd -g 1010 cloud    在创建时一并指定组的 GID

修改组
    
    groupmod
        
        groupmod -n redhat cloud   修改组的名称
        
        groupmod -g 1030 redhat    修改组的 GID

删除组
    
    如果删除的组,是某个用户的私有组,则该组不能被删除
    
    如果删除的组,是某个用户的附加组,则该组可以删除

    给组设置密码:使用  gpasswd  给组设置密码,通过 newgrp 切换到组
    
    例:gpasswd it   /   newgrp  it


组还可以设置管理员

    gpasswd -A 用户名  组名
    
    如果一个用户是这个组的管理员用户,那么该用户可以不在这个组内,依然可以管理这个组

    gpasswd -a 用户名 组名    向组内添加用户

    gpasswd -d 用户名 组名    从组中移除用户


root 用户对组的管理:
    groupmems root 用户对组的管理工具
    
    groupmems -g 组名 -a 用户名    向组内添加用户
    
    groupmems -g 组名 -d 用户名    删除组内的用户

    groupmems -g 组名 -p           清空组内的所有用户,如果该组是某个用户的私有组,则该用户不会被组内移除

八、用户和组的密码文件

组的密码文件:/etc/gshadow

it:$6$luFKlmh1cBzRxhR6$ySXC3frhNJ.sq8hqxV2bpiPBjOs3n.G4JxJIr444g5p8kW8kc/G3zpyHvfswrokTxr2NiWFGD.QHHBxmObLQv1:zhangsan:lisi,wangwu

it:表示组的名称

$6$:表示的是组的密码(是使用 hash512 加密算法生成的密文)

zhangsan:表示的是组的管理员

lisi:表示的组内的成员

用户的密码文件:/etc/shadow

root:$6$xGDekMTJvPHugfAe$nuWWDpjULZFE3IPYuUN04v5.54yCC5K5lEJoPrgb7tqjJCN859sShM2G9Hey.80F3AbBc5kzXKDEdpAONtuVE.:19694:0:99999:7:2:20090:

root:表示用户名

$6$:表示用户的密码(其中 $6$ 两个 $ 之间的数字代表的是加密的类型)

    $6$:表示使用 hash512 加密

    $5$:表示使用 hash256 加密

    $1$:表示使用 md5 加密
    
    !!:表示该用户从来没有设置过密码
        
        Linux 锁定用户,就是利用密码锁定用户

19694:表示上一次修改密码的时间(指的是从 1970-01-01 经过了 19694 天   date +%F -d "1970-01-01 19609days"

0:表示的是密码的最短有效期,也就是密码最少可以用几天(如果为 0 则没有限制)

99999:表示的是密码的最长有效期(如果为 99999 则一直有效)

7:表示的是密码到期前的警告天数,也就是在密码即将到期的前七天向用户发送告警信息

2:表示的是账号的锁定天数,如果密码到期后两天内没有改就锁定

20094:表示的是账号的失效时间,也就是这一天,账号不可用,这一天是从 1970-01-01 经过了 20090 天数后的一个具体日期

用户的策略文件:

        /etc/login.defs        文件中定义用户的默认值

你可能感兴趣的:(Linux,linux,运维,服务器,笔记,经验分享)