• Linux


    Linux - 权限管理(用户组管理)

    一:Linux用户介绍

     

    1.什么是用户?

    用户对硬件资源的操作都需要通过操作系统,比如用户要读取硬盘中的一份关键数据
    出于安全考虑,操作系统的开发者们都专门开发了安全机制,要使用操作系统必须事先输入`正确的用户名与密
    码`
    这便是用户的由来

     

    2.为何要创建用户?

     

    主要是因为权限问题

    • 系统上的每一个进程,都需要一个特定的用户运行,一个用户拥有特定的权限,该用户运行的进程与用户权限一致
    • 通常在公司是使用普通用户管理服务器,因为root权限过大,容易出问题
     

    3.如何查看用户相关信息?

    # 查看当前用户
    [root@localhost ~]# id
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    
    
    # 查看当前用户是谁
    [root@localhost ~]# whoami
    root
    
    # 查看darker用户
    [root@localhost ~]# id darker
    
    
    # 查看所有登录的用户
    [root@localhost ~]# who
    root     pts/0        2020-11-24 15:38 (192.168.50.1)
    
    
    # 每一个进程都有其用户
    [root@localhost ~]# ps aux | grep [s]sh
    root       1103  0.0  0.3  83040  3656 ?        Ss   15:38   0:00 /usr/sbin/sshd -D
    root       2242  0.0  0.5 141268  5296 ?        Ss   15:38   0:00 sshd: root@pts/0

    4.Linux系统中用户角色划分

     

    在Linux系统中的用户分为管理员用户与其他用户

    • 管理员用户拥有最高权限
    • 其他用户根据管理员的分配拥有不同的权限

    对于Linux系统来说,用户的角色是通过UIDGID识别的

    用户系统帐号的名称(如darker)其实给人(管理员)看的

    Linux系统能够识别的仅仅是UID和GID这样的数字

     

    UID 与 GID

    • UID (User Identify)用户ID

    唯一标识一个系统用户的帐号,uid在系统中是唯一的

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

    • GID (Group Identify)组ID

    如果把一个操作系统当成一家公司,uid相当于这个人的员工号,gid相当于他的部门编号

     

    Centos7系统之前约定

    UID角色备注
    0 超级用户
    具备超级用户权限的用户创建的用户
     
    1 - 499 系统虚拟用户 UID范围1-499,存在满足文件或服务启动的需要
    一般不能登录,只是傀儡
    500 - 65535 普通用户  
     

    Centos7系统约定

    UID角色备注
    0 超级管理员 最高权限,有着极强的破坏能力
    1 - 200 系统用户 用来运行系统自带的进程,默认已创建
    201 - 999 系统用户 用来运行安装的程序,所以此类用户无需登录系统
    1000+ 普通用户 正常可以登录系统的用户,权限比较小,能执行的任务有限
     

    用户和组的关系

    • 一对一
    • 一对多
    • 多对一
    • 多对多
     

    5.超级用户

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

    root用户在每台Unix/Linux操作系统中都是唯一且真实存在的

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

     

    举个例子

    对象相当于
    操作系统 1个国家
    root用户 国王
    root用户的家目录 皇宫
     

    注意点

    • 在生产环境中,一般会禁止root帐号通过SSH远程连接服务器(保护好皇帝),当然,也会更改默认 的SSH端口(保护好皇宫),以加强系统安全。
    • 企业工作中:没有特殊需求,应该尽量不要登录root用户进行操作,应该在普通用户下操作任务,然后 用sudo管理普通用户的权限,可以细到每个命令权限分配。
    • 在Linux系统中,uid为0的用户就是超级用户。但是通常不这么做,如果确实有必要在某一操作上用到 管理的权限的话,那就用sudo单独授权,也不要直接用uid为0的用户
     

    6.扩展

     

    Linux与Windows

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

    多用户不是说可以创建多个用户,而是指一次可以登录多个用户

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

     

    Linux发展史

    Multics -> Unix -> Linux

    所以Linux是多用户的,天然支持多个连机终端,连机终端在没有互联网的情况下是有意义的

    多个人可以用不同的连机终端连到一台机器/服务器上使用,而有了互联网之后

    多个人可通过网络访问服务器,这个时候多用户or单用户的概念就不再那么重要

     

    二:用户 与 组 相关文件

     

    和用户、组相关的文件

     

    /etc/passwd

    [root@localhost ~]# head -1 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    :为分隔符号,分成7部分
    组成内容释义
    第1部分 root 用户名/登录名
    第2部分 x 口令,x表示密码占位符
    其实密码已经被映射到/etc/shadow文件中
    第3部分 0 UID
    第4部分 0 GID
    第5部分 root 描述信息(可选)
    第6部分 /root 用户的家目录所在的位置
    第7部分 /bin/bash 用户所用的shell类型
     

    /etc/shadow

    [root@localhost ~]# head -1 /etc/shadow
    root:$6$Jvw3z/jmU1ASO4P1$vpTJ5OGEtfBOmIpjyK55k87iQPHXCC3.kKOFW9jkyslqC2DMdN7SZdT/zYRfmQ4hBAQXG6CQ4kKdRQ8eFqChf.::0:99999:7:::

    :为分隔符号,分成9部分

    组成内容释义
    第1部分 root 用户名/登录名
    第2部分 $6$Jvw3z/j... 密码的匿文,!!表示没有密码
    第3部分   最近一次变更密码:距离1970年1月1日过去了几天
    第4部分 0 密码最短使用天数:0表示无限制
    第5部分 99999 密码最长使用天数:99999表示无限制
    第6部分 7 密码过期预警天数
    第7部分   密码过期的宽恕时间:
    密码过期后如果没有修改密码,用户还可以使用的天数
    第8部分   账号失效日期:过了这个日期,该账号就无法使用了
    第9部分   保留字段,未被使用(便于后期的功能添加)
     

    各部分详解

    • 第1部分

    用户名(也被称为登录名)

    /etc/shadow中,用户名和/etc/passwd 是相同的

    这样就把passwd和shadow中用的用户记录联系在一起

    这个字段是非空的

    • 第2部分

    密码(已被加密)

    如果有些用户在这段是x,表示这个用户不能登录到系统

    这个字段是非空的

    • 第3部分

    上次修改口令的时间

    这个时间是从1970年1 月1日算起到最近一次修改口令的时间间隔(天数)

    可以通过passwd来修改用户的密码,然后查看/etc/shadow中此字段的变化

    • 第4部分

    两次修改口令间隔最少的天数

    如果设置为0:则 禁用此功能,也就是说用户必须经过多少天才能修改其口 令

    默认值是通 过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义

    • 第5部分

    两次修改口令间隔最多的天数

    这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性

    如果是系统默认值,是在添加用户时由/etc/login.defs 文件定义中获取,PASS_MAX_DAYS中定义

    • 第6部分

    提前多少天警告用户口令将过期

    当用户登录系统后,系统登录程序提醒用户口令将要作废

    如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE中定义

    • 第7部分

    在口令过期之后多少天禁用此用户

    此字段表示 用户口令作废多少天后,系统会禁用此用户

    也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用

    • 第8部分

    用户过期日期

    此字段指定了用户作废的天数(从1970年的1月1日开始的天数)

    如果这个字段的值为,帐号永久可用

    • 第9部分

    保留字段

    目前为空,以备将来Linux发展之用

     

    /etc/group

    [root@localhost ~]# head -1 /etc/group
    root:x:0:
    组成内容释义
    第1部分 root 用户组的名称
    第2部分 x 用户组的密码占位符
    第3部分 0 用户组的id(也就是GID)
    第4部分   显示该用户组作为哪个用户附加组,用,隔开

    /etc/gshadow

    [root@localhost ~]# head -1 /etc/gshadow
    root:::
    组成内容释义
    第1部分 root 用户组的名称
    第2部分   用户组密码,该字段可以为!
    表示没有密码
    第3部分   用户组管理者,该字段可以为
    如果有多个用户组管理者,用,隔开
    第4部分   显示该用户组作为哪个用户附加组,用,隔开
     

    /etc/skel

    用户老家的目录

     

    /home/用户名

    普通用户的家目录

     

    /var/spool/mail/用户名

    用户的邮箱文件

     

    三:用户管理命令

     

    1.创建用户

    # 创建用户:darker
    [root@localhost ~]# useradd darker

    2.查看用户

    # 查看用户:darker
    [root@localhost ~]# id darker
    uid=1000(darker) gid=1000(darker) groups=1000(darker)
    
    
    # 查看所有登录的用户信息
    [root@localhost ~]# who 
    
    
    # 查看当前登录的用户名
    [root@localhost ~]# whoami 
    
    
    # 查看系统内置用户
    [root@localhost ~]# vim /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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:997:995:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    darker:x:1000:1000::/home/darker:/bin/bash

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

    查看系统内置用户时,用户名后面的x密码的占位符

     

    3.删除用户

    # 删除用户user1,但不删除用户家目录和mail
    [root@localhost ~]# userdel user1 
    
    
    # 要想删彻底,加-r选项
    [root@localhost ~]# userdel -r user1 

    4.useradd命令详解:创建用户的同时指定选项

     

    useradd命令的常用选项

    选项作用
    -u 指定用户的UID
    -g 指定用户所属的主群
    -G 指定用户所属的附加群
    -d 指定用户的家目录
    -c 指定用户的备注信息
    -s 指定用户所用的shell
    -e 修改过期时间
    -M 不创建家目录
    -r 创建系统账户,uid处于系统用户范围内,默认就没有家目录
    不允许登录服务器
     

    灵活应用useradd命令的举例

    # 在系统中新增一个 turtle 用户
    [root@localhost ~]# adduser turtle
    
    
    # 在系统中新增一个用户user01,属组为police以及uid为600的命令
    [root@localhost ~]# useradd –u 600 –g police user01

    测试

    # 创建用户usr01
    [root@localhost ~]# useradd user01
    
    
    # 创建用户usr02,指定uid
    [root@localhost ~]# useradd user02 -u 503 
    
    
    # 创建用户user03 指定家目录
    [root@localhost ~]# useradd user03 -d /aaa 
    
    
    # 创建用户user04,不创建家目录
    [root@localhost ~]# useradd user04 -M 
    
    
    # 创建用户并指定shell
    [root@localhost ~]# useradd user05 -s /sbin/nologin 
    
    
    # 创建用户,指定主组
    [root@localhost ~]# useradd user06 -g hr 
    
    
    # 创建用户,指定附加组
    [root@localhost ~]# useradd user07 -G sale 
    
    
    # 创建用户,指定过期时间
    [root@localhost ~]# useradd user08 -e 2021-04-01 
    
    
    # 创建用户,不能登录系统
    [root@localhost ~]# useradd user10 -u 4000 -s /sbin/nologin
    
    
    # 创建普通用户,但是没有家目录,不能登录系统
    [root@localhost ~]# useradd xxx -M -s /sbin/nologin 
    
    
    # yyy属于系统用户,uid处于系统用户uid范围内
    [root@localhost ~]# useradd -r yyy -s /sbin/nologin 

    4.usermod命令

    同useradd参数基一致,只不过useradd是添加usermod是修改

    选项作用
    -u 指定要修改用户的UID
    -g 指定要修改用户基本组
    -a 将用户添加到补充组。仅与-G选项一起使用
    -G 指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组
    -d 指定要修改用户家目录
    -c 指定要修改用户注释信息
    -s 指定要修改用户的bash shell
    -m 将用户主目录的内容移动到新位置
    如果当前主目录不存在,则不会创建新的主目录
    -l 指定要修改用户的登陆名
    -L 指定要锁定的用户
    -U 指定要解锁的用户
    # 修改darker用户的过期时间
    [root@localhost ~]# usermod -e 2021-02-11 darker
    
    
    # 修改darker用户的主组
    [root@localhost ~]# usermod -g group1 darker
    
    
    # 修改darker用户的附加组,-a添加,不加-a代表覆盖
    [root@localhost ~]# usermod -a -G group2 darker

    6.设定 与 修改密码

    # 默认给当前用户设定密码
    [root@localhost ~]# passwd
    Changing password for user root.
    New password:
    Retype new password: 
    passwd: a;; authentication tokens updated successfully.
    
    
    #  root用户可以给自己以及所有其他用户设定密码,普通用户只能设定自己的密码
    [root@localhost ~]# passwd 用户名
    
    
    # 非交互式
    [root@localhost ~]# echo "密码" | passwd --stdin 用户名
    
    
    # 补充:可以利用系统内置变量生成随机字符串来充当密码
    [root@localhost ~]# echo $RANDOM|md5sum|cut -c 1-10
    70ba11a74b

    测试

     

    修改UID

    # 查看帮助信息 
    [root@localhost ~]# usermod --help
    
    
    # 添加用户darker
    [root@localhost ~]# useradd darker
    
    
    # 查看darker用户的信息
    [root@localhost ~]# grep 'darker' /etc/passwd
    darker:x:1000:1000::/home/darker:/bin/bash
    
    
    # 修改darker用户的UID
    [root@localhost ~]#  usermod -u 2000 darker
    
    
    # 修改darker用户为不允许登录
    [root@localhost ~]# usermod -s /sbin/nologin darker
    
    
    
    # 补充,-G在没有-a的情况下代表覆盖原有组
    
    # 把用户darker添加到组group1和group2
    [root@localhost ~]#  usermod -G group1,group2 darker
    
    # 把用户darker添加到组group3和group4中,此时group3,group4会覆盖掉之前添加的group1,group2
    [root@localhost ~]# usermod -G group3,group4 darker

    密码锁定、解锁

    # 创建用户ben
    [root@localhost ~]# useradd ben
    
    
    # 设置用户ben的密码
    [root@localhost ~]# passwd ben
    Changing password for user ben.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    
    # 查看用户ben的信息
    [root@localhost ~]# grep 'ben' /etc/shadow
    ben:$6$vjGsM8pS$pjrazHjiagz7oK8vpwzi53nAdg7DaaSlj8fneLxgKeH4wPiAyxJSO58iaRMTuG4LkHuz8Ohak6mR3Z4MYA.8U0:18590:0:99999:7:::
    
    # 锁住用户ben
    [root@localhost ~]# usermod -L ben
    
    
    # 再次查看用户ben的信息(比之前多了1个 ! )
    [root@localhost ~]# grep 'ben' /etc/shadow
    ben:!$6$vjGsM8pS$pjrazHjiagz7oK8vpwzi53nAdg7DaaSlj8fneLxgKeH4wPiAyxJSO58iaRMTuG4LkHuz8Ohak6mR3Z4MYA.8U0:18590:0:99999:7:::
    
    
    # 登录测试(已加锁的用户会显示:Permission denied)
    PS C:UsersDarker> ssh ben@192.168.50.101
    ben@192.168.50.101's password:
    Permission denied, please try again.
    
    
    # 解锁用户ben
    [root@localhost ~]# usermod -U ben
    
    
    # 再一次查看用户ben的信息
    [root@localhost ~]# grep 'ben' /etc/shadow
    ben:$6$vjGsM8pS$pjrazHjiagz7oK8vpwzi53nAdg7DaaSlj8fneLxgKeH4wPiAyxJSO58iaRMTuG4LkHuz8Ohak6mR3Z4MYA.8U0:18590:0:99999:7:::
    
    
    # 登录测试(此时用户ben已解锁,可以正常登录)
    PS C:UsersDarker> ssh ben@192.168.50.101
    ben@192.168.50.101's password:
    Last failed login: Tue Nov 24 18:09:36 CST 2020 from 192.168.50.1 on ssh:notty
    There was 1 failed login attempt since the last successful login.
    [ben@localhost ~]$

    设置账号过期

    # 查看当前时间
    [root@localhost ~]# date
    Tue Nov 24 18:12:48 CST 2020
    
    
    # 设置用户ben的过期时间
    [root@localhost ~]# usermod -e 2020-11-11 ben

    useradd 命令参考的文件

    # 设置用户帐号限制的文件
    /etc/login.defs
    
    
    # 可以使用命令 useradd -D查看
    /etc/default/useradd 
    
    
    # 用户的初始配置文件
    /etc/skel/* 

    扩展

    useradd创建用户时,对于未指定的选项(-u、-g等等),会以/etc/login.defs/etc/default/useradd两个配置文件中的配置作为参照物

     

    配置文件/etc/login.defs详解

    # 查看配置文件/etc/login.defs
    [root@localhost ~]#  grep -Ev "^#|^$" /etc/login.defs
    MAIL_DIR        /var/spool/mail
    PASS_MAX_DAYS   99999    # 密码最大有效期
    PASS_MIN_DAYS   0        # 两次修改密码的最小间隔时间
    PASS_MIN_LEN    5        # 密码最小长度,对于root无效
    PASS_WARN_AGE   7        # 密码过期前多少天开始提示
    UID_MIN         1000    # 用户ID的最小值
    UID_MAX         60000    # 用户ID的最大值
    SYS_UID_MIN     201        # 系统用户ID的最小值
    SYS_UID_MAX     999        # 系统用户ID的最大值
    GID_MIN         1000    # 组ID的最小值
    GID_MAX         60000    # 组ID的最大值
    SYS_GID_MIN     201        # 系统用户组ID的最小值
    SYS_GID_MAX     999        # 系统用户组ID的最大值
    CREATE_HOME     yes        # 使用useradd的时候是可以创建用户家目录
    UMASK           077        # 创建家目录时umask的默认控制权限
    USERGROUPS_ENAB yes        # 删除用户的时候是否同时删除用户组
    ENCRYPT_METHOD SHA512    # #密码加密规则

    配置文件/etc/default/useradd详解

    # 查看配置文件/etc/default/useradd
    [root@localhost ~]# cat /etc/default/useradd
    # useradd defaults file
    GROUP=100                # 依赖于/etc/login.defs的USERGRUUPS_ENAB参数,如果为no,则在此处控制
    
    HOME=/home                # #把用户的家目录建在/home中
    INACTIVE=-1                # 是否启用账号过期停权,-1表示不启用
    EXPIRE=                    # 账号终止日期,不设置表示不启用
    SHELL=/bin/bash            # #新用户默认所有的shell类型
    SKEL=/etc/skel            # 配置新用户家目录的默认文件存放路径
    CREATE_MAIL_SPOOL=yes    # 创建mail文件

    当使用useradd创建用户时,创建的用户家目录下会存在.bash_* 环境变量相关的文件,这些环境变量文件 默认从/etc/skel目录中拷贝

    这个默认拷贝环境变量位置是由/etc/default/useradd配置文件中定义的

     

    故障案例

    在当前用户家目录下执行了rm -rf .*命令,下次登录系统时出现-bash-4.1$,如何解决?

    -bash-4.1$ cp -a /etc/skel/.bash* ./
    -bash-4.1$ exit
    
    [root@localhost ~]#     # 重新连接即可恢复

    误删家目录的恢复方式

    # (终端1)查看家目录下有哪些用户
    [root@localhost ~]# ll /home/
    total 0
    drwx------. 2 ben    ben    59 Nov 24 05:30 ben
    drwx------. 2 darker darker 59 Nov 24 05:30 darker
    
    
    # (终端1)删除用户:ben
    [root@localhost ~]# rm -rf /home/ben/
    
    
    # (终端1)设置用户:ben 的密码
    [root@localhost ~]# passwd ben
    Changing password for user ben.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    
    
    # (终端1)在家目录下创建这个用户
    [root@localhost ~]# mkdir /home/ben
    
    
    # (终端2)远程连接
    PS C:UsersDarker> ssh ben@192.168.50.101
    ben@192.168.50.101's password:
    -bash-4.2$ pwd
    /home/ben
    -bash-4.2$ exit
    logout
    Connection to 192.168.50.101 closed.
    
    
    # (终端1)复制老家的文件到要恢复的用户目录
    [root@localhost ~]# cp -a /etc/skel/.bash* /home/ben/
    
    
    # (终端2)远程连接
    PS C:UsersDarker> ssh ben@192.168.50.101
    ben@192.168.50.101's password:
    Last login: Feb Nov 24 11:32 2020 from localhost

    四:组管理

     

    1.创建组

    # 创建基本组(不指定GID)
    [root@localhost ~]# groupadd mygroup01
    
    
    # 查看组信息
    [root@localhost ~]# tail -l /etc/group
    dbus:x:81:
    polkitd:x:995:
    dip:x:40:
    tss:x:59:
    postdrop:x:90:
    postfix:x:89:
    sshd:x:74:
    darker:x:1000:
    ben:x:1001:
    mygroup01:x:1002:    # 刚刚创建的组在这里
    
    
    # 创建基本组(指定GID为7777)
    [root@localhost ~]# groupadd -g 7777 mygroup02
    
    # 再次查看组信息
    [root@localhost ~]# tail -l /etc/group
    polkitd:x:995:
    dip:x:40:
    tss:x:59:
    postdrop:x:90:
    postfix:x:89:
    sshd:x:74:
    darker:x:1000:
    ben:x:1001:
    mygroup01:x:1002:
    mygroup02:x:7777:    # 刚刚创建的组在这里
    
    
    # 创建基本组(GID从201-999)
    [root@localhost ~]# groupadd -r mygroup03
    
    
    # 再一次查看组信息
    [root@localhost ~]# tail -l /etc/group
    dip:x:40:
    tss:x:59:
    postdrop:x:90:
    postfix:x:89:
    sshd:x:74:
    darker:x:1000:
    ben:x:1001:
    mygroup01:x:1002:
    mygroup02:x:7777:
    mygroup03:x:994:    # 刚刚创建的组在这里

    2.修改组

    # 修改组:mygroup01的GID为1234
    [root@localhost ~]# groupmod -g 1234 mygroup01
    
    
    # 查看组信息
    [root@localhost ~]# tail -l /etc/group
    dip:x:40:
    tss:x:59:
    postdrop:x:90:
    postfix:x:89:
    sshd:x:74:
    darker:x:1000:
    ben:x:1001:
    mygroup01:x:1234:
    mygroup02:x:7777:
    mygroup03:x:994:
    
    
    # 修改组:mygroup01的名称为mygroup001
    [root@localhost ~]# groupmod -n mygroup001 mygroup01
    
    
    # 查看组信息
    [root@localhost ~]# tail -l /etc/group
    dip:x:40:
    tss:x:59:
    postdrop:x:90:
    postfix:x:89:
    sshd:x:74:
    darker:x:1000:
    ben:x:1001:
    mygroup02:x:7777:
    mygroup03:x:994:
    mygroup001:x:1234:

    3.删除组

    如果1个组是1个用户的主组,那么该组不能被删除,删掉用户会默认一起删掉他的主组

    # 创建一个用户:eve
    [root@localhost ~]# useradd eve
    
    
    # 创建一个组:human
    [root@localhost ~]# groupadd human
    
    
    # 将用户:eve加入到组:human
    [root@localhost ~]# usermod -G human eve
    
    
    # 查看用户:eve的信息
    [root@localhost ~]# id eve
    uid=1002(eve) gid=1002(eve) groups=1002(eve),7778(human)
    
    
    # 附加组可以直接删除
    [root@localhost ~]# groupdel human
    
    
    # 再次查看用户:eve,可以发现:它的附加组不见了
    [root@localhost ~]# id eve
    uid=1002(eve) gid=1002(eve) groups=1002(eve)
    
    
    # 无法删除组:eve,因为组:eve属于用户:eve的主组
    [root@localhost ~]# groupdel eve
    groupdel: cannot remove the primary group of user 'eve'

    组成员管理

    对于用户来说,组也是分类的
    个数作用
    基本组 / 主组 有且仅有1个 创建时可通过-g指定
    如未指定则创建一个默认 的组(与用户同名)
    附加组 0个或多个 基本组不能满足授权要求,创建附加组
    将用户加入该组 就拥有了该组的权限

    gpasswd可以将用户添加到组或从组中删除,只针对已存在的用户

    [root@localhost ~]# gpasswd -a user07 it # 将某个用户加入到某个组
    [root@localhost ~]# gpasswd -M user02,user03,user04 it # 将多个用户加入到it组
    [root@localhost ~]# gpasswd -A lhf it # 指定lhf为组it的组长,除了root用户外lhf用户也可以采用第一条命令往it组里添加成员
    [root@localhost ~]# grep 'it' /etc/group # 查看it组中的成员
    it:x:505:user02,user03,user04
    [root@localhost ~]# gpasswd -d user07 it # 删除用户usr07从it组
    可以为组设置密码

    让一些非组成员的用户通过命令newgrp 组临时切换到组内并输入密码 的方式获取用户组的权限和特性

    # 创建一个组:group101
    [root@localhost ~]# groupadd group101
    
    
    # 给组:group101设置一个密码
    [root@localhost ~]# gpasswd group101
    Changing the password for group group101
    New Password:
    Re-enter new password:
    
    
    # 在临时目录下创建一个文件:1.txt
    [root@localhost ~]# touch /tmp/1.txt
    
    
    # 查看文件:1.txt的详情信息
    [root@localhost ~]# ll /tmp/1.txt
    -rw-r--r--. 1 root root 0 Nov 24 05:59 /tmp/1.txt
    
    
    # 设置文件:1.txt的属组为:group101
    [root@localhost ~]# chown .group101 /tmp/1.txt
    
    
    # 查看并执行上一次的命令ll(等同于:ll /tmp/1.txt)
    [root@localhost ~]# !ll
    ll /tmp/1.txt
    -rw-r--r--. 1 root group101 0 Nov 24 05:59 /tmp/1.txt
    
    # 给文件:1.txt所在的组添加w写的权限
    [root@localhost ~]# chmod g+w /tmp/1.txt
    
    
    # 修改组:group101的密码
    [root@localhost ~]# gpasswd group101
    Changing the password for group group101
    New Password:
    Re-enter new password:
    
    
    # 切换到用户:ben,同时切换到新用户的工作环境中
    [root@localhost ~]# su - ben
    
    
    # 此时没有权限
    [ben@localhost ~]$ echo 1234 >> /tmp/1.txt 
    -bash: /tmp/1.txt: 权限不够
    
    
    #  临时切换到组group1下,拥有其权限
    [ben@localhost ~]$ newgrp group101
    
    
    # 此时拥有权限了,向1.txt中写入内容:1234
    [ben@localhost ~]$ echo 1234 >> /tmp/1.txt
    
    
    # 查看1.txt
    [ben@localhost ~]$  cat /tmp/1.txt
    1234

    chown - 修改属主 属组信息

    五:手动创建用户

     

    1.在/etc/passwd中添加用户

    # 用vim打开/etc/passwd
    [root@localhost ~]# vim /etc/passwd
    
    
    # 按i进入:插入模式
    i
    
    
    # 在最后一行输入数据
    nancy:x:2020:2020::/home/nancy:/bin/bash
    
    
    # 退出编辑模式,保存并强制退出
    Esc
    :wq!
    
    
    # 查看/etc/passwd的末行信息(默认是10条)
    [root@localhost ~]# tail -l /etc/passwd
    systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:997:995:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    darker:x:1000:1000::/home/darker:/bin/bash
    ben:x:1001:1001::/home/ben:/bin/bash
    eve:x:1002:1002::/home/eve:/bin/bash
    nancy:x:2020:2020::/home/nancy:/bin/bash    # 有这一行,就表示成功插入了数据

    2.在/etc/shadow中设置密码

    # 先用openssl生成一个随机密码
    [root@localhost ~]# openssl passwd -1 -salt 'Hello World'
    Password:
    $1$Hello Wo$r0sA58H9bZ8C3Z5VZRiRo1    # 这个就是随机生成的密文的密码
    
    
    # 用vim打开/etc/shadow
    [root@localhost ~]# vim /etc/shadow
    
    
    # 按i进入:插入模式
    i
    
    
    # 在最后一行输入数据
    nancy:$1$Hello Wo$r0sA58H9bZ8C3Z5VZRiRo1:18303::::::
    
    
    # 退出编辑模式,保存并强制退出
    Esc
    :wq!
    
    
    # 查看/etc/shadow的末行信息(默认是10条)
    [root@localhost ~]# tail -l /etc/shadow
    systemd-network:!!:18584::::::
    dbus:!!:18584::::::
    polkitd:!!:18584::::::
    tss:!!:18584::::::
    postfix:!!:18584::::::
    sshd:!!:18584::::::
    darker:$6$NVQVgbXv$nCaM9zQ72TgC.RrREcvFr95arQdbKmw/idwNlSqzNamE31djv3IqqronbKOxwNN8UrtVSjeAd6/9ISqtYtGtp.:18590:0:99999:7:::
    ben:$6$oeDpPj5s$d8pHt3I2uIvKkDiaQCgHVpdJy2dXzbul9I9Cpko5Z80Lbsx5fu4sO5FDzS7BDQamVvw05XkiFDxOmncFajd/S0:18590:0:99999:7:::
    eve:!!:18590:0:99999:7:::
    nancy:$1$Hello Wo$r0sA58H9bZ8C3Z5VZRiRo1:18303::::::    # 有这一行,就表示成功插入了数据

    3.在/etc/group中添加组

    # 用vim打开/etc/group
    [root@localhost ~]# vim /etc/group
    
    
    # 按i进入:插入模式
    i
    
    
    # 在最后一行输入数据
    nancy:x:2020:
    
    
    # 退出编辑模式,保存并强制退出
    Esc
    :wq!
    
    
    # 查看/etc/group的末行信息(默认是10条)
    [root@localhost ~]# tail -l /etc/group
    postfix:x:89:
    sshd:x:74:
    darker:x:1000:
    ben:x:1001:
    mygroup02:x:7777:
    mygroup03:x:994:
    mygroup001:x:1234:
    eve:x:1002:
    group101:x:7778:
    nancy:x:2020:    # 有这一行,就表示成功插入了数据

    4.在/etc/gshadow中添加组的密码

    # 用vim打开/etc/gshadow
    [root@localhost ~]# vim /etc/gshadow
    
    
    # 按i进入:插入模式
    i
    
    
    # 在最后一行输入数据
    nancy:!::
    
    
    # 退出编辑模式,保存并强制退出
    Esc
    :wq!
    
    
    # 查看/etc/gshadow的末行信息(默认是10条)
    [root@localhost ~]# tail -l /etc/gshadow
    postfix:!::
    sshd:!::
    darker:!::
    ben:!::
    mygroup02:!::
    mygroup03:!::
    mygroup001:!::
    eve:!::
    group101:$6$KctoH/FxL$hjcmvdoaTBH36wkb/10.jyBW0tNwDlf4r9w.oVa1fEgPwI6Dzl.VFwg6ERZcQfiP.I9Dij9w3ZCTng5NeFHfu.::
    nancy:!::    # 有这一行,就表示成功插入了数据

    5.创建用户家目录,并用用户老家的模板/etc/skel/ 装修一下,注意权限

    # 在家目录中创建用户的目录:nancy
    [root@localhost ~]# mkdir /home/nancy
    
    
    # 将/etc下的skel作为模板,复制到新的用户目录中
    [root@localhost ~]# cp -r /etc/skel/.[!.]* /home/nancy/
    
    
    # 设置该目录的权限:仅创建者拥有所有权限
    [root@localhost ~]# chmod 700 /home/nancy/
    
    
    # 将该用户添加到之前创建的组中(主组) 
    [root@localhost ~]# chown -R nancy.nancy /home/nancy/

    6.在/var/spool/mail/nancy中创建用户邮箱文件

    # 在/var/spool/mail/下创建一个文件,名为:nancy
    [root@localhost ~]# touch /var/spool/mail/nancy
    
    
    # 修改该文件的权限
    [root@localhost ~]# chmod 660 !$
    chmod 660 /var/spool/mail/nancy
    
    
    # 修改邮箱的属主/属组
    [root@localhost ~]# chown nancy.mail /var/spool/mail/nancy

    7.开始测试账号

    # 用ssh连接
    PS C:UsersDarker> ssh nancy@192.168.50.101
    nancy@192.168.50.101's password:
    
    
    # 查看当前登录的用户
    [nancy@localhost ~]$ whoami
    nancy

    扩展知识

     

    堡垒机

     

    什么是堡垒机?

    堡垒机 又名“跳板机(Jump Server)”

    可作为跳板批量操作远程设备的网络设备,是系统管理员或运维人员常用的操作平台之一

     

    堡垒机的特点

    • 可以动态地获取密码
    • 可以记录各种操作(申请了账号,登录跳板机执行了某些命令等)
    • 以录像的性是记录操作:X登录了XXX,进行了XXX操作
  • 相关阅读:
    CentOS7最小化安装后要做的事
    Django 2.0 新特性
    Django2.+ path配置
    Django 安装
    Django基础
    http协议
    Centos7 下mysql大小写敏感问题
    CentOS 设置mysql的远程访问
    Linux下彻底卸载mysql详解
    静态库和动态库
  • 原文地址:https://www.cnblogs.com/ltyc/p/14056532.html
Copyright © 2020-2023  润新知