zoukankan      html  css  js  c++  java
  • 🍖权限管理之用户与用户组

    一.用户概述

    1.什么是用户

    • 用户是操作系统提供的一种安全机制
    • 用户是权限的化身
    • 要使用操作系统必须事先输入正确的用户名与密码

    2.为什么要创建用户, 有什么用

    • 划分权限, 增强安全性

    • 系统上的每一个进程(运行的程序),都需要一个特定的用户运行

    3.如何查看一个用户及用户的权限

    #查看当前用户
    [root@shawn ~]# id
    uid=0(root) gid=0(root) 组=0(root)
    
    #查看 "shawn" 用户
    [root@shawn ~]# id shawn
    uid=1000(shawn) gid=1000(shawn) 组=1000(shawn)
    
    #查看当前用户名字
    [root@shawn ~]# whoami
    root
     
    #查看所有用户
    [root@shawn ~]# who
    root     tty1         2020-10-26 13:58
    root     pts/0        2020-10-27 21:11 (192.168.12.179)
    
    #查看"ssh"进程,可以发现都对应着一个用户
    [root@shawn ~]# ps aux |grep "[s]sh"
    root       1181  0.0  0.0 105996   312 ?        Ss   01:42   0:00 /usr/sbin/sshd -D
    root      55197  0.0  0.5 148316  5380 ?        Ss   21:11   0:00 sshd: root@pts/0
    

    4.Linux中用户角色的划分

    • Linux中分为 管理员用户与 普通用户
    • 管理员用户拥有最高权限
    • 其他用户根据管理员的分配拥有不同的权限

    5.UIDGID

    • Linux系统通过UIDGID识别用户角色
    • 那些用户账户(比如shawn), 其实都是给我们人看的,方便我们
    • Linux系统能识别的仅仅是UIDGID这样的数字
    • UID (User Identify)
    用户ID, 在系统中是唯一,唯一标识一个系统用户的帐号
    "UID"相当于一个人的身份证,用户名就相当于这个人的名字
    
    • GID (Group Identify)
    组ID, 如果把一个操作系统当成一家公司,uid相当于这个人的员工号,"GID"相当于他的部门编号
    
    • CentOS 7 系统约定
    0          #超级管理员, 权限最高, 但风险也很大
    1~200      #系统用户,用来运行系统自带的进程,默认已创建
    201~999    #系统用户,用来运行安装的程序,所以此类用户无需登录系统
    1000以后   #普通用户,正常可以登录系统的用户,权限比较小,能执行的任务有限
    
    • 用户和用户组的关系
    主组 : 用户本身所在的部门
    附加组 : 为用户添加的部门
    
    一对一 :  一个用户可以属于一个组,用户默认就在自己的主组下
    多对一 :  多个用户在同一个组
    一对多 :  一个用户可以属于多个组,用户只有一个主组,但可以为用户添加多个附加组
    多对多 :  多个用户可以属于多个组
    

    5.超级用户

    • 默认是 root 用户
    • UIDGID都为0
    • root用户在每台unix/ linux操作系统中都是唯一且真实存在的
    • 通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限

    6.文件权限分类

    • linux系统把文件的权限分为了三类
    1、属主对应的权限
    2、属组对应的权限
    3、其他对应的权限
    
    • 一个用户对文件的权限扫描的优先级
    1、先看该用户是否是文件的属主
    2、在1失败的情况,再看该用户是否是文件的属组
    3、在2失败的情况,该用户属于其他人权限
    

    二.用户管理命令

    1.用户与组相关的文件

    • /etc/passwd : 用户文件
    • /etc/shadow : 用户密码文件
    • /etc/group : 组文件
    • /etc/gshadow : 组密码文件
    • /etc/skel : 用户老家模板目录
    • /var/spool/mail/xxx : 用户邮箱文件
    • /home/xxx : 用户家目录

    2.用户文件及组文件对应解释

    3.手动创建用户

    手动添加用户:https://www.cnblogs.com/songhaixing/p/13893637.html

    3.useradd : 添加用户

    添加用户
    [root@shawn ~]# useradd xing
    
    查看用户
    [root@shawn ~]# id xing
    uid=1003(xing) gid=1003(xing) 组=1003(xing)
    
    查看所有登入的用户信息
    [root@shawn ~]# who
    
    查看当前登入的用户名
    [root@shawn ~]# whoami
    

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

    • 常用选项

    选项 功能
    -u 指定用户的UID
    -g 指定用户所属的主组
    -G 指定用户所属的附加组
    -d 指定用户的家目录
    -c 指定用户的备注信息
    -s 指定用户所用的shell
    -e 修改过期时间
    -M 不创建家目录
    -r 创建系统用户, uid1000以内,默认没有家目录
    • 示例
    先搞个组做实验,创建一个用户并指定"UID",指定主组"xing1"
    [root@shawn ~]# groupadd xing1
    [root@shawn ~]# groupadd xing2
    [root@shawn ~]# useradd -u 1111 -g xing1 song1
    [root@shawn ~]# id song1
    uid=1111(song1) gid=1000(xing1) 组=1000(xing1)
    
    创建"song2"指定家目录
    [root@shawn ~]# useradd song2 -d /home/SONG2 
    
    创建"song3"不创建家目录
    [root@shawn ~]# useradd song3 -M
    
    创建"song4"指定Shell
    [root@shawn ~]# useradd song4 -s /sbin/nologin
    
    创建"song2\5"指定附属组
    [root@shawn ~]# useradd song5 -G xing1
    [root@shawn ~]# id song5
    uid=1115(song5) gid=1115(song5) 组=1115(song5),1000(xing1)
    
    创建"song6"指过期时间
    [root@shawn ~]# useradd song6 -e 2022-12-12
    
    创建系统用户"song7",Uid在1000以内
    [root@shawn ~]# useradd -r song7
    [root@shawn ~]# id song7
    uid=997(song7) gid=995(song7) 组=995(song7)
    

    4.usermod : 修改用户信息

    • 常用选项

    与 useradd 选项基本一致, 但这是修改

    选项 功能
    -u 指定修改用户的UID
    -g 指定修改用户的主组
    -G 指定修改用户附属组,使用逗号分隔多个附属组,覆盖原有的附属组
    -a 与 "-G"连用, 让其变成追加附加组,而不是覆盖
    -d 指定修改用户家目录
    -c 指定修改用户注释信息
    -s 指定修改用户的 Bash Shell
    • 示例
    将用户"song1"的主组由"xing1"改成"xing2"
    [root@shawn ~]# usermod -g xing2 song1
    [root@shawn ~]# id song1
    uid=1111(song1) gid=1117(xing2) 组=1117(xing2)
    
    用户"song1"追加一个附加组"xing1","-a"表示追加,没有"-a"则是覆盖
    [root@shawn ~]# usermod -a -G xing1 song1
    [root@shawn ~]# id song1
    uid=1111(song1) gid=1117(xing2) 组=1117(xing2),1000(xing1)
    
    修改用户"song1"的过期时间
    [root@shawn ~]# usermod -e 2044-12-12 song1
    
    • 其他参数

    选项 功能
    -l 指定修改用户的登入名
    -L 指定要锁定的用户
    -U 指定要解锁的用户
    • 演示
    为用户设置密码
    交互式
    [root@shawn ~]# passwd song1
    更改用户 song1 的密码 。
    新的 密码:
    无效的密码: 密码少于 8 个字符
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。
    非交互式
    [root@shawn ~]# echo "123" | passwd song1 --stdin
    
    "-l"修改用户登入名
    [root@shawn ~]# usermod -l SONG1 song1
    [root@shawn ~]# id SONG1
    uid=1111(SONG1) gid=1117(xing2) 组=1117(xing2),1000(xing1)
    
    "-L"锁定用户
    [root@shawn ~]# usermod -L SONG1
    [root@shawn ~]# exit
    #使用用户"SONG1"进行登入
    '''
    shawn login: SONG1
    Password:   #输入了正确的密码
    Login incorrect  #显示登入不正确
    '''
    
    "-U"解锁用户
    [root@shawn ~]# usermod -U SONG1
    [root@shawn ~]# exit
    #再次使用"SONG1"用户登入
    '''
    shawn login: SONG1
    Password:   #输入了正确的密码
    Last failed login: Thu OCt 29.........
    [SONG1@shawn ~]$   #登入成功了
    '''
    

    5.userdel : 删除用户

    删除用户, 但不删除用户家目录和"mail"
    [root@shawn ~]# userdel xing
    
    "-r" 可以彻底删除
    [root@shawn ~]# userdel -r xing
    

    三.组管理命令

    1.groupadd : 创建组

    • 常用选项
    选项 功能
    -g 指定GID
    -r 创建系统组
    • 示例
    创建基本组,不指定GID,会自动帮你设置一个
    [root@shawn ~]# groupadd xing1
    [root@shawn ~]# tail -1 /etc/group
    xing1:x:1003:
    
    指定GID
    [root@shawn ~]# groupadd -g 4444 xing2
    [root@shawn ~]# tail -1 /etc/group
    xing2:x:4444:
    
    创建系统组,GID在1000以内
    [root@shawn ~]# groupadd -r xing3
    [root@shawn ~]# tail -1 /etc/group
    xing3:x:995:
    

    2.groupmod : 修改组

    • 常用参数
    选项 功能
    -g 修改成指定的GID
    -n 修改组名称
    • 示例
    将"xing1"的GID改成"5555"
    [root@shawn ~]# groupmod -g 5555 xing1
    [root@shawn ~]# tail -3 /etc/group
    xing1:x:5555:
    xing2:x:4444:
    xing3:x:995:
    
    修改组名
    [root@shawn ~]# groupmod -n new_xing3 xing3
    [root@shawn ~]# tail -1 /etc/group
    new_xing3:x:995:
    

    3.groupdel : 删除组

    • 如果一个组是一个用户的主组的话, 那么该组不能被删除
    • 删掉用户会默认一起删掉它的主组
    • 能删掉的只能是不是任何用户主组的组
    先查看一下"start"的信息
    [root@shawn ~]# id start
    uid=1002(start) gid=1002(start) 组=1002(start)
    
    指定追加一个组"xing1"(之前创建的),然后查看一下
    [root@shawn ~]# usermod -a -G xing1 start
    [root@shawn ~]# id start
    uid=1002(start) gid=1002(start) 组=1002(start),5555(xing1)
    
    删掉这个组"xing1",再查看发现没有了
    [root@shawn ~]# groupdel xing1
    [root@shawn ~]# id start
    uid=1002(start) gid=1002(start) 组=1002(start)
    
    当删除主组"start"的时候会提示失败
    [root@shawn ~]# groupdel start
    groupdel:不能移除用户“start”的主组
    

    四.组成员管理命令

    1.组的分类

    • 一类是基本组或称主组,用户只能有一个基本组,创建时可通过 -g 指定,如未指定则创建一个默认的组(与用户同名)
    • 二是附加组,基本组不能满足授权要求时,可以创建附加组,将用户加入该组,用户可以属于多个附加组,加入一个组后就拥有了该组的权限

    2.gpasswd : 设置组密码及对用户和组的操作

    • 常用选项
    选项 功能
    -a 将某个用户加入到某个组
    -M 将多个用户加入到一个组
    -A 将某个用户设为某个组的组长,那么也有了增和删成员的权限
    -d 将用户从组中删除
    • 示例
    首先创建一个组"xing1"
    [root@shawn ~]# groupadd -g 5555 xing1
    [root@shawn ~]# tail -1 /etc/group
    xing1:x:5555:
    
    "-a"将用户"song"加入到组"xing1"中
    [root@shawn ~]# gpasswd -a song xing1
    正在将用户“song”加入到“xing1”组中#这是Xshell的中文提示
    
    "-M"将多个用户"shawn","start"将入到组"xing1"中
    [root@shawn ~]# gpasswd -M shawn,start xing1
    
    "-A"将用户"start"设置为这个组的组长
    [root@shawn ~]# gpasswd -A start xing1
    
    查看"xing1"这个组的成员,第三段参数为组长
    [root@shawn ~]# grep 'xing1' /etc/gshadow
    xing1:!:start:song,shawn,start
    
    "-d"将用户"song"从组"xing1"中删除
    [root@shawn ~]# gpasswd -d song xing1
    正在将用户“song”从“xing1”组中删除
    
    再次查看组成员,可以发现没有用户"song"
    [root@shawn ~]# grep 'xing1' /etc/gshadow
    xing1:!:start:shawn,start
    
    • 设置密码
    我们可以为组设置密码,然后让非组用户通过命令"newgrp [组名]"临时切换到组内
    并以输入密码的方式获取用户组的权限和特性
    
    先为组"xing1"设置一个密码
    [root@shawn ~]# gpasswd xing1
    正在修改 xing1 组的密码
    新密码:                #输入密码
    请重新输入新密码:       #确认密码
    

    3.newgrp : 切换主组

    • 语法
    # newgrp [组名]
    
    • 创建一个文件
    首先我们制作一个文件"a.txt"
    属主"root", 属组"xing1"
    属主和属组对文件都可读可写
    那么你想要修改只能是root或者组员
    
    创建一个"a.txt",并查看其信息
    [root@shawn ~]# touch /tmp/a.txt
    [root@shawn ~]# ll !$
    ll /tmp/a.txt
    -rw-r--r-- 1 root root 0 10月 28 23:40 /tmp/a.txt
        
    将属组改为组"xing1",并查看
    [root@shawn ~]# chown root.xing1 /tmp/a.txt 
    [root@shawn ~]# ll !$
    ll /tmp/a.txt
    -rw-r--r-- 1 root xing1 0 10月 28 23:40 /tmp/a.txt
    
    将属组对文件权限改为可读可写,并查看信息
    [root@shawn ~]# chmod 664 !$
    chmod 664 /tmp/a.txt
    [root@shawn ~]# ll !$
    ll /tmp/a.txt
    -rw-rw-r-- 1 root xing1 0 10月 28 23:40 /tmp/a.txt
    
    • 切换用户操作文件
    将用户切换到"song",并对文件进行写操作
    [root@shawn ~]# su song
    [song@shawn root]$ echo "I am song" >> /tmp/a.txt 
    bash: /tmp/a.txt: 权限不够
            
    可以发现权限不够,使用"newgrp"临时加入到组"xing1"中
    [song@shawn root]$ newgrp xing1
    密码:        #输入之前设置的密码
    
    再对文件进行写操作,查看发现可以写进去
    [song@shawn root]$ echo "I am song" >> /tmp/a.txt 
    [song@shawn root]$ cat /tmp/a.txt 
    I am song
    
    "exit"可退出临时的组,退出后再进行写操作就不行了
    [song@shawn root]$ exit
    exit
    [song@shawn root]$ echo "I am song" >> /tmp/a.txt 
    bash: /tmp/a.txt: 权限不够
    
  • 相关阅读:
    Linux下的内核测试工具——perf使用简介
    浅谈C++中指针和引用的区别
    成为Java顶尖程序员 ,看这11本书就够了
    spring注解详解
    Spring AOP详解和实现方式
    Spring IoC中各个注解的理解和使用
    NameNode配置HA后及其反过程Hive路径不正确的问题解决
    [maven] 常用插件解析
    Saiku3.15去除License与主界面
    saiku系列文章
  • 原文地址:https://www.cnblogs.com/songhaixing/p/13895282.html
Copyright © 2011-2022 走看看