linux用户和组的管理

一、用户名的认知

    1、用户名的引入:人的认知倾向字符串,而机器只认0101的ASCII代码)
    名称解析:用户名<---->UID

    ①用户认证 验证该用户是否有权限登录该主机

        --认证机制:linux默认的认证机制叫shadow 通常称为影子口令

         密码存放位置/etc/shadow

[root@localhost tmp]# head -3 /etc/shadow
root:$6$aClk7n/uMXB25Oxe$1xOFEgeyIah/WYYSa6GeT7G72Z3JFgMkuo73wIuIzl3JLMxWI4njZG9a3zjaG9nO2cChgGVFYWvi5T5xyIKjv/:16526:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::

        --安全上下文:进程是继承了,发起该进程的用户的权限。

    ②用户授权 该用户是否有权限能访问该文件

    ③审计 记录用户的所有操作

    2、用户类别
        管理员    root UID:0
        普通用户分两种
                1、系统用户 (作用:他们是为了在后台运行某个服务进程而特别建立,不能进行交互式登录的用户 UID的范围 1-499)

                2、可交互式登录的用户,UID的范围 500-65535

        /etc/passwd 是系统识别用户的一个文件,在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割

[root@localhost home]# tail -1 /etc/passwd
jiuren:x:500:500::/home/jiuren:/bin/bash

    jiuren: 用户名

    x :密码占位符 存在别处

    500:UID

    500:GID
    ::用户的注释(描述信息)这里没有注释
    /home/jiuren:用户的家目录
    /bin/bash:用户所使用的默认SHELL类型

二、组的概念   
        容器:存放用户及权限
        group name  <---->GID
        组的类别:
        管理员组 root GIU:0

        普通组
            1、系统组 GID:1-499)
            2、用户组(2种) GID:500-65535
                ☆用户的私有组 (组名和用户名一样,且通常指包含一个用户)
                用户的非私有组(2种)
                    用户的基本组 (用户执行操作时,用户所属的组,就称为基本组)
                    ★用户的附加组 (除了基本组以外的组)

        /etc/group

        该文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特征 。

        在/etc/group 中的每条记录分四个字段:

[root@localhost home]# head -3 /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon

        拿daemon这个组来举例说明:
        daemon:组名
        x:组密码占位符
        2:GID
        bin,daemon:该组下的用户名列表

三、用户和组管理相关的命令
useradd [选项] 参数(用户名)添加用户
            -u UID 指定用户UID 

[root@localhost tmp]# useradd -u 888 zhang
[root@localhost tmp]# id zhang
uid=888(zhang) gid=888(zhang) groups=888(zhang)

            -c comment'描述信息'

[root@localhost tmp]# useradd -c "this is xiaoli" xiaoli
[root@localhost tmp]# id xiaoli
uid=889(xiaoli) gid=889(xiaoli) groups=889(xiaoli)

            -d home_dir 指定用户的家目录,此目录应该不存在,若存在创建用户时会报警

[root@localhost tmp]# useradd -d /tmp/wang wang
[root@localhost tmp]# tail -1 /etc/passwd
wang:x:890:890::/tmp/wang:/bin/bash

            -s shell 指定用户的默认shell  /etc/shells 用户可选择的shell

[root@localhost tmp]# useradd -s /bin/csh xiaozhao
[root@localhost tmp]# tail -1 /etc/passwd
xiaozhao:x:891:891::/home/xiaozhao:/bin/csh

            -g GID或组名 指定用户的基本组

[root@localhost tmp]# useradd -g abc aaa
[root@localhost tmp]# id aaa
uid=892(aaa) gid=5005(abc) groups=5005(abc)

            -G GID或组名 指定用户的附加组

[root@localhost tmp]# useradd -G def bbb
[root@localhost tmp]# id bbb
uid=893(bbb) gid=893(bbb) groups=893(bbb),5006(def)

            -r 创建系统用户

[root@localhost tmp]# useradd -r log
[root@localhost tmp]# id log
uid=498(log) gid=498(log) groups=498(log)

   注: /etc/defaulat/useradd    默认创建用户时所设的选项和参数


usermod [选项] 用户名
        -u UID 修改UID

[root@localhost tmp]# tail -1 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
[root@localhost tmp]# useradd -u 500 jiuren
[root@localhost tmp]# id jiuren
uid=500(jiuren) gid=500(jiuren) groups=500(jiuren)


        -c 修改描述信息

[root@localhost tmp]# usermod -c "jiurenjiaoyu" jiuren
[root@localhost tmp]# tail -1 /etc/passwd
jiuren:x:500:500:jiurenjiaoyu:/home/jiuren:/bin/bash


        -d 修改用户的家目录

    注:通常用于-m选项一起使用,以实现移动用户的家目录(目标家目录一般不存在)

[root@localhost tmp]# usermod -d /tmp/jiaoyu -m jiuren
[root@localhost tmp]# tail -1 /etc/passwd
jiuren:x:500:500:jiurenjiaoyu:/tmp/jiaoyu:/bin/bash

        -s 修改用户的shell类型

[root@localhost tmp]# usermod -s csh jiuren
[root@localhost tmp]# tail -1 /etc/passwd
jiuren:x:500:500:jiurenjiaoyu:/tmp/jiaoyu:csh


        -g 组名或者GID 修改用户的基本组

[root@localhost tmp]# groupadd test
[root@localhost tmp]# usermod -g test jiuren
[root@localhost tmp]# id jiuren
uid=500(jiuren) gid=5003(test) groups=5003(test)


        -G 组名或者GID -a追加的形式(默认是覆盖)修改附加组

[root@localhost tmp]# usermod -G test jiuren
[root@localhost tmp]# id jiuren
uid=500(jiuren) gid=5003(test) groups=5003(test)
[root@localhost tmp]# groupadd test2
[root@localhost tmp]# usermod -G test2 -a jiuren
[root@localhost tmp]# id jiuren
uid=500(jiuren) gid=5003(test) groups=5003(test),5004(test2)
[root@localhost tmp]#


        -l 新的用户名 更改用户名

[root@localhost tmp]# usermod -l jiuren1 jiuren
[root@localhost tmp]# tail -1 /etc/passwd
jiuren1:x:500:0:jiurenjiaoyu:/tmp/jiaoyu:csh


        -L 锁定该用户 这个操作是放一个感叹号在你的密码前,禁用密码

[root@localhost tmp]# tail -1 /etc/shadow
jiuren:$6$gFvaKNmM$U7NwVbrrPekw3XgnMee5zqZ30R9mEMEibj0j9F13rKRwyASDo9
rxOIR.i6tWna.DznvEW795PuRCErzhdIbkN.:16529:0:99999:7:::
[root@localhost tmp]# usermod -L jiuren
[root@localhost tmp]# tail -1 /etc/shadow
jiuren:!$6$gFvaKNmM$U7NwVbrrPekw3XgnMee5zqZ30R9mEMEibj0j9F13rKRwyASDo
9rxOIR.i6tWna.DznvEW795PuRCErzhdIbkN.:16529:0:99999:7:::


        -U 解锁该用户 这个操作是在加密密码前取消感叹号,恢复帐号登录  

[root@localhost tmp]# usermod -U jiuren
[root@localhost tmp]# tail -1 /etc/shadow
jiuren:$6$gFvaKNmM$U7NwVbrrPekw3XgnMee5zqZ30R9mEMEibj0j9F13rKRwyASDo9
rxOIR.i6tWna.DznvEW795PuRCErzhdIbkN.:16529:0:99999:7:::


userdel [选项] 参数(用户名)
        -r 删除用户是,同时删除用户家目录   

[root@localhost home]# ls
aaa  bbb  jiuren  lost+found  xiaoli  xiaozhao  zhang
[root@localhost home]# userdel -r zhang
[root@localhost home]# ls
aaa  bbb  jiuren  lost+found  xiaoli  xiaozhao

groupadd [选项] 参数(组名)
            -g GID 指定当前创建组的ID号

[root@localhost home]# groupadd -g 999 test3
[root@localhost home]# tail -3 /etc/group
bbb:x:893:
log:x:498:
test3:x:999:

            -r 创建系统组

[root@localhost home]# groupadd -r test4
[root@localhost home]# tail -1 /etc/group
test4:x:497:


groupmod [选项] 组名
        -g GID 修改的是组的ID

[root@localhost home]# groupmod -g 400 test4
[root@localhost home]# tail -1 /etc/group
test4:x:400:

        -n 修改的是新的组名

[root@localhost home]# groupmod -n systest4 test4
[root@localhost home]# tail -1 /etc/group
systest4:x:400:

    groupdel 组名  删除组

[root@localhost home]# groupdel systest4
[root@localhost home]# tail -3 /etc/group
bbb:x:893:
log:x:498:
test3:x:999:

    练习1  答案在本文最后,请思考,动手试试!
        创建用户gentoo UID为4001 基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001)
    练习2
        创建用户fedora 其描述为“Fedora Core” 默认shell为 /bin/tcsh
    练习3
        修改gentoo 用户的家目录为/tmp/gentoo,并且为gentoo新增附加组为netadmin


id [选项] 参数(用户名)
        -u UID 仅显示UID

[root@localhost tmp]# id -u wang
890

        -g GID 仅显示GID

[root@localhost tmp]# id -g aaa
5005

        -n 显示用户名而非数字,需要与-ugG 结合使用

[root@localhost tmp]# id -n -u xiaozhao
xiaozhao

chsh 用于 改变 用户的 登录 shell. 如果 没有在 命令行上 指定 shell, chsh 能够 做出 提示

         chsh -l ==cat /etc/shells

        -l 用户可以使用的安全shell
        -s shell 用户名 修改用户的默认shell

[root@localhost home]# chsh -s /bin/tcsh wang
Changing shell for wang.
Shell changed.
[root@localhost home]# tail -8 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
jiuren:x:500:5003:jiurenjiaoyu:/tmp/jiaoyu:csh
xiaoli:x:889:889:this is xiaoli:/home/xiaoli:/bin/bash
wang:x:890:890::/tmp/wang:/bin/tcsh        #成功改变shell类型
xiaozhao:x:891:891::/home/xiaozhao:/bin/csh
aaa:x:892:5005::/home/aaa:/bin/bash
bbb:x:893:893::/home/bbb:/bin/bash
log:x:498:498::/home/log:/bin/bash

练习1答案:

[root@localhost tmp]# groupadd gentoo
[root@localhost tmp]# groupadd -g 5000 distro
[root@localhost tmp]# groupadd -g 5001 peguin
[root@localhost tmp]# useradd -u 4001 -g gentoo -G distro,peguin gentoo
[root@localhost tmp]# id gentoo
uid=4001(gentoo) gid=500(gentoo) groups=500(gentoo),5000(distro),5001(peguin)

练习2答案


[root@localhost tmp]# useradd -c "Fedora Core" -s /bin/tcsh fedora
[root@localhost tmp]# tail -1 /etc/passwd
fedora:x:4002:4002:Fedora Core:/home/fedora:/bin/tcsh

练习3答案

[root@localhost tmp]# groupadd netadmin
[root@localhost tmp]# usermod -G netadmin -a gentoo
[root@localhost tmp]# id gentoo
uid=4001(gentoo) gid=500(gentoo) groups=500(gentoo),5000(distro),5001(peguin),5002(netadmin)
[root@localhost tmp]# usermod -d /tmp/gentoo -m gentoo
[root@localhost tmp]# ls /home/
fedora  jiuren  lost+found
[root@localhost tmp]# tail -3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
gentoo:x:4001:500::/tmp/gentoo:/bin/bash
fedora:x:4002:4002:Fedora Core:/home/fedora:/bin/tcsh



四、/etc/shadow 存储用户认证密码

[root@localhost tmp]# head -1 /etc/shadow
root:$6$aClk7n/uMXB25Oxe$1xOFEgeyIah/WYYSa6GeT7G72Z3JFgMkuo73wIuIzl3JLMxWI4njZG9a3zja
G9nO2cChgGVFYWvi5T5xyIKjv/:16526:0:99999:7:::

1、每个字段的代表意思

用户名:加密后的密码:上次修改密码的时间:密码最短使用期限:密码最长使用期限:密码警告区间:密码非活动区间(用户存在,密码不能登录):账号过期(账号被注销):预留
如:7天之内不能修改--最短使用期限
    30天最长--密码最长使用时间
    30天到期之后警告区间
    密码加密的每个字段的含义$为分隔符
    ·6:指定密码加密方式 使用的是 sha512字长
    ·aClk7n/uMXB25Oxe加密杂质
    ·1xOFEgeyIah/WYYSa6GeT7G72Z3JFgMkuo73wIuIzl3JLMxWI4njZG9a3zja

      G9nO2cChgGVFYWvi5T5xyIKjv/ :加密生成的密码   
    例子 (root+杂项)进行sha512加密 形成512长度的字符串  
2、修改用户密码:
        管理员:passwd 回车   修改管理员root用户自身密码
                passwd 用户名 修改其他普通用户的密码
        普通用户:passwd 只能修改普通用户自身密码
    切换登录
    su :switch user
        登录式切换: su - 用户名 (会读取用户的所有配置)exit 退出当前用户
        非登录式切换: su 用户名 (不会读取目标用户环境配置文件)

五、权限管理
    1、文件权限:针对3类对象进行定义
        -rw-r--r--. 1 root root 27632 Apr  1 18:16 install.log
        属主 属组 其他组(其他用户)
        权限类型:r read  w write x eXcutable
        文件(指普通文件)
            r可以查看文件的内容
            w可以修改文件的内容
            x可以把文件向内核提起申请,运行为一个进程
        目录(目录文件)
            r是否可以使用ls命令,处了-l 选项之外
            w是否可以在目录中进行添加、删除操作
            x可使用cd命令进入目录 ls -l的选项是否可用
    2、修改文件的权限:
        用法:chmod [选项]... 模式[,模式]... 文件...
             -R  递归赋予权限
        每种模式都应属于这类形式"[ugoa]*([-+=]([rwxXst]*|[ugo]))+"
        操作对像
           u 文件属主权限
           g 同组用户权限
           o 其它用户权限
           a 所有用户(包括以上三种)
        权限设定
           + 增加权限
           - 取消权限
           = 唯一设定权限
        权限类别
           r 读权限
           w 写权限
           x 执行权限
           X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
           s 文件属主和组id
           l 给文件加锁,使其它用户无法访问
        权限模型 文件名
            o=+rwx 不能写成o=+r,+w,+x 如下例子

[root@localhost ~]# ls -l functions 
-rw-r--r-- 1 root root 19295 Apr  6 05:27 functions
[root@localhost ~]# chmod o=+w,+x functions 
[root@localhost ~]# ls -l functions 
-rwxr-x-wx 1 root root 19295 Apr  6 05:27 functions #这里给属主和数组也同样加上了x权限

            u和g用法同上
            数值权限 rwx分别代表421
    3、chown修改属主、属组
        用法:chown [选项]... [所有者][:[组]] 文件...
            -R 递归赋予权限
            属主:   只更改属主
                :属组 只更改数组

[root@localhost ~]# ls -l functions 
-rwxr-x-wx 1 root root 19295 Apr  6 05:27 functions
[root@localhost ~]# chown jiuren: functions 
[root@localhost ~]# ls -l functions 
-rwxr-x-wx 1 jiuren jiuren 19295 Apr  6 05:27 functions #这里没有达到上面描述的效果,
                                                        是因为基本组的原因
[root@localhost ~]# chown :root functions 
[root@localhost ~]# ls -l functions 
-rwxr-x-wx 1 jiuren root 19295 Apr  6 05:27 functions  #这里就可以修改用户的数组