yscl

用户 、组和权限管理

知识点

1.

   linux操作系统是支持多用户, 多任务的. Multi-tasks, Multi-Users

2. 使用者的权限

  用户识别是通过标识, 密码.

    认证:  Authentication

    授权:  Authorization

    审计:  Audition

  组: 用户组, 存储用户的容器

3. 用户类别

  管理

  普通用户

    登录用户

    系统用户

  用户标识:  UserID, UID

    16位二进制数字标识,  范围0-65536

      管理员: 0

      普通用户:  1-65535

        系统用户:  1-499(CentOS6) 1-999(CentOS7)

        登录用户: 500-65535(CentOS6)  1000-65535(CentOS7)

    名称解析: 

      就是一个名称转换的过程  Username  <--->  UID

      根据名称解析库进行解析:  解析库位于  /etc/passwd 

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
...

4. 组类别  

  组类别1:

    组标识:  GroupID:  GID

    管理员组:  0

    普通用户组:  1-65535

      系统用户组: 1-499(CentOS6)  1-999(CentOS7)

      登录用户组: 500-65535(CentOS)  1000-65534(CentOS7)

    名称解析:  group那么  <--->  gid  

      解析库:  /etc/group

[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
...

   组类别2:

    用户的基本组

    用户的附加组

  组类别3:

    私有组:  组名同用户名, 且只有一名用户

    公共组:  组内包含多个用户

5. 认证信息:

  通过比对实现存储的, 与登录时提供的信息是否一致. 

  password:

    /etc/shadow:  用户密码库

    /etc/gshadow:  组密码库

  密码的准则:

    1. 使用随机密码

    2. 最短不要低于8位

    3. 应该使用大写字母, 小写字母, 数字和标点符号中的3类以上

    4. 定期更换

  加密算法:

    对称加密: 加密和解密需要使用同一个密码

    非对称加密:  加密和解密使用的是一对儿秘钥

      秘钥对:

        公钥:  public ley

        私钥:  private key

    单向加密:  只能加密,  不能解密: 提取数据的特征码

      定长输出:  md5算法产生固定的32个字节长度

      雪崩效应:  就像md5摘要算法一样, 只要有一位不同, 输出结果就完全不同

      常用的加密算法:

        MD5:  message digest,  128bits

        sha:  secure hash algorithm,  160bits

           sha224,  sha256, sha384,  sha512

      为了防止用户的密码一致,  会在计算之间添加随机的salt

  /etc/passwd:  name:  用户的信息库

    name: password:UID:GID:GECOS:directory:shell

    name: 用户名

    password: 密码

    UID: 

    GID: 用户主组的id号

    GECOS: 注释的信息

    directory:  用户的家目录

    shell: 用户的默认shell,  登录时默认shell程序

tcpdump:x:72:72::/:/sbin/nologin
user:x:1000:1000:user:/home/user:/bin/bash
centos:x:1001:1001::/home/centos:/bin/bash
gentoo:x:1002:1002::/home/gentoo:/bin/bash

  /etc/shadow:  用户密码

    9个字段

    用户名: 加密的密码:最近一次修改密码的时间: 最短使用期限: 最长使用期限: 警告期限: 密码禁用: 用户过期日期: 保留字段

    最短使用期限:  是指上次改后需要经历的最短时间才能继续修改

    最长使用期限: 距离上次修改密码后的允许使用的最大时间

    密码禁用:  用户不允许使用自己的密码登录

    账户禁用:  用户不允许登录

  /etc/group:  租的信息

    group_name:password:GID:user_list

    组名: 密码: 组ID: 用户列表

      密码: 放在/etc/gshadow中

      user_list:  该组的用户成员, 一次组为附加组的用户的用户列表

user:x:1000:user
centos:x:1001:
gentoo:x:1002:
slackware:x:1003:

 6. linux用户和组管理

  groupadd:  添加组

    groupadd [OPTIONS]  group_name

      -g GID: 指定GID:  默认是上一个组的GID + 1

      -r:  创建系统组

  groupmod: 修改组

    groupmod [options] GROUP

      -g GID: 指定修改为新的gid

      -n newname:  修改为新的组名

  groupdel:   删除组

    groupdel GROUP

  useradd:  添加用户

    useradd [options] LOGIN

      -u  UID 指定用户的uid, 否则为上一个uid+1,  1000以下是系统用户, 1000以上为登录用户

      -g GID  指定基本组id, 这个组必须事先存在

      -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]  可以为用户添加多个附加组

      -c --comment COMMENT:  指定注释信息

      -d, --home-dir HOME_DIR:  指定用户的家目录, 默认是在/home目录下添加一个与登录名同名的家目录, 并从/etc/skel目录复制文件到该目录下, 如果目标目录已经存在, 则不会复制环境                                初始化文件到家目录

      -r --system:  创建一个系统用户

      -s --shell  SHELL:  指定用户的默认shell, 可用的shell列表 存在于/etc/shells 

    useradd -D:  显示创建用户的默认选项

      配置用户的选项都在 /etc/login.defs这个配置文件下

    useradd -d [选项] 修改创建用户的默认选项

      修改的文件保存在 /etc/default/useradd文件中..

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh

[root@localhost ~]# useradd -s /bin/sbin/nologin t5
[root@localhost ~]# tail -1 /etc/passwd
t5:x:1012:1014::/home/t5:/bin/sbin/nologin

  usermod:  修改用户

     -u, --uid UID:  修改用户的uid

     -g, --gid GROUP:  修改用户所属的基本组, 组得事先存在

     -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]  修改用户的附加组,  但是使用的时候会覆盖原来的附加组

     -a, --append:  和-G一起使用, 表示追加的作用, 不会覆盖原来的附加组..

     -c, --comment COMMENT,  修改注释信息

     -d, --home HOME_DIR:  修改用户的家目录,  但是会把原来用户的文件都删除, 这时候就需要和-m命令一起使用

     -m, --move-home:  移动用户的家目录,  这个只有和-d一起使用才能生效

     -l,  ,-login NEW_LOGIN:  修改用户的用户名

    -L, --lock:  锁定用户的密码, 这个实在用户的密码之前添加!号

    -U, --unlock: 解锁用户的密码

    -s, --shell SHELL:  更改用户的登录shell  

  userdel:  删除用户

    -r 删除用户时一并删除家目录

   passwd:  密码管理命令

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

     不带任何参数, 表示修改自己的密码

    passwd USERNAME :  修改指定用户的密码, 但是只有管理员有此权限

      -l, -u:  锁定和解锁指定用户的密码

      -d:  清除用户的密码

      -i;  密码过期后还能活动的时间. 

      -e : 设置密码的过期时间  date

      -n: 设置密码的最小天数

      -x:  设置密码的最大天数 

      -w:  设置密码的警告天数. 

      --stdin:  通过管道的方式将前面的字符串修改到用户的密码, 而不用重复输入两遍

        echo  "PASSWORD"  |   passwd  --stdin  USERNAME

  gpasswd:  组密码的管理命令

     gpasswd [option] group

      不带选项: 是直接为组添加密码

      -a, --add user:  向此组直接添加用户, 并让用户以此为附加组 

      -d, --delete user:  从组中移除用户

  newgrp命令:  临时切换到一个新组

      newgrp [-] [group]

  chage: 更改用户的密码过期信息

    chage [options] LOGIN

      用法与passwd类似

  id命令:  

    id 显示用户的真实有效的id信息

      id [OPTION]... [USER]

        -u 仅显示有效的uid

        -g 显示基本组id

        -G  显示用户的基本组和附加组id

        -n:  显示名称而非id号

  su命令:  switch user

    登录时切换:  会通过读取目标用户的配置文件来重新初始化 

      su - USERNAME

      su -l USERNAME

      

    非登录式切换:  不会读取目标用户的配置文件进行初始化

      su USERNAME

      su -c command, --command=command  不切换目录但是通过对方账号执行命令.

    管理员切换不需要任何密码

[root@localhost ~]# su - gentoo
Last login: Tue Aug 13 10:50:23 CST 2019 on pts/4
[gentoo@localhost ~]$ pwd
/home/gentoo
# 非登录式切换
[root@localhost ~]# whoami
root
[root@localhost ~]# su gentoo
[gentoo@localhost root]$ whoami
gentoo
[gentoo@localhost root]$ pwd
/root

7. 权限管理

   进程安全上下文:
    ls -l

      rwxrwxrwx:

        左三位, 定义user(owner) 的权限

        中三位,  定义group的权限

        右三位, 定义other的权限

      ownership: user, group6+

    进程对文件的访问权限应用模型:

      进程的属主与文件的属主是否相同, 如果相同, 则应用属主的权限

      否则, 则检查进程的属主是否与文件的属组相同, 如果相同, 则应用属组的权限

      否则, 则应用其他(other)的权限

    权限: 

      r:  read, 读权限

      w: write,  写权限

      x:  execute, 执行权限

      文件: 

        r: 可获取文件的数据

        w: 可修改文件的内容

        x:  文件可以运行为进程.

      目录:

        r: 可使用ls命令获取文件下所有的文件列表信息

        w: 可修改此目录下的文件列表, 即创建或删除文件

        x: 可cd到此目录中, 即可以使用ls -l 来获取所有文件的详细信息      

    权限组合机制:

      ---  000  0

      --x  001  1

      -w-  010  2

      -wr  011  3

      r--   100  4

      r-x  101  5

      rw-  110  6

      rwx  111  7

    权限管理命令:

      chmod命令:     

        chmod [OPTION]... MODE[,MODE]... FILE...
        chmod [OPTION]... OCTAL-MODE FILE...
        chmod [OPTION]... --reference=RFILE FILE...

        三类用户:

          u:  属主

          g:  属组

          o:  其他

          a:  所有

         (1): chmod [OPTION]... MODE[,MODE]... FILE...

          MODE表示的方法

            赋权表示法:  直接操作一类用户的所有权限位

              u=

              g=

              o=  

              a=

            授权表示法:  直接操作一类用户的一个权限位 r, w, x

              u+, u-

              g+, g-

              o+, o-

              a+, a-

        (2) chmod [OPTION]... OCTAL-MODE FILE...

            八进制权限表示法:

              不能减少任何权限, 否则会省略属主的权限赋值

        (3) chmod [OPTION]... --reference=RFILE FILE...

            参考某个文件的文件的权限     

        选项: 

          -R, --recursive  递归地修改一个目录的权限  一般只用于上述的授权表示法

[root@localhost ~]# touch t
[root@localhost ~]# ll t
-rw-r--r--. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod g=rw t
[root@localhost ~]# ll t
-rw-rw-r--. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod u=rwx t
[root@localhost ~]# ll t
-rwxrw-r--. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod o=rw t
[root@localhost ~]# ll t
-rwxrw-rw-. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod a=rw t
[root@localhost ~]# ll t
-rw-rw-rw-. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod u=rwx,g=rw,o= t
[root@localhost ~]# ll t
-rwxrw----. 1 root root 0 Aug 13 21:05 t

# 直接操作一类权限添加减少权限
[root@localhost ~]# ll t
-rwxrw----. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod u-x t
[root@localhost ~]# ll t
-rw-rw----. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod a+r t
[root@localhost ~]# ll t
-rw-rw-r--. 1 root root 0 Aug 13 21:05 t
[root@localhost ~]# chmod a-r t
[root@localhost ~]# ll t
--w--w----. 1 root root 0 Aug 13 21:05 t

[root@localhost ~]# chmod 666 t
[root@localhost ~]# ll t
-rw-rw-rw-. 1 root root 0 Aug 13 21:05 t



[root@localhost ~]# chmod --reference=test t

    从属关系管理命令:  chown,  chgrp

      chown命令:  修改属主       

        chown [OPTION]... [OWNER][:[GROUP]] FILE...
        chown [OPTION]... --reference=RFILE FILE...

         选项:

           -R:  递归的修改

      chgrp命令:  修改属组, 功能和chown差不多.      

        chgrp [OPTION]... GROUP FILE...
        chgrp [OPTION]... --reference=RFILE FILE...

     注意: 仅能管理员修改

[root@localhost ~]# chown -R gentoo:t5 tmp
[root@localhost ~]# ll tmp
total 32
drwxr-xr-x.  2 gentoo t5 4096 Aug  8 15:17 conf.d
-rw-r--r--.  1 gentoo t5  158 Aug  8 07:23 hosts
-rw-r--r--.  1 gentoo t5   23 Aug  8 07:23 issue
[root@localhost ~]# chown -R t5.gentoo tmp
[root@localhost ~]# ll tmp
total 32
drwxr-xr-x.  2 t5 gentoo 4096 Aug  8 15:17 conf.d
-rw-r--r--.  1 t5 gentoo  158 Aug  8 07:23 hosts
-rw-r--r--.  1 t5 gentoo   23 Aug  8 07:23 issue

    问题:用户对目录 有写权限, 但对目录下的文件没有写权限, 用户能够删除这个文件或修改这个文件的内容.

       可以.

    umask: 反向掩码, 文件的遮罩码

      用户默认创建的文件都是 666-umask, 当创建的文件具有执行权限的时候, 会默认加1

      用户默认创建的目录都是777-umask  

      root用户: 0022,  普通用户:  0002

      此类设定仅对当前shell有效

  install命令:

    单源复制:

    install [OPTION]... [-T] SOURCE DEST

    多源复制:
    install [OPTION]... SOURCE... DIRECTORY
    install [OPTION]... -t DIRECTORY SOURCE...

    创建目录
    install [OPTION]... -d DIRECTORY...

     常用选项:

      -m, --mode=MODE: 设定目标权限,  默认为755

      -o, --owner=OWNER:  设定目标文件的属主

      -g, --group=GROUP:  设定目标文件的属组

      -d:  创建目录

  mktemp: 创建临时目录或临时文件

    mktemp [OPTION]... [TEMPLATE]

    创建的时候, 名字必须有3个X

    -d:  创建目录

分类:

技术点:

相关文章: