linux用户与用户组管理

linux用户与用户组管理



1.linux用户管理

1.1 用户基础

  • linux的用户主要有如下作用:

    1. linux是一个多用户的操作系统,同一时间可以允许多个用户使用操作系统,处理不同事物。
    2. linux系统上的每个进程,都需要一个特定的额用户运行。
    3. 通常我们使用普通用户管理服务器,而非root用户。
  • 用户的分类

    每个用户在系统中都有一个ID与之对应,用于linux系统区分不同的用户,这个ID称为UID。

    UID的为一个无符号的整数值,范围是0-65535。

    系统中的用户分为以下几类(以centos 7为例):

    UID 用户类型及作用
    0 root,超级用户,拥有系统最高权限,注意:只要UID为0,则为超级用户。
    1-200 系统用户,用于运行系统自带的程序,默认已经创建。
    201-999 系统用户,用于运行用户安装的程序,一般无需登录系统,因此可将shell类型设置。为/sbin/nologin。
    1000-65535 普通用户,一般分配给个人使用,可以登录系统,权限较小。
  • 用户的家目录

    一般每个普通用户在创建时会自动在/home下创建一个同名的家目录,其权限为700。

    家目录在创建时会自动复制/etc/skel目录下的全部内容到家目录下。

    #家目录的权限
    [root@xuzhichao ~]# ll -d /home/xu/
    drwx------. 17 xu xu 4096 Nov  4  2020 /home/xu/
    
    #/etc/skel内容
    [root@xuzhichao ~]# ll -a /etc/skel/
    total 24
    drwxr-xr-x.   3 root root   78 Nov  4  2020 .
    drwxr-xr-x. 138 root root 8192 May 28 19:25 ..
    -rw-r--r--.   1 root root   18 Apr  1  2020 .bash_logout
    -rw-r--r--.   1 root root  193 Apr  1  2020 .bash_profile
    -rw-r--r--.   1 root root  231 Apr  1  2020 .bashrc
    drwxr-xr-x.   4 root root   39 Nov  4  2020 .mozilla
    
    • 当需要手动创建用户家目录时,可按照如下步骤操作:
    #步骤一:创建700的用户目录
    [root@xuzhichao ~]# cd /home/
    [root@xuzhichao home]# mkdir 700 /home/wang
    
    #步骤二:复制/etc/skel下的内容到家目录下
    [root@xuzhichao home]# cp -r /etc/skel/.[^.]* /home/wang/
    
    #步骤三:修改家目录及所属文件的属主数组
    [root@xuzhichao home]# chown wang:wang -R /home/wang/
    

1.2 /etc/passwd:用户信息文件

/etc/passwd文件用于记录所有用户的相关信息,文件内容如下:

[root@xuzhichao ~]# cat /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
......

/etc/passwd文件以冒号“:”为分隔符,分为7个字段,各个字段的意义如下:

字段 意义
root 用户名
x 用户密码,目前密码相关信息移到了/etc/shadow文件中
0 UID,每个用户都有一个唯一的UID值。
0 GID,用户所属组的id值
root 用户的描述信息
/root 用户的家目录,每个普通用户创建时会自动在/home下创建一个同名的家目录。
/bin/bash 用户默认的shell类型

1.3 /etc/shadow:用户密码信息文件

/etc/shadow文件用于记录每个用户的密码及密码的相关属性信息,一般与用户文件一一对应,文件内容如下:

[root@xuzhichao home]# cat /etc/shadow
root:$6$7FogQXhseo4ZNCvh$eyfPQhkWfjjIFkf4u3pfm5OYtZLQzsxHMsXkov6IKOGfppJmwLtZ11GSRszgk0o1IklDPsvXvEC8hXmi.32OL/::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::

/etc/shadow文件共有8个字段,含义如下:

字段 意义
root 用户名
$6$7FogQXh... 用户密码的密文,使用$分隔为3部分,第一部分代表密码加密使用的单项加密算法,其中1代表md5算法,6代表SHA512算法;第二部分代表加密算法使用的随机因子,称为“salt”,该随机数会和用户密码一起运行加密算法成为最终的密文,sait的作用避免两个一样的密码,加密后的值时一样的;第三部分则代表用户的密码密文,如果在密码前面有一个“!”表示该用户被锁定,无法登录系统,“*”则代表用户无密码,无密码的用户无法登录系统。
第三字段 表示从1970年1月1日那天算起,到修改密码的那天所经过的天数
0 表示再次修改密码需要经过的天数,即修改密码的最短时间,0表示可以随时修改密码
99999 表示再过多少天密码到期,即密码的最长使用时间
7 表示密码到期前多少天发送提示信息,即密码到期的7天前开始给用户发送提示信息,说明密码即将过期,要求用户修改密码
第7字段 表示密码过期后的的宽限时间,此时间内用户仍然可以登录系统,超过此时间,用户将无法登录系统
第8字段 表示用户过期日,即从1970年1月1日算起,多少天后此用户永久失效

1.4 用户查看工具

1.4.1 getent命令详解

getent可以用来查看/etc/passwd /etc/group /etc/shadow /etc/gshadow文件内容,并且可以过滤用户。

#示例:
[root@xuzhichao home]# getent passwd xu
xu:x:1000:1000:xu:/home/xu:/bin/bash

[root@xuzhichao home]# getent passwd xu root
xu:x:1000:1000:xu:/home/xu:/bin/bash
root:x:0:0:root:/root:/bin/bash

[root@xuzhichao home]# getent shadow xu
xu:$6$cn3f4OABrnCmWjJx$A12PX2F5FBhCpd/icRMJi2kGTFp3bwJDNqlj3hXvIS7gemPoSI/PpEhW3J/iNyI8FbzqhvoZBMCHy3XN5kek6/::0:99999:7:::

[root@xuzhichao home]# getent group xu
xu:x:1000:xu

[root@xuzhichao home]# getent gshadow xu
xu:!!::xu

1.4.2 id命令详解

id命令用于获取用户的uid和gid信息,常用选项如下:

选项 说明
-u 显示用户UID
-g 显示用户GID
-G 显示用户的主组和附加组的GID
-n 显示用户或组名称而非ID,配合ugG使用

id使用示例如下:

#示例一:查看xu用户的用户名和主组即附加组信息
[root@xuzhichao home]# id xu
uid=1000(xu) gid=1000(xu) groups=1000(xu),1004(xu1)

#示例二:单独查看用户的用户信息和组信息
[root@xuzhichao home]# id -u xu
1000
[root@xuzhichao home]# id -g xu
1000
[root@xuzhichao home]# id -G xu
1000 1004
[root@xuzhichao home]# id -Gn xu
xu xu1
[root@xuzhichao home]# id -un xu
xu

#示例三:使用id可判断用户是否存在
[root@xuzhichao ~]# id xu 
uid=1000(xu) gid=1000(xu) groups=1000(xu)
[root@xuzhichao ~]# echo $?
0
[root@xuzhichao ~]# id aaa
id: aaa: no such user
[root@xuzhichao ~]# echo $?
1

1.4.3 finger和chfn命令详解

finger命令用户用于修改,查看用户描述信息。即/etc/passwd文件中的第5个字段信息。

#安装finger
[root@xuzhichao home]# yum install finger -y

#示例:
[root@xuzhichao home]# finger xu
Login: xu             			Name: xu
Directory: /home/xu                 	Shell: /bin/bash
Last login Wed Nov  4 01:11 2020 (CST) on :0
No mail.
No Plan.

chfn命令用于修改用户的描述信息。

#示例:
[root@xuzhichao home]# chfn xu
Changing finger information for xu.
Name [xu]: 
Office []: maipu
Office Phone []: 1010101
Home Phone []: 111111

Finger information changed.

[root@xuzhichao home]# finger xu
Login: xu             			Name: xu
Directory: /home/xu                 	Shell: /bin/bash
Office: maipu, 101-0101			Home Phone: 111111
Last login Wed Nov  4 01:11 2020 (CST) on :0
No mail.
No Plan.

[root@xuzhichao home]# getent passwd xu
xu:x:1000:1000:xu,maipu,1010101,111111:/home/xu:/bin/bash

1.5 创建用户

1.5.1 useradd/adduser命令详解

useradd命令用于创建新的用户,一般由root用户来添加普通用户。

adduser命令则是useradd的一个软链接:

[root@xuzhichao home]# ll `which adduser`
lrwxrwxrwx. 1 root root 7 Nov  4  2020 /usr/sbin/adduser -> useradd

useradd命令的语法如下:

useradd [options] LOGIN

useradd命令的常用选项如下:

选项 说明
-u UID 指定创建用户的UID
-o 配合-u选项,不检查UID的唯一性
-g GID 指明用户所属的基本组,可为组的名称,也可以是GID
-c 指明用户的注释信息
-d 指定用户的家目录
-s 指定用户的默认shell类型,可用列表在/etc/shells文件中
-G 指定用户的附加组,单独使用会覆盖用户的原有附加组
-N 不创建与用户同名的私有组做主组,使用共用的users组为主组
-r 创建系统用户,默认不会创建家目录和邮箱
-m 创建家目录,一般用于系统用户
-M 不创建家目录,一般用于非系统用户
-D 显示或更改用户的默认设置
-f 指定用户的inactive时间,0表示用户立即过期,-1表示永不过期

useradd在创建用户时会有一些默认的配置,这些配置都是在配置文件中定义的,两个配置文件如下:

  • /etc/default/useradd

    [root@xuzhichao home]# cat /etc/default/useradd 
    # useradd defaults file
    GROUP=100    <==在useradd使用-N或/etc/login.defs中 USERGROUPS_ENAB=yes时表示创建用户时不创建用户同名的组,而是使用此处指定的组作为用户主组
    HOME=/home   <==用户家目录都创建在/home文件中
    INACTIVE=-1  <==是否启用账号过期设置,-1表示不启用
    EXPIRE=      <==账号过期时间,不设置表示不表示
    SHELL=/bin/bash  <==新建用户默认的shell类型
    SKEL=/etc/skel   <==指定用户家目录的模板目录,新建用户时会自动复制此目录下的内容到用户家目录中
    CREATE_MAIL_SPOOL=yes  <==是否创建用户的mail文件
    
  • /etc/login.defs

      [root@xuzhichao home]# cat /etc/login.defs 
      MAIL_DIR	/var/spool/mail   <==用户的邮件目录
      
      PASS_MAX_DAYS	99999      <==指定密码的最大使用时间
      PASS_MIN_DAYS	0          <==指定密码的最小使用时间
      PASS_MIN_LEN	5          <==指定密码的最小长度
      PASS_WARN_AGE	7          <==指定密码到期前的告警时间
     
      # Min/max values for automatic uid selection in useradd
      UID_MIN                  1000   <==自动创建用户时最小的UID值
      UID_MAX                 60000   <==自动创建用户时最大的UID值
    
      # System accounts
      SYS_UID_MIN               201   <==系统用户的最小UID
      SYS_UID_MAX               999   <==系统用户的最大UID
    
      # Min/max values for automatic gid selection in groupadd
      GID_MIN                  1000   <==普通用户的最小GID
      GID_MAX                 60000   <==普通用户的最大GID
    
      # System accounts
      SYS_GID_MIN               201   <==系统用户的最小GID
      SYS_GID_MAX               999   <==系统用户的最大GID
    
      # If useradd should create home directories for users by default
      # On RH systems, we do. This option is overridden with the -m flag on
      # useradd command line.
      CREATE_HOME	yes            <==创建用户时默认创建家目录
    
      # The permission mask is initialized to this value. If not specified, 
      # the permission mask will be initialized to 022.
      UMASK           077          <==家目录的默认umsak值
    
      # This enables userdel to remove user groups if no members exist.
      USERGROUPS_ENAB yes          <==yes表示删除用户时,如果该用户的主组中没有其他用户,则一起删除                                   这个组
      # Use SHA512 to encrypt password.
      ENCRYPT_METHOD SHA512        <==表示用户的密码信息摘要算法
    
  • useradd的-D选项用于查看和修改以上两个文件内容

    [root@xuzhichao home]# useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    
    #修改新创建用户的默认shell类型
    [root@xuzhichao home]# useradd -D -s /bin/csh 
    [root@xuzhichao home]# useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/csh
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    [root@xuzhichao home]# useradd -D -s /bin/bash
    

useradd命令的示例如下:

#示例一:使用默认参数创建用户
[root@xuzhichao home]# useradd xu1
[root@xuzhichao home]# getent passwd xu1
xu1:x:1004:1004::/home/xu1:/bin/bash

#示例二:创建mysql用户,使用uid为336,家目录为/data/mysql,shell为/sbin/nologin,主组为mysql,附加组为root,wheel,同时创建为系统用户,不创建默认的家目录
[root@xuzhichao home]# useradd -u 336 -d /data/mysql -s /sbin/nologin -g mysql -G root,wheel -M -r mysql 

#示例三:使用-N选项创建用户时不会创建同名组,会使用gid为100的组作为主组
[root@xuzhichao ~]# useradd -N xu3
[root@xuzhichao ~]# id xu3
uid=1009(xu3) gid=100(users) groups=100(users)

1.5.2 newusers命令 批量创建账号

newusers命令用法:

newusers filename

filename的格式与/etc/passwd的格式完全相同,只能批量创建用户,即在/etc/passwd中新建用户。不能创建密码。

#示例:
[root@xuzhichao ~]# cat passwd 
a1:x:1006:1006::/home/a1:/bin/bash
a2:x:1007:1007::/home/a2:/bin/csh
a3:x:1008:1008::/home/a3:/bin/bash
[root@xuzhichao ~]# newusers passwd 
[root@xuzhichao ~]# getent passwd a1 a2 a3
a1:x:1006:1006::/home/a1:/bin/bash
a2:x:1007:1007::/home/a2:/bin/csh
a3:x:1008:1008::/home/a3:/bin/bash

1.6 修改用户信息

1.6.1 usermod命令:修改用户信息

usermod命令用于修改用户的信息,语法如下:

usermod [options] LOGIN

usermod和useradd命令的选项很相似,常用选项说明如下:

选项 说明
-u UID 修改用户的UID
-o 允许用户使用重复的UID
-g GID 修改用户所属的主组
-c 修改用户的注释信息,即/etc/passwd的第五个字段
-d 修改用户的家目录,新家目录不会自动创建,若要创建新家目录并移动家目录中的数据,需要配合-m选项
-s 修改用户的默认shell类型,可用列表在/etc/shells文件中
-G 修改用户的附加组,单独使用会覆盖用户的原有附加组
-a 配合-G选项使用,用于增加用户附加组,不会覆盖用户原有附加组
-m 配合-d选项,移动家目录数据到新的家目录
-e 设置账号有效期,即修改/etc/shadow的第8个字段,格式为YYYY-MM-DD
-l 修改用户名
-f 修改用户的inactive时间,修改的是/etc/shadow文件的第7个字段,单位为天数,0表示用户立即过期,-1表示永不过期
-L 锁定用户,即在用户密码前加!,用户将无法登录系统,但是可以通过su切换到改用户
-U 解锁用户

usermod命令的使用示例如下:

#示例一:修改用户的uid
[root@xuzhichao ~]# useradd redis
[root@xuzhichao ~]# getent passwd redis
redis:x:1010:1010::/home/redis:/bin/bash
[root@xuzhichao ~]# usermod -u 1011 redis
[root@xuzhichao ~]# getent passwd redis
redis:x:1011:1010::/home/redis:/bin/bash

#示例二:修改用户的shell类型,当不需要用户登录系统时,可将其shell类型设置为/sbin/nologin
[root@xuzhichao ~]# usermod -s /sbin/nologin redis
[root@xuzhichao ~]# getent passwd redis
redis:x:1011:1010::/home/redis:/sbin/nologin
[root@xuzhichao ~]# su - redis
This account is currently not available.

#示例三:修改用户的描述信息
[root@xuzhichao ~]# usermod -c "redis" redis
[root@xuzhichao ~]# getent passwd redis
redis:x:1011:1010:redis:/home/redis:/sbin/nologin

#示例四:移动用户的家目录
[root@xuzhichao ~]# ls /home/redis/ -a
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
[root@xuzhichao ~]# usermod -m -d /data/redis redis
[root@xuzhichao ~]# ls -a /home/redis
ls: cannot access /home/redis: No such file or directory
[root@xuzhichao ~]# ls -a /data/redis/
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

#示例五:增加用户的附加组信息,注意:所有附加组需要提前存在
[root@xuzhichao home]# useradd xu2
[root@xuzhichao home]# id xu2
uid=1005(xu2) gid=1005(xu2) groups=1005(xu2)
[root@xuzhichao home]# usermod -G xu1 xu2
[root@xuzhichao home]# id xu2
uid=1005(xu2) gid=1005(xu2) groups=1005(xu2),1004(xu1)
[root@xuzhichao home]# usermod -a -G xu xu2
[root@xuzhichao home]# id xu2
uid=1005(xu2) gid=1005(xu2) groups=1005(xu2),1000(xu),1004(xu1)

#示例六:锁定与解锁用户,即在用户密码前加!
[root@xuzhichao ~]# echo 123456 | passwd --stdin redis
Changing password for user redis.
passwd: all authentication tokens updated successfully.
[root@xuzhichao ~]# getent shadow redis
redis:$6$RNZ2tyMm$ecGsvUThkAUmvaWCzAkcxgv1uW7EIZyRpH7tY1b6uHwXa8I2Di8OVOaBrLwn.Rg/mbbrjw/zCs5/0q3Ut9/mV.:18776:0:99999:7:::
[root@xuzhichao ~]# usermod -L redis
[root@xuzhichao ~]# getent shadow redis
redis:!$6$RNZ2tyMm$ecGsvUThkAUmvaWCzAkcxgv1uW7EIZyRpH7tY1b6uHwXa8I2Di8OVOaBrLwn.Rg/mbbrjw/zCs5/0q3Ut9/mV.:18776:0:99999:7:::
[root@xuzhichao ~]# usermod -U redis
[root@xuzhichao ~]# getent shadow redis
redis:$6$RNZ2tyMm$ecGsvUThkAUmvaWCzAkcxgv1uW7EIZyRpH7tY1b6uHwXa8I2Di8OVOaBrLwn.Rg/mbbrjw/zCs5/0q3Ut9/mV.:18776:0:99999:7:::

1.6.2 chsh命令:修改用户的shell类型

chsh命令专门用于修改用户的shell类型,语法格式为:

chsh [options] [username]

chsh的常用选项如下:

选项 说明
-l 列出系统中/etc/shells中的所有shell类型
-s 为指定的用户修改shell类型,若不加用户,则修改当前用户的shell类型

chsh的使用示例如下:

#示例一:列出/etc/shells文件中的所有shell类型
[root@xuzhichao ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

#示例二:修改用户的shell类型
[root@xuzhichao ~]# chsh -s /bin/sh
Changing shell for root.
Shell changed.
[root@xuzhichao ~]# chsh -s /bin/sh xu
Changing shell for xu.
Shell changed.

1.7 用户密码信息设定与修改

1.7.1 passwd命令:设定和修改用户密码信息

passwd命令用于设定用户密码,还可以设置/etc/shadow文件中的属性信息。

一般只有root用户可以修改用户的密码信息。

passwd命令的语法格式为:

passwd [OPTION...] <accountName>

passwd命令的常用选项如下:

选项 说明
-l 锁定用户,和usermod的-L选项意义相同
-u 解锁用户
-e 修改/etc/shadow文件的第三个字段为0,表示用户登录时要求立即修改密码,对su方式无效
-n 修改/etc/shadow文件的第四个字段,即密码的最短使用天数
-x 修改/etc/shadow文件的第五个字段,即密码的最长使用天数
-w 修改/etc/shadow文件的第六个字段,即密码过期前的警告天数
-i 修改/etc/shadow文件的第七个字段,即密码过期后的宽限时间
-S 显示用户密码的相关信息
--stdin 使用管道时传入用户密码,多用于脚本中设置密码

passwd命令直接跟上用户名表示交互式的设定或修改用户的密码信息,不加用户表示修改当前用户的密码信息。

#示例一:修改用户xu的密码
[root@xuzhichao ~]# passwd xu
Changing password for user xu.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password: 
passwd: all authentication tokens updated successfully.

#示例二:修改root的密码
[root@xuzhichao ~]# passwd
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

passwd也可以不进行交互直接设定或修改用户信息,使用参数--stdin即可,示例如下:

[root@xuzhichao ~]# echo "12345678" | passwd --stdin xu
Changing password for user xu.
passwd: all authentication tokens updated successfully.

passwd命令还可以修改用户的密码属性信息,示例如下:

#示例一:强制用户下次登录修改密码,实际就是把shadow文件的第三个字段修改为0
[root@xuzhichao ~]# passwd -e xu
Expiring password for user xu.
passwd: Success
[root@xuzhichao ~]# getent shadow xu
xu:$6$gcA1Hcoj$jMjJTycS5Ya4ZMiXsk.cZ4tzPGZ0uGZCACqX30GkYDLOmobkNBEQWVp21dR.Z7lS6qWv731SZMXKM7RqdeclB/:0:0:99999:7:::
#当xu用户重新登录时会有如下提示,修改完密码后系统会让xu用户重新登录系统
WARNING! The remote SSH server rejected X11 forwarding request.
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user xu.
Changing password for xu.
(current) UNIX password: 
New password: 
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

#示例二:锁定和解锁用户,即在用户密码前加!
[root@xuzhichao ~]# passwd -l xu
Locking password for user xu.
passwd: Success
[root@xuzhichao ~]# getent shadow xu
xu:!!$6$gcA1Hcoj$jMjJTycS5Ya4ZMiXsk.cZ4tzPGZ0uGZCACqX30GkYDLOmobkNBEQWVp21dR.Z7lS6qWv731SZMXKM7RqdeclB/:0:0:99999:7:::
[root@xuzhichao ~]# passwd -u xu
Unlocking password for user xu.
passwd: Success
[root@xuzhichao ~]# getent shadow xu
xu:$6$gcA1Hcoj$jMjJTycS5Ya4ZMiXsk.cZ4tzPGZ0uGZCACqX30GkYDLOmobkNBEQWVp21dR.Z7lS6qWv731SZMXKM7RqdeclB/:0:0:99999:7:::

#示例三:修改xu用户的密码到期前的警告天数
[root@xuzhichao ~]# passwd -w 10 xu
Adjusting aging data for user xu.
passwd: Success
[root@xuzhichao ~]# getent shadow xu
xu:$6$gcA1Hcoj$jMjJTycS5Ya4ZMiXsk.cZ4tzPGZ0uGZCACqX30GkYDLOmobkNBEQWVp21dR.Z7lS6qWv731SZMXKM7RqdeclB/:0:0:99999:10:::

#示例四:查看用户的密码信息
[root@xuzhichao ~]# passwd -S xu
xu PS 1970-01-01 0 99999 10 -1 (Password set, SHA512 crypt.)

1.7.2 chage命令:修改用户密码属性

chage命令和passwd命令一样,也可以修改用户密码文件的信息,语法格式为:

chage [options] LOGIN

chage命令的常用选项如下:

选项 说明
-d 修改/etc/shadow文件的第三个字段,格式为YYYY-MM-DD
-m 修改/etc/shadow文件的第四个字段,即密码的最短使用天数
-M 修改/etc/shadow文件的第五个字段,即密码的最长使用天数
-W 修改/etc/shadow文件的第六个字段,即密码过期前的警告天数
-I (大写i) 修改/etc/shadow文件的第七个字段,即密码过期后的宽限时间
-E 修改/etc/shadow文件的第八个字段,即密码失效日期,格式为YYYY-MM-DD
-l 显示用户密码的相关信息

chage命令可以直接修改用户的密码属性:

#示例:
[root@xuzhichao ~]# getent shadow xu1
xu1:$6$EB/nFz7N$BN/hGAmmsfXQhM9gcSO5/zoeh2PgAp4aIX.5fiLFFduePgJeTNmOpYYaJow9JAozn3o1HhWh.Z5A//gq9PA/w/:18776:0:99999:7:::
[root@xuzhichao ~]# chage xu1
Changing the aging information for xu1
Enter the new value, or press ENTER for the default

	Minimum Password Age [0]: 1
	Maximum Password Age [99999]: 30
	Last Password Change (YYYY-MM-DD) [2021-05-29]: 2021-01-01
	Password Expiration Warning [7]: 10
	Password Inactive [-1]: 7
	Account Expiration Date (YYYY-MM-DD) [-1]: 2022-01-01

[root@xuzhichao ~]# chage -l xu1
Last password change					: Jan 01, 2021
Password expires					: Jan 31, 2021
Password inactive					: Feb 07, 2021
Account expires						: Jan 01, 2022
Minimum number of days between password change		: 1
Maximum number of days between password change		: 30
Number of days of warning before password expires	: 10

chage命令的其他选项示例如下:

#示例一:强制xu1用户下次登录立即修改密码,同passwd -e选项
[root@xuzhichao ~]# chage -d 0 xu1

#示例二:修改用户的失效日期
[root@xuzhichao ~]# chage -E 2023-01-01 xu1

[root@xuzhichao ~]# chage -l xu1
Last password change					: password must be changed
Password expires					: password must be changed
Password inactive					: password must be changed
Account expires						: Jan 01, 2023
Minimum number of days between password change		: 1
Maximum number of days between password change		: 30
Number of days of warning before password expires	: 10

1.7.3 chpasswd命令 批量修改用户密码

chpasswd命令会从系统的标准输入读取用户的名称和口令,并利用这些信息来更新已存在的用户的口令

chpasswd命令语法格式为:

1:echo 用户名:密码 | chpasswd
2:chpasswd < passwd.txt

chpasswd命令的注意事项 :

  1. 用户名必须是系统上已存在的用户
  2. 普通用户没有使用这个指令的权限
  3. 如果输入文件是按非加密方式传递的话,请对该文件进行适当的加密。
  4. 指令文件不能有空行

chpasswd命令的使用示例如下:

#示例一:修改xu1的密码
[root@xuzhichao ~]# echo xu1:123456 | chpasswd

#示例二:批量修改用户密码
#创建密码文件
[root@xuzhichao ~]# cat chpasswd.txt 
xu2:123456
xu3:123456
xu4:123456
xu5:123456
xu6:123456
#批量创建用户
[root@xuzhichao ~]# for i in {2..6} ;do useradd xu$i ;done
#批量修改用户密码
[root@xuzhichao ~]# chpasswd < chpasswd.txt 
[root@xuzhichao ~]# getent shadow xu2 xu3 xu4 xu5 xu6
xu2:$6$Hv9ZU/A9WIa/fUwF$JMd/UJI.EurF7bfaX7micSe1mnZe9r8vrvuRVTETXvlMg3EtauvcEaIIODKkFIdigSGfr6I2iyJvrvSASX/Ev1:18776:0:99999:7:::
xu3:$6$7bJOMpw35H/yG$xjx8awE32OApQzs6q4.JKHpcX4nF05XqXpZdIct9WJZ7LX4Tcl/JFnCTGTmNwqI2/SDYB0YPVdW9/I4I8uZHU.:18776:0:99999:7:::
xu4:$6$HdUR3/6LtWW/$o0Pa4KON/W429thbKpsJJxZ6ndss6IOkXYEhWIc7cTxZnBxm8xaEUMfwsUZDdqSQi/ooTf2619x/kdF5jELTk1:18776:0:99999:7:::
xu5:$6$EYBYc1qL$kRah4B7aoXVmMYzNCp6Vw8QwG/2B0OqPG6xqZ6KTJCFRHhP5tJYzfmrcYoyE3DTCK/y/uc8RMudgne6cPRz3i/:18776:0:99999:7:::
xu6:$6$8bB2n/nT.ZZnI1$oGx1Z4Lcw2H9R4DIURUEl0oDqXkNFWyFAA4FapXGI63SkPk6Aiiuz8ylVq4fPr2tEggrbpJZdNGarNCy.X.wR0:18776:0:99999:7:::

1.8 删除用户

删除用户使用userdel命令,语法格式为:

userdel [options] LOGIN

userde命令l的常用选项如下:

选项 说明
-r 删除用户的连同用户的家目录和邮箱目录一同删除

userdel命令的使用示例如下:

#示例:
[root@xuzhichao ~]# userdel -r xu1

2.linux用户组管理

当用户众多时,可以将用户根据权限的不同加以分类后,将同一类账号加入一个组中,使之成为组的成员,这样对组进行授权时,组成员也就具有了相同的权限,极大提高了工作效率。

和用户一样,每个组也有一个ID用于系统识别该组,称为GID。

GID的范围和UID一样,为0-65535,其中1-999为系统用户组,999以上为普通用户组,0为超级用户组。

注意:当把一个账号新加入一个组中时,若该用户正处于登陆状态,则此时该用户并没有成功加入该用户组,需要用户重新登录时生效。

2.1 /etc/group:用户组文件

/etc/group文件用于存放用户组的相关信息,内容如下:

[root@xuzhichao ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:

/etc/group文件共有4个字段,意义如下:

字段 说明
root 代表用户组名称
x 用户组密码,具体密码信息放置在/etc/gshadow文件中
0 未用户组ID,即GID
第四个字段 附加组为此组的用户列表,主组为此组的成员不会显示,多个用户之间使用逗号隔开

2.2 /etc/gshadow:用户组密码文件

/etc/gshadow文件用于存放组密码的相关信息,内容如下:

[root@xuzhichao ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::

/etc/gshadow文件共有4个字段,意义如下:

字段 说明
root 用户组名称
第二字段 组管理密码
第三字段 该组的组管理员用户账号,多个账号之间用逗号隔开
第四字段 附加组为此组的用户列表,主组为此组的成员不会显示,多个用户之间使用逗号隔开

创建组管理员和组密码后,可以让组管理员对组成员进行管理。

2.3 用户组类别

  • 用户组共有以下几类:

    • 默认组:创建用户时不指定组,则默认创建一个与用户同名的组;
    • 基本组:用户有且只有一个基本组,创建时使用-g指定;
    • 附加组:用户可以由多个附加组,创建时使用-G指定;
  • 用户组还有初始用户组和有效用户组的概念:

    • 初始用户组:用户登录系统就会立即取得这个用户组的相关权限;
    • 有效用户组:即为用户当前生效的用户组,用户创建文件时文件的属组则是用户的有效用户组;
  • groups命令:用于查看用户所有支持的组,使用示例如下:

    #把xu用户加入用户组xu1,xu2中作为其附加组
    [root@xuzhichao ~]# usermod -G xu1,xu2 xu
    [root@xuzhichao ~]# id xu
    uid=1000(xu) gid=1000(xu) groups=1000(xu),1012(xu1),1013(xu2)
    
    #把xu加入xu1和xu2组后,在/etc/group中xu1和xu2组的附加组成员中就会出现xu用户
    [root@xuzhichao ~]# getent group xu1 xu2
    xu1:x:1012:xu
    xu2:x:1013:xu
    
    #查看xu用户的所有支持的组,其中第一个组就是用户的有效用户组,用户创建文件时文件的属组则是用户的有效用户组
    [root@xuzhichao ~]# groups xu
    xu : xu xu1 xu2
    
    [xu@xuzhichao ~]$ touch abc
    [xu@xuzhichao ~]$ ll abc
    -rw-rw-r-- 1 xu xu 0 May 30 14:48 abc
    
  • newgrp命令:用于临时切换用户的有效用户组,切换的用户组需要是用户已经支持的用户组。

    注意:newgrp命令切换用户组是新开启一个shell来实现的,使用exit可以退回用户原来的组中

    #示例:切换xu用户的有效用户组为xu1
    [xu@xuzhichao ~]$ newgrp xu1
    [xu@xuzhichao ~]$ groups
    xu1 xu xu2
    [xu@xuzhichao ~]$ touch abc1
    [xu@xuzhichao ~]$ ll abc1
    rw-r--r-- 1 xu xu1 0 May 30 14:54 abc1
    #退回用户原来的用户组中
    [xu@xuzhichao ~]$ exit
    exit
    [xu@xuzhichao ~]$ groups
    xu xu1 xu2
    

2.4 groupadd命令:创建用户组

groupadd命令用于创建用户组,语法格式为:

groupadd [options] GROUP

groupadd命令的常用选项如下:

选项 说明
-g 指定创建组的GID
-r 创建系统组
-f 当创建的组已经存在时,不会报错,会返回成功
-o 允许GID相同的组存在

groupadd命令的使用示例如下:

#示例一:创建gid为400的系统用户组
[root@xuzhichao ~]# groupadd -g 400 -r mygrp
[root@xuzhichao ~]# getent group mygrp
mygrp:x:400:

#示例二:
root@xuzhichao ~]# groupadd -f xu
[root@xuzhichao ~]# echo $?
0

2.5 修改用户组信息

2.5.1 groupmod命令:修改用户组信息

groupmod命令的语法格式为:

groupmod [options] GROUP

groupmod命令的常用选项如下:

选项 说明
-g 修改GID
-n 修改组名
-o 允许GID相同的组存在

groupmod命令的使用示例如下:

#示例:修改组的组名和gid
[root@xuzhichao ~]# groupmod -g 401 -n mygroup mygrp
[root@xuzhichao ~]# getent group mygroup
mygroup:x:401:

2.5.2 groupmems命令:组成员管理

groupmems命令用于管理组的成员,管理的是以附加组加入的组成员,语法格式为:

groupmems [options] [action]

groupmems命令常见选项如下:

选项 说明
-g 指定要修改的组名
-a 向指定组中增加成员
-d 向指定组中删除成员
-l 列出组成员列表
-p 清空所有用户

groupmems命令的示例如下:

#示例一:向xu组中增加用户
[root@xuzhichao ~]# getent group xu
xu:x:1000:
[root@xuzhichao ~]# groupmems -g xu -a xu1
[root@xuzhichao ~]# groupmems -g xu -a xu2
[root@xuzhichao ~]# getent group xu
xu:x:1000:xu1,xu2

#删除xu组中的用户
[root@xuzhichao ~]# groupmems -g xu -d xu2
[root@xuzhichao ~]# getent group xu
xu:x:1000:xu1

#查看以附加组加入xu组的用户
[root@xuzhichao ~]# groupmems -g xu -l
xu1 

#清空xu组的成员
[root@xuzhichao ~]# groupmems -g xu -p
[root@xuzhichao ~]# groupmems -g xu -l
[root@xuzhichao ~]# getent group xu
xu:x:1000:

2.5.3 gpasswd命令:修改设置组密码

gpasswd命令用于修改和设置组密码,使用组密码用户可以自行加组并设置该组为有效用户组,组管理员也可以自行将用户加入或剔除出组。

gpasswd命令的常见选项如下:

选项 说明
-a 添加用户到组中,组指的是附加组
-d 将一个用户从组中删除
-r 取消组密码
-A 设置组管理员
-M 设置组成员

gpasswd命令的用法示例:

#示例一:组密码的作用,用户自行加组
#为用户组设定密码
[root@xuzhichao ~]# getent gshadow xu
xu:!!::
[root@xuzhichao ~]# gpasswd xu
Changing the password for group xu
New Password: 
Re-enter new password: 
[root@xuzhichao ~]# getent gshadow xu
xu:$6$EMshnDxN4Wf5mfO$mgiwGrVH7tCMSduNDbOKX1htVPRhgGCRbo2Tneup57ZxdFIWEjYvX8eloNUVpjUVRoGCYsBi5BKv8624wQS9N/::
#用户自行加组为有效用户组,临时行为,用户并非永久加入用户组xu中
[root@xuzhichao ~]# su - xu1
-bash: colorscheme: command not found
[xu1@xuzhichao ~]$ groups
xu1
[xu1@xuzhichao ~]$ newgrp xu
Password: 
bash: colorscheme: command not found
[xu1@xuzhichao ~]$ groups
xu xu1
[xu1@xuzhichao ~]$ id
uid=1017(xu1) gid=1000(xu) groups=1000(xu),1017(xu1)

#示例二:加入或删除组成员
[root@xuzhichao ~]# getent group xu
xu:x:1000:
[root@xuzhichao ~]# gpasswd -a xu1 xu
Adding user xu1 to group xu
[root@xuzhichao ~]# getent group xu
xu:x:1000:xu1
[root@xuzhichao ~]# gpasswd -d xu1 xu
Removing user xu1 from group xu
[root@xuzhichao ~]# getent group xu
xu:x:1000:

#示例三:设置组管理员
[root@xuzhichao ~]# gpasswd  -A xu xu
[root@xuzhichao ~]# getent gshadow xu
xu:$6$EMshnDxN4Wf5mfO$mgiwGrVH7tCMSduNDbOKX1htVPRhgGCRbo2Tneup57ZxdFIWEjYvX8eloNUVpjUVRoGCYsBi5BKv8624wQS9N/:xu:
#使用xu用户加入和删除组成员
[root@xuzhichao ~]# su - xu
Last login: Sun May 30 14:48:22 CST 2021 on pts/2
-bash: colorscheme: command not found
[xu@xuzhichao ~]$ gpasswd -a xu1 xu
Adding user xu1 to group xu
[xu@xuzhichao ~]$ getent group xu
xu:x:1000:xu1
[xu@xuzhichao ~]$ gpasswd -d xu1 xu
Removing user xu1 from group xu
[xu@xuzhichao ~]$ getent group xu
xu:x:1000:

2.6 删除组

groupdel命令用户删除用户组。

注意:要删除的组不能是用户的主组,否则该组无法删除。

groupdel命令的语法格式为:

groupdel [options] GROUP

groupdel命令的使用示例:

#示例一:删除组xu1,因为xu1用户的主组为xu1,因此无法删除该组,除非先删除xu1用户或修改xu1的主组,才能删除该组
[root@xuzhichao ~]# groupdel xu1
groupdel: cannot remove the primary group of user ‘xu1‘
[root@xuzhichao ~]# usermod -g xu xu1
[root@xuzhichao ~]# groupdel xu1   <==删除成功

2.7 管理用户和组的配置文件

2.7.1 vipw和vigr命令的使用

vipw和vigr命令用于编辑/etc/passwd和/etc/group文件,并且可以检查文件中语法是否错误。

vipw -s 用于编辑/etc/shadow文件;

vigr -s用于编辑/etc/gshadow文件;

#示例:
[root@xuzhichao ~]# vipw
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
......

You have modified /etc/passwd.
You may need to modify /etc/shadow for consistency.
Please use the command ‘vipw -s‘ to do so.

2.7.2 pwck和grpck命令检查配置文件

pwck和grpck命令用于检测/etc/passwd和/etc/group文件的格式和一致性。

#示例:
[root@xuzhichao ~]# pwck
user ‘ftp‘: directory ‘/var/ftp‘ does not exist
user ‘pulse‘: directory ‘/var/run/pulse‘ does not exist
user ‘gluster‘: directory ‘/run/gluster‘ does not exist
invalid password file entry
delete line ‘xu10‘? y
invalid password file entry
delete line ‘‘? y
pwck: the files have been updated
[root@xuzhichao ~]# grpck
invalid group file entry
delete line ‘a‘? y
grpck: the files have been updated

linux用户与用户组管理

上一篇:mac如何进入隐藏文件夹


下一篇:linux dma