zoukankan      html  css  js  c++  java
  • 用户和用户组

    一、用户和用户组

    1.安全3A

    • Authent
    • Authorization : 授权
    • Accouting|Audition :审计 (时候审计,监控)

    2.用户user

    • 令牌 token, identity
      用户登录系统,成功后,系统会分配给用户一个令牌token,在该用户访问系统中的文件时,文件会审核这个令牌来决定是否给予权限访问该文件。要想获得最新的token,重新登录。
    • Linux用户:username、UID (Linux中用户权限看UID)
      • 管理员:root,0
      • 普通用户:1-65535
        • 系统用户:1-499;1-999(centos7)一般指各个进程
        • 登录用户:500+,1000+(centos7)

    3.组group

    • Linxu组:Groupname、GID
    • 管理员组:root,0
      • 普通组
        • 系统用户:1-499;1-999(centos7)一般指各个进程
        • 登录用户:500+,1000+(centos7)

    4.Linux安全上下文(context)

    进程所能够访问资源的权限取决于进程的运行者的身份(属主身份-->属组身份-->其他)。即程序能否访问某个文件是由用户身份决定的而非程序本身。

    5.group组的类别

    • 用户的主要组(primary group)
      • 用户必须属于一个且只有一个主要组
      • 组名同用户名,且仅包含一个用户,又称私有组
    • 用户的附加组(supplementary group)
      • 一个用户可以属于0个或多个附加组

    即,一个用户可以加入多个组,该用户的权限是组权限的累加;一个组也可以拥有多个用户

    二、用户和组的配置文件

    1./etc/passwd 用户及其属性信息(名称、UID/主组id等)

    帮助文档:man 5 passwd
    cat /etc/passwd
    在这里插入图片描述
    以最后一行songtai为例:

    login name:登录用名(songtai)
    passwd:密码(x)
    UID:用户身份编号(500)
    GID:登录默认所在组编号(501)
    GECOS:用户全名或注释
    home directory:用户主目录(/home/wang)
    shell:用户默认使用shell (/bin/bash)

    说明:
    1.帮助文档: man 5 passwd
    2.可用chfn命令添加修改第5行的信息
    3.uid为1-499的为系统程序进程,最后的shell类型为/sbin/nologin,给程序服务使用的shell,用于创建给服务用的账号,其可以限制某些用户通过ssh登陆到shell上。
    4.chsh -s /bin/csh songtai songtai账号更改shell为csh
    5.第二列x为密码,其信息记录在/etc/shadow文件下

    2./etc/group 组及其属性信息

    帮助文档:man 5 group
    cat /etc/group
    在这里插入图片描述

    group_name:the name of the group
    password: the (encrypted) group password. If this field is empty, no password is needed.
    GID:the numerical group ID.
    user_list(附加组名单):a list of the usernames that are members of this group, separated by commas.附加组的用户列表,组员间用“,”隔开

    注意:对一个正在登陆中的用户,对其修改组等相关信息并不会实时更改,需要重新登陆(背后原理:token令牌原理,只有重新登陆系统才会分配其一个最新的令牌,其拿着新的令牌才有访问一些配置文件的权限)

    3./etc/shadow 用户密码及其相关属性

    帮助文档:man 5 shadow
    cat /etc/shadow
    在这里插入图片描述
    从左至右:

    1.登陆用名
    2.用户密码:一般用sha512加密
    !!:表示账号锁定(useradd sst命令新增的sst用户的密码就是这种情况)

    解锁方法:
    ①nano /etc/shadow 将sst用户第二列的两个!!删除掉,这样即可登录;
    ②usermod -U sst 表示sst这个用户解锁一个!,连续操作两次。(centos6和7 已不支持此类操作)
    ③passwd -e username 表示将第三列的数值变为默认0,意味着下次登录时必须更改密码(也即让当前口令失效)或chage -d 0 username 效果同passwd -e username

    3.从1970年1月1日起到密码最近一次被更改的时间

    echo `date +%s`/3600/24 | bc # 表示目前据1970年1月1日的时间,两项对比算出上次修改密码的时间
    该列数字为0时,下次登录系统时必须修改密码

    4.密码最少使用多少天才被允许变更(0表示随时可被变更)
    5.密码最多使用多少天就要须要变更(99999表示永不过期)
    6.密码过期前几天系统提醒用户(默认为7天)
    7.密码过期几天后帐号会被锁定 (password inactivity period)
    8.从1970年1月1日算起,多少天后账户失效(account expiration date)

    在这里插入图片描述

    关于更改密码的加密算法:
    authconfig --passalgo=sha256 --update
    修改加密算法所修改的文件 /etc/login.defs
    # # #
    openssl rand -base64 9      # 9位随机字符
    openssl rand -base64 12    # 12位随机字符
    

    4./etc/gshadow 组密码及其相关属性

    帮助文档:man 5 gshadow
    cat /etc/gshadow
    在这里插入图片描述

    共四列:
    群组名称:就是群组名称
    群组密码:
    组管理员列表:组管理员的列表,更改组密码和成员
    以当前组为附加组的用户列表:(分隔符为逗号)

    相关文件操作处理命令:
    vipw  #(与nano /etc/passwd 相同,但具备语法检查功能,vi=vim)
    pwck  # 检查passwd文件语法
    
    vigr  #(与nano /etc/passwd 相同,但具备语法检查功能,vi=vim)
    grpck # 检查group文件语法
    

    5./etc/default/useradd 新建用户时默认的一些默认属性配置文件夹

    在这里插入图片描述

    GROUP=100     # 默认的user组的 GID    
    HOME=/home    # 默认的家目录
    INACTIVE=-1   # 是否启用帐号过期设置(是帐号过期不是密码过期),-1表示不启用
    EXPIRE=       # 帐号过期时间,不设置表示不启用   
    SHELL=/bin/bash  # 默认使用的shell
    SKEL=/etc/skel    # 指定骨架目录,前文的/etc/skel就在这里
    CREATE_MAIL_SPOOL=yes    # 默认允许创建邮箱文件夹
    

    注意:可用useradd -D命令可显示或更改默认设置
    useradd -D -s SHELL 修改shell类型
    useradd -D -g GROUP 修改默认组
    在这里插入图片描述

    6./etc/skel 默认文件夹相关

    每次新建用户时,都会将此文件夹复制到新建用户的家目录下。默认只有3个环境配置文件,可以修改这里面的内容,或者添加几个文件在该文件目录中,以后新建用户时就会自动获取到这些环境和文件。

    ll -a  /etc/skel/
    -rw-r--r--.   1 root root   18 Apr 11  2018 .bash_logout
    -rw-r--r--.   1 root root  193 Apr 11  2018 .bash_profile
    -rw-r--r--.   1 root root  231 Apr 11  2018 .bashrc
    

    注意:因为删除/etc/skel目录下的文件出现的问题,我们重新复制一个完整的文件进去即可解决。

    7.cat /etc/login.defs 密码的默认配置文件

    设置用户帐号限制的文件。该文件里的配置对root用户无效。
    如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs。
    该文件有很多配置项,文件的默认内容只给出了一小部分,若想知道全部的配置项以及配个配置项的详细说明,可以"man 5 login.defs"查看。

    less /etc/login.defs
    #QMAIL_DIR      Maildir              # QMAIL_DIR是Qmail邮件的目录,所以可以不设置它
    MAIL_DIR        /var/spool/mail      # 默认邮件根目录,即信箱
    #MAIL_FILE      .mail                # mail文件的格式是.mail
    
    # Password aging controls:
    PASS_MAX_DAYS   99999         # 密码最大有效期(天)
    PASS_MIN_DAYS   0             # 两次密码修改之间最小时间间隔
    PASS_MIN_LEN    5             # 密码最短长度
    PASS_WARN_AGE   7             # 密码过期前给警告信息的时间
    
    # 控制useradd创建用户时自动选择的uid范围
    # Min/max values for automatic uid selection in useradd
    UID_MIN                  1000
    UID_MAX                 60000
    # System accounts
    SYS_UID_MIN               201
    SYS_UID_MAX               999
    
    # 控制groupadd创建组时自动选择的gid范围
    # Min/max values for automatic gid selection in groupadd
    GID_MIN                  1000
    GID_MAX                 60000
    # System accounts
    SYS_GID_MIN               201
    SYS_GID_MAX               999
    
    # 设置此项后,在删除用户时,将自动删除用户拥有的at/cron/print等job
    #USERDEL_CMD    /usr/sbin/userdel_local
    
    # 控制useradd添加用户时是否默认创建家目录,useradd -m选项会覆盖此处设置
    CREATE_HOME     yes
    
    # 设置创建家目录时的umask值,若不指定则默认为022
    UMASK           077
    
    # 设置此项表示当组中没有成员时自动删除该组
    # 且useradd是否同时创建同用户名的主组。(该文件中并没有此项说明,来自于man useradd中-g选项的说明)
    USERGROUPS_ENAB yes
    
    # 设置用户和组密码的加密算法
    ENCRYPT_METHOD SHA512
    

    二、用户及用户组的相关命令

    用户管理命令:
    useradd
    usermod
    userdel
    组账号管理命令:
    groupadd
    groupmod
    groupdel
    

    1、useradd 添加用户

    useradd -u 66666 songtai   # 表示新建用户songtai,并指定其uid为66666
    useradd -o  # 与u一起用,id不唯一,用于创建同id用户
    useradd -g GID # 指明用户所属基本组(主要组),可为组名,也可以GID
    	useradd -g  songtai  sst   # 创建sst这个用户,并将songtai作为其主组
    useradd -c  hello  sst3  # 创建sst3这个用户,并添加hello这个信息在账户里
    useradd -d HOME_DIR   # 以指定的路径(不存在)为家目录
    useradd -s SHELL   # 指明用户的默认shell程序
    	useradd -s /bin/csh sst4
    useradd -G  GROUP1[,GROUP2,...]    #为用户指明附加组,组须事先存在
    useradd -N    # 不创建私用组做主组,使用users组做主组
    useradd -r    # 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000   用于安装系统应用
    useradd -m    # 创建家目录,用于系统用户
    useradd -M    # 不创建家目录,用于非系统用户
    

    2、usermod

    usermod - modify a user account

    usermod [options] LOGIN
    # option
    	-u UID: 新UID
    	-g GID: 新主组
    	-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
    	-s SHELL:新的默认SHELL
    	-c 'COMMENT':新的注释信息
    	-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
    	-l login_name: 新的名字;
    	-L: lock指定用户,在/etc/shadow 密码栏的增加!
    	-U: unlock指定用户,将/etc/shadow 密码栏的! 拿掉
    	-e YYYY-MM-DD: 指明用户账号过期日期
    	-f INACTIVE: 设定非活动期限
    

    3.userdel

    userdel -r: 删除用户家目录

    4.grooupadd、groupmod、groupdel

    5.chpasswd 批量修改用户口令

    1. 第一步:
      创建passwd文件(名字任意、目录任意)
    2. 第二步:
      nanopasswd 添加统一格式
      名户名:口令,例如:
      sst1:woshisst1
      sst2:woshisst2
      sst3:woshisst3
    3. 第三步:
      cat passwd | chpasswd 批量修改用户口令

    6.newusers 批量创建用户

    newusers passwd格式文件
    实验场景:假如想在要在centos7上创建已经在centos6上存在的批量账号,怎么做?

    1. 第一步:cat /etc/passwd 将chentos6上要创建的账号都复制
    2. 创建一个list.txt 的文件,将上面的文件复制进这个文件,并保存
      在这里插入图片描述
    3. scp list.txt ip: /data 远程复制附件。
      例如:scp list.txt 192.168.199.134: /data 表示将list.txt这个文件复制进192这个ip地址里data这个文件目录下
    4. newusers /data/list.txt 批量创建list.txt中的用户

    7. id 查看用户相关的ID信息

    id - print real and effective user and group IDs

    id [OPTION]... [USER]
    # option
    	-u: 显示UID
    	-g: 显示GID
    	-G: 显示用户所属的组的ID
    	-n: 显示名称,需配合ugG使用
    

    8. su 切换用户或以其他用户身份执行命令

    su - run a command with substitute user and group ID

    su [options...] [-] [user [args...]]
    su  UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
    su  -  UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换(等价于重新登陆一个账号)
    su [-] UserName -c  'COMMAND'   # 换个身份执行命令
    

    9.passwd 设置密码

    passwd - update user's authentication tokens

    passwd  # 修改当前登录用户的密码
    passwd [OPTIONS] [username]   # 修改指定用户的密码,仅root用户权限
    # option
    	-l:锁定指定用户
    	-u:解锁指定用户
    	-e:强制用户下次登录修改密码
    	-n mindays: 指定最短使用期限
    	-x maxdays:最大使用期限
    	-w warndays:提前多少天开始警告
    	-i inactivedays:非活动期限
    	
    passwd --stdin:从标准输入接收用户密码
    	echo "PASSWORD" | passwd--stdin USERNAME
    

    10.chage 修改或查看和密码时间相关的内容

    chage - change user password expiry information

    chage [options] LOGIN 
    # option
    	-d LAST_DAY   # shadow第三列,修改上次改动密码的时间(1970年1月1日至今的时间),若改为0则下次登录时须修改密码;
    	-E --expiredate # 指定帐户(不是密码)过期时间,所以是强锁定,如果指定为0,则立即过期,即直接锁定该用户
    	-I --inactive INACTIVE
    	-m --mindaysMIN_DAYS
    	-M --maxdaysMAX_DAYS
    	-W --warndaysWARN_DAYS
    	–l # 列出指定用户密码相关信息
    
    示例:
    chage -d 0 tom 下一次登录强制重设密码
    chage -m 0 –M 42 –W 14 –I 7 tom
    chage -E 2016-09-10 tom  # tom账户2016-09-10失效
    # # #
    chage -l zhangsan
    	Last password change                                    : Jun 06, 2017
    	Password expires                                        : never
    	Password inactive                                       : never
    	Account expires                                         : never
    	Minimum number of days between password change          : 0
    	Maximum number of days between password change          : 99999
    	Number of days of warning before password expires       : 7
    

    11.gpasswd 更改组密码

    gpasswd - administer /etc/group and /etc/gshadow

    gpasswd [option] group
    # option
    	-a user # Add the user to the named group.将user添加至指定组中
    	-d user # 从指定组中移除用户user
    	-A user1,user2,... # 设置有管理权限的用户列表
    

    12.newgrp 临时切换主组

    如果用户本不属于此组,则需要组密码

    13.groups、groupmems 更改和查看组成员

    groups - print the groups a user is in
    groupmems - administer members of a user´s primary group

    groupmems [options]  [action] 
    # option:
    	-g, --group groupname更改为指定组(只有root)
    # Actions:
    	-a, --add username 指定用户加入组
    	-d, --delete username 从组中删除用户
    	-p, --purge 从组中清除所有成员
    	-l, --list 显示组成员列表
    ###
    groups   [OPTION]   [USERNAME]...  # 查看用户所属组列表
    

    14.getent passwd/shadow/group/gshadow

    查看passwd/shadow/group/gshadow这几个文件夹

    三、练习

    1、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"

    useradd -G root,bin -s /bin/csh -c "Gentoo Distribution" gentoo
    注意:
    -G 后边跟的附加组之间用,隔开;
    注释信息用""
    要创建的用户放在最后

    2、创建下面的用户、组和组成员关系

    名字为admins 的组
    用户natasha,使用admins 作为附属组
    用户harry,也使用admins 作为附属组
    用户sarah,不可交互登录系统,且不是admins 的成员,natasha,harry,sarah密码都是centos

    groupadd admins  先创建组admins
    useradd -G admins natasha
    useradd -G admins harry
    useradd -s /sbin/nologin sarah
    echo centos |passwd --stdin ntatsha 
    echo centos |passwd --stdin natasha
    echo centos |passwd --stdin sarah
    

    3.分析安装一个应用时的相关组信息

    在这里插入图片描述

    四、实验

    实验:centos6,7上修改/etc/passwd root的UID非0,无法启动,修复之

    1. centos6:

    第一步,启动时,此界面按a进入
    在这里插入图片描述
    第二步,按a进入下面这个界面,最后敲入init=/bin/bash
    在这里插入图片描述
    第三步,进入到/bin/sh界面,
    mount –orw,remount / 重新挂载/目录
    nano /etc/passwd 修改root的UID
    在这里插入图片描述
    在这里插入图片描述
    第四步,重启即可正常进入centos6

    2. centos7:

    第一步,启动界面按e进入

    第二步,在Linux16那一行的最后敲入 init=/bin/bash,再按ctrl+x
    在这里插入图片描述
    第三步,mount -orw,remount /
    nano /etc/passwd
    第四部,将root的uid改为0,重启即可

  • 相关阅读:
    Web开发(二)HTML
    Web开发(一)基础
    Python基础(十二)并发编程02
    Python基础(十一)并发编程01
    Python基础(十)socket编程
    Python基础(九)异常
    计算机基础
    Python基础(八)面向对象02
    jmeter使用正则表达式提取数据
    jmeter+ant 实现自动化接口测试环境配置
  • 原文地址:https://www.cnblogs.com/sstjustdoit/p/9954784.html
Copyright © 2011-2022 走看看