zoukankan      html  css  js  c++  java
  • 正式班D17

    2020.10.28星期三  正式班D17

    10 用户权限管理

    10.1 用户权限管理之用户与组管理

    10.1.1 用户基本信息

    • 什么是用户

      用户是操作系统提供的一种安全机制

      用户是权限的化身

    • 为什么要有用户

      为了划分权限,增强安全性

      每启动一个进程都会与一个用户关联

      进程-->用户-->权限(作用在文件身上)

    • 什么是组

      主组:用户本身所在的部门

      附加组:为用户添加的部门

    • 总结

      Linux系统把权限分为三类:

      ①属主对应的权限

      ②属组对应的权限

      ③其他对应的权限

      一个用户对文件的权限扫描的优先级:

      ①先看该用户是否是文件的属主

      ②在1失败的情况下,再看该用户是否是文件的属组

      ③在2失败的情况下,该用户属于其他人权限

    • 用户与组的关系

      一对一:一个用户可以属于一个组,用户默认就在自己的主组下

      一对多:一个用户可以属于多个组,只有一个主组,但可以为用户添加多个附加组

      多对多:多个用户可属于多个组

    • 查看用户的相关信息

      id # 查看当前用户

      whoami # 查看当前用户是谁

      who # 查看所有登陆的用户

      [root@ccc ~]# id  # 查看当前用户
      uid=0(root) gid=0(root) 组=0(root)  # UID:用户id,GID:主组id,组:所有组id
      [root@ccc ~]# whoami  # 查看当前用户是谁
      root
      [root@ccc ~]# id zzz  # 查看zzz用户
      uid=1000(zzz) gid=1000(zzz) 组=1000(zzz)
      [root@ccc ~]# who  # 查看所有登录的用户
      root     pts/0        2020-10-28 08:48 (192.168.29.2)
      root     pts/1        2020-10-28 14:50 (192.168.29.2)
      [root@ccc ~]# ps aux | grep [s]sh  # 每一个进程都有其用户
      root        833  0.0  0.4 112924  4328 ?        Ss   10:37   0:00 /usr/sbin/sshd -D
      root       1084  0.0  0.6 161532  6096 ?        Ss   10:39   0:00 sshd: root@pts/0
      root       1570  0.0  0.6 161536  6092 ?        Ss   14:50   0:00 sshd: root@pts/1
      
    • 角色划分

      分为管理员用户和其他用户

      ①管理员用户:拥有最高权限

      ②其他用户:根据管理员的分配拥有不同的权限

      UID与GID

      ①UID(User Identify)用户ID,唯一标识一个系统用户的账号,uid在系统中是唯一的

      ​ UID相当于一个人的身份证,用户名相当于这个人的名字

      ②GID(Group Identify)组ID

      GID相当于部门编号,UID相当于这个人的员工号

      centos7系统约定:

      UID0 # 超级管理员,最高权限,有着极强的破坏能力

      UID1-200 # 系统用户,用来运行系统自带的进程,默认已创建

      UID201-999 # 系统用户,用来运行安装的程序,该类用户无需登陆系统

      UID1000+ # 普通用户,可以正常登录系统的用户,权限比较小,能执行的任务有限

      centos6系统约定:

      UID0 # 由超级用户或具备超级用户权限的用户创建的用户

      UID1-499 # 系统虚拟用户,存在满足文件或服务启动的需要,一般不能登录

      UID500-65535 # 普通用户

    • 超级用户

      默认是root用户,其UID和GID都是0

      root在每台Unix/Linux操作系统中唯一且真实存在

      可以操作系统中任何文件和命令,拥有最高的管理权限

      1、在生产环境中,一般会禁止root账户通过SSH远程连接服务器,也会更改默认的SSH端口,以加强系统安全。

      2、企业工作中没有特殊要求尽量不登录root用户进行操作,应在普通用户下操作任务,然后sudo管理普通用户权限,可以细到每个命令权限分配。

      3、在Linux系统中,UID为0的用户就是超级用户。通常情况下不这么做,如果确实有必要在某一操作上用到管理的权限的话,用sudo单独授权,不要直接用UID为0的用户。

      操作系统—>一个国家

      root用户—>国王

      root用户的家目录—>皇宫

    • tips

      Linux/Unix是一个多用户多任务的操作系统

      Windows是一个单用户多任务的操作系统

      多用户指一次可以登录多个用户,而非可以创建多个用户

      多任务指可以并发执行多个进程

    10.1.2 与用户、组相关文件

    • 相关文件

      /etc/passwd

      /etc/shadow

      /etc/group

      /etc/gshadow

    • /etc/passwd

      以root: x:0:0:root:/root:/bin/bash为例

      root
      用户名称
      x
      密码占位符
      0
      用户UID
      0
      用户GID
      root
      注释信息
      /root
      用户家目录
      /bin/bash
      登录shell
      第一列 第二列 第三列 第四列 第五列 第六列 第七列
      root:x:0:0:root:/root:/bin/bash
      
      第一字段:用户名
      第二字段:口令,x代表密码已经被映射到/etc/shadow文件中
      第三字段:UID
      第四字段:GID
      第五字段:描述信息(可不写)
      第六段:用户家目录所在位置
      第七段:用户所用shell类型
      
    • /etc/shadow

      以zzz:!!:18561:0:99999:7:::为例

      定位 作用
      第一列 zzz 用户名称
      第二列 !! 密码是一长串字符串,!!表示没有密码
      第三列 18561 最近一次变更密码,距1970年过了多少天
      第四列 0 密码最少使用天数,0表示无限制
      第五列 99999 密码最常使用天数,99999表示无限制
      第六列 7 密码过期预警天数
      第七列 密码过期的宽恕天数,即密码过期后未及时修改密码,用户还可使用的天数
      第八列 账号失效日期,过了这个日期账号就无法使用
      第九列 保留,没有被使用
      user05:!!:18563:0:99999:7:::
      root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
      
      第一字段:用户名(登录名),在/etc/shadow中,用户名和/etc/passwd是相同的,这样就把passwd和shadow中用的用户记录联系在一起,这个字段是非空的。
      第二字段:密码(已被加密),如果是x,代表这个用户不能登陆到系统,这个字段是非空格的。
      第三字段:上次修改密码的时间,是1970.01.01至最近修改的时间间隔(天)
      第四字段:两次修改密码间隔最少天数;0代表禁用此功能
      第五字段:两次修改密码间隔最多天数;增强管理员管理用户口令的时效性(增强系统安全性)
      第六字段:提前多少天警告用户口令将过期
      第七字段:在口令过期之后多少天禁用此用户;即作废多少天后系统不会提示用户过期,完全禁用,系统不会再让此用户登录。
      第八字段:用户过期日期,指定用户作废的天数(1970.1.1开始的天数),为空代表永久可用
      第九字段:保留字段,供将来Linux发展之用
      
    • /etc/group 组文件

      [root@ccc ~]# head -1 /etc/group
      root: x:0:

      为例

      定位 解释
      第一列 root 用户组的名称
      第二列 x 用户组的密码占位符
      第三列 0 用户组的ID/GID
      第四列 显示该用户组作为哪个用户的附加组,用逗号分割
    • /etc/gshadow 组密码文件

      [root@ccc ~]# head -1 /etc/gshadow
      root:::

      为例

      定位 解释
      第一列 root 用户组的名称
      第二列 用户组密码,可为空或!,空或!代表没有密码
      第三列 用户组管理者,也可为空,多个管理者用逗号分隔
      第四列 显示该用户组作为哪个用户的附加组,多个用逗号分割
    • /etc/skel # 用户家目录的模板

      /home/xxx # 用户家目录

      /var/spool/mail/xxx # 用户邮箱文件

    10.1.3 用户管理命令

    • 增删改查

      useradd  # 添加用户
      userdel  # 删除用户
      usermod  # 修改用户信息
      
    • 创建用户useradd

      [root@ccc ~]# useradd user01
      [root@ccc ~]# 
      
    • 查看用户id

      [root@ccc ~]# id user01  # 查看user01的用户信息
      uid=1001(user01) gid=1001(user01) 组=1001(user01)
      [root@ccc ~]# who  # 查看所有登陆的用户信息
      root     pts/1        2020-10-28 14:50 (192.168.29.2)
      [root@ccc ~]# whoami  # 查看当前登录的用户名
      root
      

      当创建一个用户时,没有指定用户的主组,将会创建一个同名的组作为用户的主组

    • 删除用户userdel

      [root@ccc ~]# userdel user01  # 删除用户user01,但不删除用户家目录和mail
      [root@ccc ~]# userdel -r user02  # -r彻底删除
      
    • useradd命令(创建用户的同时指定选项)

      # 在Linux系统中添加一个新的用户账户(useradd)
      -u  # 指定用户的UID
      -g  # 指定用户所属的主组
      -G  # 指定用户所属的附加组
      -d  # 指定用户的家目录
      -c  # 指定用户的备注信息
      -s  # 指定用户所用的shell
      -e  # 修改过期时间
      -M  # 不创建家目录
      -r  # 创建系统账户,UID处于系统用户范围内,默认就没有家目录
      
      # 示例
      # 系统中新增一个fox用户
      [root@ccc ~]# useradd fox
      # 系统中新增一个用户user01,属组为police,UID为600
      [root@ccc ~]# useradd -u 600 -g police user01
      useradd:“police”组不存在
      [root@ccc ~]# groupadd police  # 创建组police
      [root@ccc ~]# useradd -u 600 -g police user01  # 按要求新增user01用户
      [root@ccc ~]# id user01
      uid=600(user01) gid=1007(police) 组=1007(police)
      
      # 练习
      [root@ccc ~]# useradd user01  # 创建默认用户user01
      
      [root@ccc ~]# useradd -u 555 user02  # 指定02用户UID为555
      [root@ccc ~]# id user02
      uid=555(user02) gid=1008(user02) 组=1008(user02)
      
      [root@ccc ~]# useradd -d /home/我是03指定的 user03  # 指定03用户的家目录
      [root@ccc ~]# useradd -M user04  # 指定04用户不创建家目录
      [root@ccc ~]# ll /home/
      总用量 0
      drwx------ 2 user01 user01 62 10月 28 19:23 user01
      drwx------ 2 user02 user02 62 10月 28 19:23 user02
      drwx------ 2 zzz    zzz    83 10月 26 16:07 zzz
      drwx------ 2 user03 user03 62 10月 28 19:24 我是03指定的
      
      [root@ccc ~]# useradd -s /sbin/nologin user05  # 指定05用户的shell
      [root@ccc ~]# tail -1 /etc/passwd
      user05:x:1004:1004::/home/user05:/sbin/nologin
      
      [root@ccc ~]# useradd -g hr user06  # 指定06用户的主组为hr
      [root@ccc ~]# id user06
      uid=1005(user06) gid=1009(hr) 组=1009(hr)
      
      [root@ccc ~]# useradd -G sale user07  # 指定07用户的附加组为sale
      [root@ccc ~]# id user07
      uid=1006(user07) gid=1011(user07) 组=1011(user07),1010(sale)
      
    • usermod命令

      usermod参数与useradd一致

      # 常用参数
      -u  # 指定要修改用户的UID
      -g  # 指定要修改用户的主组
      -a  # 将用户添加到附加组,只可与-G组合使用
      -G  # 指定要修改用户的附加组,用逗号隔开多个附加组,-G是覆盖,-a -G是添加
      -d  # 指定要修改用户的家目录
      -c  # 指定要修改用户的注释信息
      -s  # 指定要修改用户的bash shell
      
      # 其他选项
      -m  # 将用户主目录内容移动到新位置。若当前主目录不存在则不会创建新的主目录。
      -l  # 指定要修改用户的登录名
      -L  # 指定要锁定的用户
      -U  # 指定要解锁的用户
      
    • 设定与修改密码

      passwd  # 默认给当前用户设定密码
      passwd 用户名  # root用户可以给自己以及其他用户设定密码,普通用户只能设定自己的密码
      echo "密码" | passwd --stdin 用户名  # 非交互式设定密码
      
    • 补充

      # 使用系统内置变量生成随机字符串来充当密码
      [root@ccc ~]# echo $RANDOM | md5sum | cut -c 1-10
      c0ab942940
      [root@ccc ~]# echo $RANDOM | md5sum | cut -c 1-10
      a1880bb783
      
      

    10.1.4 组管理命令

    • 组管理基本命令

      groupadd  # 新建组
      groupmod  # 修改组信息
      groupdel  # 删除组
      groupwd  # 设置组密码
      newgrp  # 切换主组(临时给其他用户组的权限)
      
    • 创建组

      [root@ccc ~]# groupadd gg1  # 创建基本组,不指定GID
      [root@ccc ~]# tail -1 /etc/group
      gg1:x:1001:
      [root@ccc ~]# groupadd -g 6666 gg2  # 指定GID为6666
      [root@ccc ~]# tail -1 /etc/group
      gg2:x:6666:
      [root@ccc ~]# groupadd -r gg3  # 创建系统组,GID范围201~999
      [root@ccc ~]# tail -1 /etc/group
      gg3:x:995:
      
    • 修改组(-g:修改GID -n:修改组名称)

      [root@ccc ~]# groupadd nice  # 新建组nice
      [root@ccc ~]# tail -1 /etc/group
      nice:x:1001:
      [root@ccc ~]# groupmod -g 6666 nice  # 将组nice的GID改为6666
      [root@ccc ~]# tail -1 /etc/group
      nice:x:6666:
      [root@ccc ~]# groupmod -n NICE nice  # 将组nice名称修改为NICE
      [root@ccc ~]# tail -1 /etc/group
      NICE:x:6666:
      
    • 删除组

      # 当一个组作为某一个用户的主组时,该组不能被删除
      # 删掉用户会默认一起删掉与用户同时创立的同名主组
      
      # 创建用户cjx
      [root@ccc ~]# useradd cjx
      # 创建组liuliuliu
      [root@ccc ~]# groupadd liuliuliu 
      # 将liuliuliu作为用户cjx的附加组
      [root@ccc ~]# usermod -G liuliuliu cjx 
      # 查看用户cjx的信息,此时有liuliuliu附加组
      [root@ccc ~]# id cjx 
      uid=1001(cjx) gid=1001(cjx) 组=1001(cjx),1002(liuliuliu)
      # 删除组liuliuliu,成功
      [root@ccc ~]# groupdel liuliuliu
      # 查看用户cjx的信息,此时liuliuliu附加组被删除
      [root@ccc ~]# id cjx  
      uid=1001(cjx) gid=1001(cjx) 组=1001(cjx)
      # 无法删除组cjx,因为组cjx是用户cjx的主组
      [root@ccc ~]# groupdel cjx 
      groupdel:不能移除用户“cjx”的主组
      
    • 组成员管理

      组的分类:

      ①主组(基本组),用户只能有一个基本组,创建时可通过-g指定,未指定则创建一个与用户同名的默认组

      ②附加组,用户可以属于多个附加组,加入一个组后就拥有该组的权限

      # gpasswd针对已存在的用户,将用户添加到组或从组中删除
      # 组长可以往组里增加或删除用户
      [root@ccc ~]# useradd user01
      [root@ccc ~]# useradd user02
      [root@ccc ~]# useradd user03
      [root@ccc ~]# useradd user04
      [root@ccc ~]# useradd user05
      [root@ccc ~]# groupadd it
      [root@ccc ~]# gpasswd -M user01,user02,user03 it  # 给010203添加附加组it
      [root@ccc ~]# id user01
      uid=1001(user01) gid=1001(user01) 组=1001(user01),1006(it)
      [root@ccc ~]# id user02
      uid=1002(user02) gid=1002(user02) 组=1002(user02),1006(it)
      [root@ccc ~]# id user03
      uid=1003(user03) gid=1003(user03) 组=1003(user03),1006(it)
      [root@ccc ~]# gpasswd -A user01 it  # 指定01为it组组长
      [root@ccc ~]# su - user01
      [user01@ccc ~]$ gpasswd -a user04 it
      正在将用户“user04”加入到“it”组中
      [user01@ccc ~]$ exit
      登出
      [root@ccc ~]# id user04
      uid=1004(user04) gid=1004(user04) 组=1004(user04),1006(it)
      [root@ccc ~]# su - user02
      [user02@ccc ~]$ gpasswd -a user05 it
      gpasswd:没有权限。
      [user02@ccc ~]$ exit
      登出
      [root@ccc ~]# gpasswd -d user04 it
      正在将用户“user04”从“it”组中删除
      [root@ccc ~]# id user04
      uid=1004(user04) gid=1004(user04) 组=1004(user04)
      [root@ccc ~]# su - user01
      上一次登录:三 10月 28 16:49:23 CST 2020pts/1 上
      [user01@ccc ~]$ gpasswd -d user02 it
      正在将用户“user02”从“it”组中删除
      [user01@ccc ~]$ gpasswd -d user03 it
      正在将用户“user03”从“it”组中删除
      [user01@ccc ~]$ exit
      登出
      [root@ccc ~]# id user02
      uid=1002(user02) gid=1002(user02) 组=1002(user02)
      [root@ccc ~]# id user03
      uid=1003(user03) gid=1003(user03) 组=1003(user03)
      [root@ccc ~]# id user04
      uid=1004(user04) gid=1004(user04) 组=1004(user04)
      [root@ccc ~]# id user05
      uid=1005(user05) gid=1005(user05) 组=1005(user05)
      [root@ccc ~]# su - user01
      上一次登录:三 10月 28 16:53:48 CST 2020pts/1 上
      [user01@ccc ~]$ gpasswd -d user01 it
      正在将用户“user01”从“it”组中删除
      [user01@ccc ~]$ exit
      登出
      [root@ccc ~]# id user01
      uid=1001(user01) gid=1001(user01) 组=1001(user01)
      

      为组设置密码,可以让非组成员的用户通过命令"newgrp 组"临时切换到组内

      以输入密码的方式获取该用户组的权限和特性

      # 创建一个对/mnt/a.py有w权限的且有密码的组group1
      [root@ccc ~]# groupadd group1
      [root@ccc ~]# gpasswd group1
      正在修改 group1 组的密码
      新密码:
      请重新输入新密码:
      [root@ccc ~]# touch /mnt/a.py
      [root@ccc ~]# ll /mnt/a.py 
      -rw-r--r-- 1 root root 0 10月 28 21:00 /mnt/a.py
      [root@ccc ~]# chown .group1 /mnt/a.py 
      [root@ccc ~]# !ll
      ll /mnt/a.py 
      -rw-r--r-- 1 root group1 0 10月 28 21:00 /mnt/a.py
      [root@ccc ~]# chmod g+w /mnt/a.py 
      [root@ccc ~]# ll /mnt/a.py 
      -rw-rw-r-- 1 root group1 0 10月 28 21:00 /mnt/a.py
      # 切换到一个对/mnt/a.py是其他用户的zzz用户,来修改a.py
      [root@ccc ~]# su - zzz
      上一次登录:一 10月 26 16:07:44 CST 2020pts/1 上
      [zzz@ccc ~]$ echo 520 >> /mnt/a.py 
      -bash: /mnt/a.py: 权限不够
      [zzz@ccc ~]$ newgrp group1  # 临时切换到组group1下,拥有其权限
      密码:
      [zzz@ccc ~]$ echo 520 >> /mnt/a.py 
      [zzz@ccc ~]$ cat /mnt/a.py 
      520
      [zzz@ccc ~]$ exit  # 第一次exit是退出组group1
      exit
      [zzz@ccc ~]$ exit  # 第二次exit才是退出用户登录
      登出
      [root@ccc ~]# 
      

    10.1.5 手动创建用户

    • 准备用户信息(/etc/passwd /etc/shadow)

      [root@ccc ~]# vim /etc/passwd  # 用户名底下新增一行(内容如下)
      [root@ccc ~]# tail -1 /etc/passwd
      cjx:x:5200:5200::/home/cjx:/bin/bash
      [root@ccc ~]# openssl passwd -1 -salt 'cjxcjxcjx'  # 手动制作密码
      Password: 
      $1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/
      [root@ccc ~]# vim /etc/shadow  # 用户密码新增如下一行
      [root@ccc ~]# tail -1 /etc/shadow
      cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
      
    • 准备组信息(/etc/group /etc/gshadow)

      [root@ccc ~]# vim /etc/group  # 组名新增如下一行
      [root@ccc ~]# tail -1 /etc/group
      cjx:x:1001:
      [root@ccc ~]# vim /etc/gshadow  # 组密码新增如下一行
      [root@ccc ~]# tail -1 /etc/gshadow
      cjx:!::
      
    • 准备家目录(/home/xxx 模板/etc/skel)

      [root@ccc ~]# mkdir /home/cjx  # 新建家目录文件夹
      [root@ccc ~]# cp -r /etc/skel/.[!.]* /home/cjx/  # 将模板文件复制过来
      [root@ccc ~]# chmod 700 /home/cjx/  # 更改/home/cjx权限
      [root@ccc ~]# chown -R cjx.cjx /home/cjx/  # 更改/home/cjx的属主属组
      [root@ccc ~]# ll -a /home/cjx/
      总用量 12
      drwx------  2 cjx  cjx   62 10月 28 21:26 .
      drwxr-xr-x. 4 root root  28 10月 28 21:26 ..
      -rw-r--r--  1 cjx  cjx   18 10月 28 21:26 .bash_logout
      -rw-r--r--  1 cjx  cjx  193 10月 28 21:26 .bash_profile
      -rw-r--r--  1 cjx  cjx  231 10月 28 21:26 .bashrc
      
    • 准备邮箱(/var/spool/mail/xxx)

      [root@ccc ~]# touch /var/spool/mail/cjx
      [root@ccc ~]# chown 660 !$  # 更改权限
      chown 660 /var/spool/mail/cjx
      [root@ccc ~]# chown cjx.mail /var/spool/mail/cjx   # 更改属主属组
      [root@ccc ~]# ll /var/spool/mail/
      总用量 0
      -rw-rw---- 1 cjx mail 0 10月 28 21:29 cjx
      
  • 相关阅读:
    用c#开发微信 (7) 微渠道
    Swift语言精要
    Android开发点滴
    UITableViewAutomaticDimension
    iOS中ActionSheet和Alert的区别
    本博客申明
    iOS中重用UITableView单元格时,千万别忘了这个
    Swift 2 语言精要
    Objective-C中NSString与int和float的相互转换
    Android Studio常用快捷键
  • 原文地址:https://www.cnblogs.com/caojiaxin/p/13893783.html
Copyright © 2011-2022 走看看