• Linux学习-27-usermod、chage、userdel和id等用户信息相关命令


    8.11 Linux usermod命令:修改用户信息
    • 修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

    • 利用 useradd 命令添加用户,但如果不小心添错用户信息.办法有两个,一个是使用 Vim 文本编辑器手动修改涉及用户信息的相关文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),另一个方法就是使用本节介绍了 usermod 命令,该命令专门用于修改用户信息。这里一定要分清 useradd 命令和 usermod 命令的区别,前者用于添加用户,当然,添加用户时可以对用户信息进行定制;后者针对与已存在的用户,使用该命令可以修改它们的信息。

    • usermod 命令的基本格式如下:

      [root@localhost ~]#usermod [选项] 用户名
      
      • 1
    • 选项意义与useradd命令中的选项一样,可以为用户指定新的资源值。:

      • -c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段;
      • -d 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径

      注意:-d选项只是在 /etc/passwd修改了主目录字段信息,但在/home/xxx并没有新建这个主目录文件,所以切换了对应用户后找不到自己的主目录,所以在修改之前要创建好这个主目录

      • -e 日期:修改用户的失效曰期,格式为 “YYYY-MM-DD”,即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段;
      • -g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID);
      • -u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID);
      • -G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;
      • -l 用户名:修改用户名称;
    • -L:临时锁定用户(Lock);

      • -U:解锁用户(Unlock),和 -L 对应;
      • -s shell:修改用户的登录 Shell,默认是 /bin/bash。
    • 其实 usermod 命令提供的选项和 useradd 命令的选项相似,因为 usermod 命令就是用来调整使用 useradd 命令添加的用户信息的。不过,相比 useradd 命令,usermod 命令还多出了几个选项,即 -L 和 -U,作用分别与 passwd 命令的 -l 和-u 相同。需要注意的是,并不是所有的 Linux 发行版都包含这个命令,因此,使用前可以使用 man usermod 命令确定系统是否支持。

    • 此命令对用户的临时锁定,同 passwd 命令一样,都是在 /etc/passwd 文件目标用户的加密密码字段前添加 “!”,使密码失效;反之,解锁用户就是将添加的 “!” 去掉。

    • usermod 命令几个选项

    #修改用户说明
    [root@CncLucZK /]# usermod -c 'commons user' zk
    [root@CncLucZK /]# grep 'zk' /etc/passwd
    zk:x:1002:1002:commons user:/home/zk:/bin/bash
    #查看一下,用户说明已经被修改了
    [root@CncLucZK /]# usermod -G root  zk
    [root@CncLucZK /]# grep 'zk' /etc/group
    root:x:0:zk
    zk:x:1002:
    # zk用户已经加入了root组
    #锁定用户
    [root@CncLucZK /]# usermod -L  zk
    [root@CncLucZK /]# grep 'zk' /etc/shadow
    zk:!$6$bdt64rdePE48Buj8$9JqVpoD4ohXXxmHd.R33AbeSDrQw26wufW1jOyQJRmNcOSB4Y0DWdoNNacmyq5rlGHUJuyjbBwsqmR4NtrYak0:19279:0:99999:7:::
    #解锁用户
    [root@CncLucZK /]# usermod -U zk
    [root@CncLucZK /]# grep 'zk' /etc/shadow
    zk:$6$bdt64rdePE48Buj8$9JqVpoD4ohXXxmHd.R33AbeSDrQw26wufW1jOyQJRmNcOSB4Y0DWdoNNacmyq5rlGHUJuyjbBwsqmR4NtrYak0:19279:0:99999:7:::
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    8.12 Linux chage用法详解:修改用户密码状态
    • 除了 passwd -S 命令可以查看用户的密码信息外,还可以利用 chage 命令,它可以显示更加详细的用户密码信息,并且和 passwd 命令一样,提供了修改用户密码信息的功能。如果你要修改用户的密码信息,我个人建议,还是直接修改 /etc/shadow 文件更加方便。
    • 既然直接修改用户密码文件更方便,为什么还要讲解 chage 命令呢?因为 chage 命令除了修改密码信息的功能外,还可以强制用户在第一次登录后,必须先修改密码,并利用新密码重新登陆系统,此用户才能正常使用。
    • chage 命令的基本格式:
    [root@CncLucZK ~]#chage [选项] 用户名
    
    • 1
    • 选项:

      • -l:列出用户的详细密码状态;
      • -d 日期:修改 /etc/shadow 文件中指定用户密码信息的第 3 个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
      • -m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第 4 个字段;
      • -M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第 5 个字段;
      • -W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第 6 个字段;
      • -i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第 7 个字段;
      • -E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 个字段。
    • 例如:

    #查看一下用户密码状态
    [root@CncLucZK /]# chage -l zk
    Last password change					: Oct 14, 2022
    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 我们创建 zk用户,并让其首次登陆系统后立即修改密码,执行命令如下:
    #创建新用户 zk
    [root@CncLucZK ~]#useradd zk
    #设置用户初始密码为 123456
    [root@CncLucZK ~]#echo "123456" | passwd --stdin zk
    #通过chage命令设置此账号密码创建的日期为 1970 年 1 月 1 日(0 就表示这一天),这样用户登陆后就必须修改密码
    [root@CncLucZK ~]#chage -d 0 zk
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 这样修改完 zk用户后,我们尝试用 zk用户登陆系统(初始密码是 123456):
    local host login:zk
    Password:     															#输入密码登陆
    You are required to change your password immediately (root enforced)
    changing password for zk.     									#有一些提示,就是说明 root 强制你登录后修改密码
    (current)UNIX password:123456
    #输入旧密码
    New password:
    Retype new password:
    #输入两次新密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    chage 的这个功能常和 passwd 批量初始化用户密码功能合用,且对系统管理员帮助比较大,因为系统管理员不想知道学生账号的密码,他们在初次登陆时就使用默认的密码给用户,让他们登陆时自行设置他们的密码。这样一来,既能避免用户之间随意使用别人的账号,也能保证用户知道如何修改自己的密码。

    8.13 Linux userdel命令详解:删除用户
    • 如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

    • userdel 命令功能很简单,就是删除用户的相关数据。此命令只有 root 用户才能使用。

    • 用户的相关数据包含如下几项:

      • 用户基本信息:存储在 /etc/passwd 文件中;
      • 用户密码信息:存储在 /etc/shadow 文件中;
      • 用户群组基本信息:存储在 /etc/group 文件中;
      • 用户群组信息信息:存储在 /etc/gshadow 文件中;
      • 用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。
    • userdel 命令的作用就是从以上文件中,删除与指定用户有关的数据信息。

    • userdel 命令的语法很简单,基本格式如下:

    [root@CncLucZK ~]# userdel -r 用户名
    
    • 1
    • -r 选项表示在删除用户的同时删除用户的家目录。注意,在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件。

    • 删除前面章节中创建的 u-dev1 用户,只需执行如下命令:

    [zk@CncLucZK ~]$ userdel -r u-dev1
    
    • 1
    • 除了使用 userdel 命令删除用户,还可以手动方式删除,我们已经知道与用户相关信息的存储位置。这样可以加深对 userdel 命令的理解。删除 /etc/passwd 、 /etc/shadow 、/etc/group 、 /etc/gshadow文件中和’zk‘相关的行,但要注意用户组中附加用户是zk的记录,仅仅去掉zk这个附加用户即可。修改影子文件 /etc/shadow,删除zk用户密码行,注意,这个文件的权限是400,所以要强制保存:wq
    #建立新 zk 用户
    [root@CncLucZK ~]# useradd zk
    [root@CncLucZK ~]# passwd zk
    #为 zk 用户设置密码,由此 zk 用户才算是创建成功
    #下面开始手动删除 zk
    [root@CncLucZK ~]# vi /etc/passwd
    zk:x:1002:1002::/home/zk:/bin/bash   <--删除此行
    #修改用户信息文件,删除zk用户行
    [root@CncLucZK ~]# ll -d /etc/shadow
    -r-------- 1 root root 1769 Oct 16 22:42 /etc/shadow
    [root@CncLucZK ~]#vi /etc/shadow
    zk:$6$KoOYtcOJ $56Xk9vp3D2vMRBxibNOn.21cVJ9onbW8IHx4WrOx6qBqfGa9U3mjMsGjqYnj L/4t3zt3YxElce2X8rbb12x4a0:15716:0:99999:7:::   <--删除此行
    #修改影子文件,删除zk用户密码行,注意,这个文件的权限是400,所以要强制保存:wq
    [root@CncLucZK ~]#vi /etc/group
    zk:x:1002:  <--删除此行
    #修改组信息文件,删除zk群组信息
    [root@CncLucZK ~]#vi /etc/gshadow
    zk:!::  <--删除此行
    #修改组影子文件,删除zk群组密码信息。同样注意需要强制保存
    [root@CncLucZK ~]# rm -rf /var/spod/mail/zk  #删除用户邮箱
    [root@CncLucZK ~]# rm -rf /home/zk/  #删除用户的家目录
    #至此,用户彻底删除,再新建用户zk。如果可以正常建立,则说明我们手工删除干净了
    [root@CncLucZK ~]# useradd zk
    [root@CncLucZK ~]# passwd zk
    #重新建立同名用户,没有报错,说明前面的手工删除是可以完全删除用户的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    手动删除用户,仅是为了对 userdel 命令理解地更透彻,实际使用中,使用 userdel 删除用户更方便。

    最后需要大家注意的是,如果要删除的用户已经使用过系统一段时间,那么此用户可能在系统中留有其他文件,因此,如果我们想要从系统中彻底的删除某个用户,最好在使用 userdel 命令之前,先通过 find -user 用户名 命令查出系统中属于该用户的文件,然后在加以删除。

    8.14 Linux id命令:查看用户的UID和GID
    • id 命令可以查询用户的UID、GID 和附加组的信息。命令比较简单,格式如下:
    [root@CncLucZK ~]# id 用户名
    
    • 1
    [zk@CncLucZK ~]$ id u-dev1
    uid=1003(u-dev1) gid=1003(u-dev1) groups=1003(u-dev1),100(users)
    [zk@CncLucZK ~]$ id zk
    uid=1002(zk) gid=1002(zk) groups=1002(zk)
    #能看到uid(用户ID)、gid(初始组ID), groups是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组
    [root@CncLucZK ~]# usermod -G root zk
    #把用户加入root组
    [root@CncLucZK ~]# id zk
    uid=1002(zk) gid=1002(zk) groups=1002(zk),0(root)
    #大家发现root组中加入了zk用户的附加组信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    参考文献:
    Linux usermod命令:修改用户信息
    Linux 用户和用户组管理

    下一篇:Linux学习-28-用户间切换相关命令
  • 相关阅读:
    MySQL索引入门看这个就够了
    观察者模式
    ES 搜索引擎的分片数、副本数分配算法
    初步读懂linux内核结构
    Swagger2的使用和springboot的集成
    【IPC 通信】信号处理接口 Signal API(3)
    Java基础-day08-再谈泛型
    【MineCraft】-- 如何开设我的世界服务器
    linux篇【11】:linux下的线程<后序>
    多级缓存(笔记)
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/127785686