用户和组 之 增删改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户和组 之 增删改相关的知识,希望对你有一定的参考价值。

要对计算机系统进行相关的操作,就需要有账号,如果很多账号需要对同一文件具有相同的操作权限,那么这个时候就涉及到组的概念了,我们可以将不同的账号加入同一组中,使得该组的所有账号拥有相同的操作权限。日常的linux运维中,就需要对账号和组进行管理,本文就用户和组的增删改操作进行探讨。

用户和组的关系

用户和用户组的对应关系有:一对一、一对多、多对一和多对多;下图展示了这种关系:

技术分享

  • 一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。

  • 一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。

  • 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。

  • 多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。

id概念

linux中,一般情况下用户和组都会分配到一个专有的id,这个id也可以在创建时手动自动,系统对账号的管理是由id决定的,而非id对应的名称或者是组名。比如同一id,名称更改后,这个id的所拥有的权限还是一样的,但是同一名称,将id调整后,所拥有的权限可能是不一样的,比如讲普通用户的uid调整为0,那么用户将获得和root一样的权限。简单来说,进程所能够访问资源的权限取决于进程的运行者的身份,而id就是所谓的身份。

在CentOS 6x 以及老版本 和 CentOS 7x里有在系统id的分配上有了变更

 Linux用户: Username/UID
   管理员:root, 0   

      普通用户:1-65535
             系统用户:1-499, 1-999(CentOS7)  对守护进程获取资源进行权限分配
             登录用户: 500+, 1000+(CentOS7)

Linux组:Groupname/GID
   管理员组:root, 0
  普通组:
            系统组:1-499, 1-999(CENTOS7)
            普通组:500+, 1000+(CENTOS7)

在linux的组里,还分为主要组和附加组。一个用户必须属于一个,且仅有一个的主要组,但是一个用户可以同时加入多个附加组里。

默认情况下,主要组是和用户是同名的,而且主要组也是仅包含一个用户,这样的组也叫私有组

配置文件

Linux用户和组的主要配置文件有如下四个:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)

    格式:账号:密码:UID:GID:描述:家目录:shell

              描述:是关于账号的描述,可以通过chfn这个命令来更改描述信息。

               这里的UID和GID默认情况下是一致的,但是通过手动指定可以不一致

                     例子,系centOS6统里有账号UID和GID此时最大值为524,执行以下的语句                         

groupadd -g 526 hong
useradd terry4
useradd terry5

此时/etc/passwd的结果如下

terry4:x:525:525::/home/terry4:/bin/bash
terry5:x:526:527::/home/terry5:/bin/bash

可以看到,虽然我们没有指定新用户 terry5的GID,但是UID 不等于 GID ,是由于,terry4的GID是525,526已经被hong通过手动方法新建指定了,所以系统默认新生成的GID为527.如果要使得UID 和 GID新建的账号一致,可以通过手动指定。


/etc/group:组及其属性信息

    格式:组名:密码:GID:用户列表

              用户列表:把该组作为附加组的用户

              密码:通过gpasswd设定,指用户输入该密码就可以通过newgrp临时切换到该组,即将该组作为临时的附加组,获取到附加组的相关组的权限,取消密组码后,只有成员才可以通过newgrp命令切换入该组。
/etc/shadow:用户密码及其相关属性

   格式:用户名:加密密码:最后一次改密码的时间:密码最小使用时间:密码最长使用时间:密码警告期:密码宽限期:账号过期时间:保留区间

             最后一次改密码的时间 和 账号过期时间 都是相对1970年1月1日的天数。

             加密密码:格式为$加密方式$盐值$加密后的密码,盐值的作用是保证了加密的强度,这个值是随机数,相同密码在盐值不一样的情况下,加密后的密文是不一样的。

             警告期:用户在密码过期前几天,提醒用户更改密码

              密码宽限期:用户在密码过期后的几天,可以更改密码,如果还不更改密码,该账户将会被系统锁

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

   格式:组名:密码:管理者:成员

            密码:格式和/etc/shadow里密码格式一样

            管理者:指该用户可以将其他用户加入到该组里,通过gpasswd -a添加成员

            成员:把该组作为附加组的用户,用逗号隔开不同的用户

新建用户的相关文件

/etc/default/useradd
/etc/skel/*
/etc/login.defs

  • etc/default/useradd 文件的内容,提示useradd default file ,创建用户时使用的默认文件

    GROUP = 100 表示用户组ID 
     HOME = /HOME
    表示家目录的位置
    INACTIVE = -1 表示是否启用帐号过期停权,-1表示不启用。
    EXPIRE=      表示账号是否启用过期设置   无表示不启用
    SHELL = /bin/bash 表示账号使用shell种类 
    SKEL = /etc/skel
     表示账号使用默认文件内容, 可以理解为添加用户的目录默认文件存放位置。也就是说,当用户用useradd添加用户时,用户主目录下的文件都是从这个目录中复制的                   
    CREATE_MAIL_SPOOL=yes 
    表示是否创建邮箱缓存 yes表示创建

  • /etc/skel–当系统内增加新用户时,该目录下的所有文件都将被自动复制到该用户的主目录默认时,这些文件中的大部分都是以(.)文件

  • /etc/login.defs文件定义了与/etc/passwd/etc/shadow配套的用户限制设定。这个文件是需要的,缺失并不会影响系统的使用,但是也许会产生意想不到的错误。

用户和组管理命令

   用户管理命令
useradd:添加用户

userdel:删除账号

usermod:修改使用者账号

组帐号维护命令
groupadd:添加组

groupdel:删除群组

groupmod:修改群组

下面我们通过增,删,改的顺序依次介绍

增加 用户

  • useradd[options] LOGIN
    -u 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: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000

例子:

useradd -c "test terry6" -d /home/terry6 -G terry3 terry6

表示增加用户terry6,描述为 test terry6,指定用户的家目录为/home/terry6,并增加附加组为terry3

增加 组

  • groupadd[OPTION]... group_name
    -g GID: 指明GID号;[GID_MIN, GID_MAX]
    -r: 创建系统组:CentOS 6: ID<500,CentOS 7: ID<1000

例子

groupadd -g 528 terry7

表示增加组terry7,并指定GID 为528

删除 用户

  • userdel[OPTION]... login
    -r: 删除使用者账号及相关文档,如用户的家目录及邮箱的目录,反正,如果没有-r,则只删除账号,相关文档没删掉

例子

userdel -r terry6

表示删掉terry6,并且把terry6家目录及邮箱的目录都删掉

删除 组

  • groupdel

  • groupdel GROUP

例子

groupdel terry3

表示删掉了terry3这个群主,但是terry3这个账号还是存在,如果有任何一个群组的使用者在线上的话就不能移除该群组。如terry3还是用户terry3的主组,最好先用命令usermod -g移除用户terry3使用者后再移除群组。注意,userdel删除用户的同时把用户的主组也删掉了。

修改 用户

  • usermod[OPTION] login
    -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: 设定非活动期限

例子  

usermod -s /bin/bash -d /home/terry7 -e 2017-09-30 terry8

表示把terry8 的账号的shell设置为/bin/bash,家目录修改为/home/terry7,过期日期设置为2017-09-30

修改 组

  • groupmod[OPTION]... group
    -n group_name: 新名字
    -g GID: 新的GID

例子 

groupmod -n terry3n -g 523 terry3

表示把terry3的组名改成terry3n,GID改为523


除了以上的两个命令对用户和组进行修改外,以下的命令也可以修改相关的属性

  • pwck:检查账号的信息,比如账号没有家目录,或者没有密码,就会报异常


  • grpck:检查组信息,比如同一组在/etc/group和/etc/gshadow的成员中不一致,就会报异常


  • 修改密码

    passwd[OPTIONS] UserName: 修改指定用户的密码,仅root用户权限,普通用户也可以通过passwd: 修改自己的密码
    常用选项:
    -l:锁定指定用户
    -u:解锁指定用户
    -e:强制用户下次登录修改密码
    -n mindays: 指定最短使用期限
    -x maxdays:最大使用期限
    -w warndays:提前多少天开始警告
    -iinactivedays:非活动期限
    --stdin:从标准输入接收用户密码
    echo "PASSWORD" | passwd--stdinUSERNAME


  • 修改用户密码策略

    chage[OPTION]... LOGIN
    -d LAST_DAY
    -E --expiredateEXPIRE_DATE
    -I --inactive INACTIVE
    -m --mindaysMIN_DAYS
    -M --maxdaysMAX_DAYS
    -W --warndaysWARN_DAYS
    –l 显示密码策略

    例子

    chage-d 0 tom 下一次tom登录强制重设密码


  • gpasswd[OPTION] GROUP
    -a user: 将user添加至指定组中
    -d user: 从指定组中移除用户user
    -A user1,user2,...: 设置有管理权限的用户列表


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


  • groupmems[options] [action]
    options:
    -g, --group groupname更改为指定组(只有root)
    Actions:
    -a, --add username 指定用户加入组
    -d, --delete username 从组中删除用户
    -p, --purge 从组中清除所有成员
    -l, --list 显示组成员列表
    例子
    groupmems -g tom -p
    表示清除组tom的成员列表


  • groups [OPTION].[USERNAME]... 查看用户所属组列表


以上就是关于linux系统中用户和组 增 删 改 的相关概念和命令。


本文出自 “自学linux” 博客,请务必保留此出处http://ghbsunny.blog.51cto.com/7759574/1950273

以上是关于用户和组 之 增删改的主要内容,如果未能解决你的问题,请参考以下文章

JS+JavaBean判断管理员增删改的操作权限

mysql 用户权限管理 之 增删改查

用户和组的管理小细节

Linux目录

Django框架操作之实现登录注册功能(数据库的增删改查)

❤️‍Spring全家桶从入门到大神--SpringMVC之SSM整合(用户-增删改查!)