20170722 用户、组管理

作者: 哈喽别样 | 来源:发表于2017-07-23 17:30 被阅读12次

    内容纲要

    • 用户、组
    • 用户、组的配置文件
    • 用户和组管理命令

    一、用户、组

    用户

    • 系统在用户登录时为用户分配一个令牌便于权限管理,在linux系统中令牌即为UID
    • UID编码规则:
      • root用户的UID为0,普通用户的UID为1-60000,其中系统用户与登录用户的分配如下:
        • 系统用户:1-499(CentOS 6),1-999(CentOS 7)
        • 登录用户:500+(CentOS 6),1000+(CentOS 7)
    • 系统用户主要为系统运行的程序准备。

    • 系统为了方便管理,设立组的概念,组内用户的权限继承自组权限
    • 组同样设置GID,其编码规则同UID
    • 建立新用户时系统默认同时建立同名组,其UID和GID号相同

    安全上下文

    • 进程所能够访问资源的权限取决于进程的运行者的身份

    组的类别

    • 用户的主要组:一个用户有且只属于一个主组,默认其名称与用户名相同
    • 用户的辅助组:一个用户可以属于零个或多个辅助组

    二、用户、组的配置文件

    • linux用户、组的配置文件主要如下四个

    /etc/passwd 用户账号相关属性配置文件
    /etc/shadow 用户密码相关属性配置文件
    /etc/gpasswd 组账号相关属性配置文件
    /etc/gshadow 组密码相关属性配置文件

    • passwd文件格式: name:passwd:UID:GID:GECOS:directory:shell

      • name: 用户登录名
      • passwd: 用户密码,现在密码已经移至/etc/shadow文件,被占位符x代替
      • UID: 用户ID号
      • GID: 用户所属的主组ID号
      • GECO: 用户信息注释
      • directory: 用户家目录路径
      • shell: 用户默认shell
    • shadow文件格式:login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field

      • login name:用户登录名
      • encrypted password: 加密的密码
        • 加密密码如图
    • $6代表加密方式为SHA512,加密方式很多,例如$1代表MD5加密
    • $AArU9fX$中两个$符号间是一段随机字符,称作盐(salt),用于确保即使是相同密码加密的结果也不同,进一步加强密码安全性
    • 后面的字符是加密密文正文,不同加密方式长度不同,但是只要加密方式相同,密码位数不同加密后的密文位数是相同的
    • 更改密码加密方式:authconfig --passalgo=sha256 --update
    • date of last password change: 上次修改密码时间,从1970-1-1起算的天数

    • minimum password age: 最短密码时间,普通用户更换密码的最短间隔天数,0表示随时可以变更

    • maximum password age: 最长密码时间,用户使用一个密码最长时间,99999表示永不过期

    • password warning period: 密码达到最长时间前提前报警提示的天数,默认7天

    • password inactivity period: 密码达到最长时间后允许修改密码的宽限期,超出后用户被锁定

    • account expiration date: 用户账户有效期,从1970-1-1起算的天数

    • group文件格式:group name:passwd:GID:user list

      • group name: 组名称
      • passwd: 组密码,用占位符x代替,加密密码移至/etc/gpasswd文件
      • GID: 组ID号
      • user list: 以当前组为辅助组的用户,多用户用,分隔
    • gshadow文件格式:group name:encrypted password:administrators:members

      • group name: 组名称
      • encrypted password: 加密的密码,与/etc/shadow文件中的密码加密方式相同
      • administrators: 组管理员,可以修改组密码,多名管理员用,分隔
      • members: 以当前组为辅助组的用户,内容必须与/etc/group文件中的user list相同
    • 注意:修改账号相关设置(e.g. /etc/passwd /etc/shadow /etc/group /etc/gpasswd)时,必须重新登录才能够生效

    三、用户和组管理命令

    (一)用户管理命令

    (1)useradd 用户创建
    • 语法:useradd [options] LOGIN
    • 用法:
    -u UID                     <!--指定UID,[UID_MIN, UID_MAX]定义在/etc/login.defs-->
    -o                         <!--配合-u 选项,不检查UID的唯一性-->
    -g GID                     <!--指明用户所属基本组,可为组名,也可以GID-->
    -c "COMMENT"               <!--用户的注释信息-->
    -d HOME_DIR                <!--以指定的路径(不存在)为家目录-->
    -s SHELL                   <!--指明用户的默认shell程序,可用列表在/etc/shells文件中-->
    -G GROUP1[,GROUP2,...]     <!--为用户指明附加组,组须事先存在-->
    -N                         <!--不创建私用组做主组,使用users组做主组-->
    -r                         <!--创建系统用户,默认不创建家目录,shell为/sbin/nologin-->
    
    • 实验:创建一个用户billy,指明UID=1010,属于附加组hellopeiyang和natasha,家目录为/app/billy,使用的shell为csh。
      • 命令:useradd -u 1010 -G hellopeiyang,natasha -d /app/billy -s /bin/csh billy

      • getent命令检查hellopeiyang,natasha,billy三个组的/etc/group文件,确认用户列表存放的是以此组作为辅助组的用户

    • 用户创建默认配置文件 /etc/default/useradd
    • 使用useradd -D命令修改用户创建默认配置文件
    useradd -D -b /app   <!--当不指定家目录时,自动在/app下新建用户家目录-->
    useradd -D -g group  <!--当使用useradd -N选项时,使用设置的组作为主组,默认为users组-->
    useradd -D -s shell  <!--当不指定默认shell时,自动使用设置的shell-->
    
    • 用户家目录默认配置文件 /etc/skel
      使用useradd建立用户家目录时,将/etc/skel下的所有文件复制到家目录中,相当于执行命令cp -a /etc/skel/.[^.]* /home/user
    • newusers passwd格式文件 批量创建用户
    • cat 格式文件 | chpasswd 批量修改用户密码,格式文件格式user name:password
    (2)usermod 用户属性修改
    • 语法:usermod [OPTION] login
    • 用法:
    -u UID           <!--新UID,必须唯一不重复,除非使用-o 选项-->
    -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      <!--设定非活动期限-->
    
    • 实验:将billy用户的主组改为harry,附加组增加sarah,家目录迁移到/home/billy下,账号于2018年8月31日过期,最后将billy账户锁定
    • 命令:
    getent group harry
    usermod -g 1004 -aG sarah -md /home/billy -e 2018-08-31 billy <!--注意a在G前,m在d前-->
    usermod -L billy
    
    (3)userdel 删除用户
    userdel login      <!--删除login用户-->
    userdel -r login   <!--删除login用户同时删除家目录-->
    
    (4)id 查看用户相关ID信息

    语法:id [OPTION]... [USER]
    用法:

    -u     <!--显示UID-->
    -g     <!--显示GID-->
    -G    <!--显示用户所属组的ID-->
    -n     <!--显示名称,需配合ugG使用-->
    
    (5)切换用户 su
    su user    <!--切换至user用户,但是不切换至user目录、不读取user用户配置文件-->
    su - user  <!--切换至user用户,同时切换至user目录并读取user用户配置文件-->
    su/ su -   <!--不写用户名默认切换至root用户-->
    exit       <!--退出切换的用户,注意不要在切换的用户下再切换用户,会导致系统异常-->
    su - root -c 'command'   <!--只使用root身份执行一次command命令即切换回原用户-->
    
    • root用户切换至普通用户不需要密码,普通用户切换至root用户需要root密码
    (6)设置密码 passwd
    • 语法:passwd [OPTIONS] UserName
    • 用法:
    -l     <!--锁定指定用户-->
    -u     <!--解锁指定用户-->
    -e     <!--强制用户下次登录修改密码-->
    -n mindays     <!--指定最短使用期限-->
    -x maxdays     <!--最长使用期限-->
    -w warndays     <!--提前多少天开始警告-->
    -i inactivedays     <!--非活动期限-->
    --stdin     <!--从标准输入接收用户密码-->
    
    • 实验:将harry的密码改为"hello",同时密码最短使用期限3天,最长使用期限42天,密码到期前7天提示修改,过期后5天将账户锁定
      • 命令:
    echo "hello" | passwd -n 3 -x 42 -w 7 -i 5 --stdin harry
    
    (7) 修改用户密码策略 chage

    语法:chage [OPTION]... LOGIN
    用法:

    -d     <!--LAST_DAY,修改密码上次修改时间-->
    -E --expiredate     <!--EXPIRE_DATE,设置账户失效时间-->
    -I --inactive     <!--INACTIVE,设置密码修改宽限期-->
    -m --mindays     <!--MIN_DAYS,设置密码修改最短间隔时间-->
    -M --maxdays     <!--MAX_DAYS,设置密码使用最长期限-->
    -W --warndays     <!--WARN_DAYS,设置密码过期前的提前警告时间-->
    –l     <!--显示密码策略信息-->
    
    (8)其他用户管理命令
    • chsh -s shell 修改shell
    • chfn 修改用户注释信息
    • finger 查看用户详细信息

    (二)组管理命令

    (1)创建组 groupadd
    • 语法:groupadd [OPTION]... group_name
    • 用法:
    -g GID     <!--指明GID号;[GID_MIN, GID_MAX]定义在/etc/login.defs-->
    -o         <!--配合-g属性,不检查GID的唯一性-->
    -r         <!--创建系统组-->
    
    (2)修改组属性 groupmod
    • 语法:groupmod [OPTION]... group
    • 用法:
    -n group_name     <!--设置新名字-->
    -g GID            <!--设置新的GID-->
    -o                <!--配合-g属性,不检查GID的唯一性-->
    
    (3)删除组 groupdel
    • 语法 groupdel group_name
    (4)更改组密码 gpasswd
    • 语法:gpasswd [OPTION] GROUP
    • 用法:
    -a user     <!--将user添加至指定组中-->
    -d user     <!--从指定组中移除用户user-->
    -A user1,user2,...     <!--设置有管理权限的用户列表-->
    
    • 实验:创建组david,将用户hellopeiyang,natasha,sarah加入到组中,将natasha从组中移除
      • 命令:
    groupadd david
    gpasswd -a hellopeiyang,natasha,sarah david
    gpasswd -d natasha
    
    • 结果如下图

      • 第1步,建立组david;


      • 第2步,为组david添加用户hellopeiyang,natasha,sarah;


      • 第3步,将natasha从组david中删除。


    • newgrp命令:临时切换主组,如果用户本不属于此组,则需要组密码
      语法:newgrp group_name

    (5)更改和查看组成员 groupmems
    • 语法:groupmems [options] [actions]
    • 用法:
    options:
    -g, --group group_name     <!--更改为指定组,只有root可以执行,普通用户只能修改所在组-->
    actions:
    -a, --add username     <!--指定用户加入组-->
    -d, --delete username     <!--从组中删除用户-->
    -p, --purge     <!--从组中清除所有成员-->
    -l, --list     <!--显示组成员列表-->
    
    • groups 显示用户所属于的组 groups user_name

    相关文章

      网友评论

        本文标题:20170722 用户、组管理

        本文链接:https://www.haomeiwen.com/subject/bjjykxtx.html