Linux用户管理之useradd、passwd命令讲解

在上一章中,我们了解到了Linux用户的每个配置文件的内容及作用,以及通过手动修改用户配置文件来手动添加一个用户。但是在实际工作过程中,我们并不是通过手动修改配置来添加用户,而是通过用户管理的各种命令来管理用户。

一、添加用户命令:useradd

Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下:

useradd [选项] 用户名 -D查看缺省参数

该命令常用的选项及各自的含义如下:

  • u:UID,指定用户的 UID,在上一章我们了解到普通用户UID的范围是500-60000之间
  • d:宿主目录
  • c:用户说明,对应在/etc/passwd文件中第5部分,输入便于理解的用户说明即可
  • g:组名,指定用户所属的群组
  • G:组名,指定用户所属的附加群组
  • s:手工指定用户的登录 Shell,在上一章我们了解到默认是/bin/bash
  • e:指定用户的失效曰期,格式为 “YYYY-MM-DD”

比如现在要创建一个用户,所属root组,然后给这个用户添加一个用户说明:

$ useradd -g root -c "this is my test user" testuser

执行完这条命令之后,我们就在系统中创建了一个名叫testuser的用户,我们查看一下/etc/passwd文件,就发现里面已经存在一条刚添加的用户信息:

image

如果想使用这个用户登录,我们再给这个用户设置一个秘密就可以了:

$ passwd testuser

image

一般情况下,我们创建新用户可以不手工指定任何参数内容,因为使用Linux的默认值就可以满足我们的要求。useradd 命令在添加用户时参考的默认值文件主要有两个,分别是 /etc/default/useradd/etc/login.defs。这两个文件上一章我们已经介绍了,这里我们只简单回顾一下/etc/default/useradd

$ useradd -D

image

  • GR0UP=100: 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。Linux中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。

  • HOME=/home: 指的是用户宿主目录的默认位置,刚刚新建的 testuser 用户的主目录就为 /home/testuser/

  • INACTIVE=-1: 帐号是否过期,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,永不过期。

  • EXPIRE=: 表示密码失效时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。

  • SHELL=/bin/bash: 表示所有新建立的用户默认 Shell 都是 /bin/bash

  • SKEL=/etc/skel: 在创建一个新用户后,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。

  • CREATE_MAIL_SPOOL=yes: 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。testuser的邮箱位于 /var/spool/mail/testuser。

因此我们可以理解useradd命令创建用户的系统内部流程应该是这样的:

1、系统首先读取 /etc/login.defs 和 /etc/default/useradd,根据这两个配置文件中定义的规则添加用户,也就是向 /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow 文件中添加用户数据

2、接着系统会自动在 /etc/default/useradd 文件设定的目录下建立宿主目录,最后复制 /etc/skel 目录中的所有文件到此目录中。至此,一个新的用户就创建完成了。

二、修改用户密码命令:passwd

在上面讲解添加用户命令的时候,其实我们已经用到了 passwd 命令,接下来我们详细详解一下这个命令。

此命令的基本格式如下:

passwd [选项] 用户名

该命令常用的选项及各自的含义如下:

  • d:删除密码信息
  • w:密码要到期提前警告的天数,对应于 /etc/shadow 文件中各行的第6个字段
  • S:显示密码信息,也就是 /etc/shadow 文件中此用户密码的内容,仅 root 用户可用
  • l:停止账号使用,也就是使密码失效,仅root用户可用
  • u:解锁用户,与上面的 l 参数对应,仅root用户可用
  • x: 设置用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段
  • n:设置该用户修改密码后,多长时间不能再次修改密码,对应于 /etc/shadow 文件中各行密码的第4个字段
1、比如设置刚添加的用户 testuser 的密码:
$ passwd testuser
$ New password:  #输入密码,这里不会明文显示
$ Retype new password:  #再次输入密码
$ passwd:all authentication tokens updated successfully. #提示密码修改成功
2、显示用户的密码信息:

$ passwd -S testuser #注意这里的参数 S 是大写

image

testuser PS 2020-06-17 0 99999 7 -1 (Password set, SHA512 crypt.)

# 用户名:密码:设定时间:密码修改间隔时间(0)密码有效期(99999)警告时间(7)密码不失效(-1)

这里的密码修改间隔时间、密码有效期、警告时间、密码宽限时间其实来源于配置文件 /etc/shadow 的设置。这里显示密码加密方式为SHA512,从CentOS 6.3 加密方式已经从 MD5 加密更新到 SHA512

3、锁定用户

$ passwd -l testuser

image

锁定该用户之后,我们查看用户的密码信息,发现信息最后的提示是 Password locked.,很清楚的显示密码已经被锁定。系统锁定用户的的处理方式是什么呢?我们查看下/etc/shadow文件看下:

$ grep "testuser" /etc/shadow

image

大家仔细看下,在密码位前面加入了!!让密码失效而已。

4、解锁用户

既然能够锁定用户,自然也能解锁用户:

$ passwd -u testuser

image

执行命令解锁用户之后,用户状态就恢复正常了。

今天为大家讲解了Linux用户管理最基础的两个命令,一个是添加用户、一个是修改用户密码。下一章继续为大家讲解Linux用户管理的其他命令。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!