用户和组管理

用户管理

用户配置文件和密码配置文件

用户配置文件/etc/passwd

# 打印passwd最后一行
[root@lwz ~]# tail -n 1 /etc/passwd
lwz:x:1000:1000:lwz:/home/lwz:/bin/bash

每一行代表一个用户信息,每一列用冒号分隔一共七列:

  • 第一列:用户名

  • 第二列:密码占位符,早期为用户的密码,后来因为安全问题,将密码保存在/etc/shadow文件里

  • 第三列:用户的uid

  • 第四列:用户的gid

  • 第五列:用户的注释描述信息,没有实际作用

  • 第六列:用户的家目录

  • 第七列:用户的登录shell,默认是/bin/bash

密码配置文件/etc/shadow

# 打印shadow最后一行
[root@lwz ~]# tail -n 1 /etc/shadow
lwz:$6$ln8kW5.8ArWsqx.q$ehOeZbPhdbH1PtCtOwGekwn1CNwSITlNxQXIzfRbVNDuaTbxd0ylwAPRWIW1vBRenGl2NHQEVxBsPiNpNFs5p1::0:99999:7:::

/etc/passwd对应,每一行代表一个用户信息,每一列用冒号分隔,一共九列:

  • 第一列:用户名

  • 第二列:加密后的密码

    • 加密方式:

      • 如果密码为星号,或者密码的第一位是星号,代表这个用户是禁用状态,不可登陆。

      • 如果为空,用户登陆不需要密码。

      • !!:密码已经过期。

      • !:密码开头第一位为,用户被锁,无法登陆。

      • $6$:开头,表示使用SHA-512算法加密。

      • $1$:开头,表示使用MD5算法加密。

      • $2$:开头,表示使用Blowfish算法加密。

      • $5$:开头,表示使用SHA-256算法加密。

  • 第三列:最近一次更改密码距离1970年1月1日总共多少天。

  • 第四列:多少天后才可以更改密码,默认为0,不限制。

  • 第五列:多少天内必须更改密码,否则密码过期,且无法登陆。

  • 第六列:警告提醒,提示距离密码过期还有多少天。

  • 第七列:不活动时间,用户没有登陆活动但账号仍能保持有效的最大天数。

  • 第八列:用户距离1970年多少天后过期。

  • 第九列:保留字段,没有实际作用。

查看用户id信息:id

id:可以查看用户用户的uid、gid和附加组的gid信息。

# root用户id信息
[root@lwz ~]# id
uid=0(root) gid=0(root) =0(root)

# 查看指定用户id信息
[root@lwz ~]# id lwz
uid=1000(lwz) gid=1000(lwz) =1000(lwz),10(wheel)

10(wheel):wheel组,是Linux系统中的一个特殊组,它包含所有允许登陆系统的用户。

语法:

id [选项] 用户名

选项:

  • -u:查看用户的uid信息。

  • -g:查看用户的gid信息。

  • -G:查看用户的附加组信息。

  • -n:不显示用户名。可以和-u -g -G单独配合使用,只显示用户名、组名和附加组名。

添加用户useradd

语法

useradd [选项] 用户名   

中括号表示内容可有可无。

选项:

  • -u:指定uid。root用户为0,centos7的普通用户从1000开始,并且不能重复。

  • -g:指定gid。gid必须是已经存在的。

  • -d:指定家目录。如果不指定,默认在/home目录下自己的用户名。

  • -s:指定shell。如果不指定,默认是/bin/bash。如果指定为/sbin/nologin则不能登陆。

  • -c:指定注释信息。

  • -M:不创建家目录。一个用户没有家目录会出现很多问题,所以一般只在创建不可登陆的用户时使用。

删除用户:userdel

语法:

userdel [选项] 用户名

# 基本用法:直接删除一个用户,但是不会删除该用户的家目录。
[root@lwz ~]# userdel lwz1

[root@lwz ~]# ll /home/lwz1
总用量 0

选项

  • -r:删除用户的同时,删除家目录。

[root@lwz ~]# userdel -r lwz1

[root@lwz ~]# ll /home/
lwz/    pischi/ 

修改用户属性:usermod

语法

usermod 选项 用户名

使用usermod命令至少需要一个选项

选项

  • -u:修改uid。

  • -g:修改gid。可以指定组名,也可以指定gid。

[root@lwz ~]# usermod -g lwz lwz1
[root@lwz ~]# id lwz1
uid=1001(lwz1) gid=1000(lwz) =1000(lwz)
  • -d:修改家目录。如果更改用户的家目录不存在,需要将用户原有的家目录重命名为更改的家目录。或者复制系统的家目录模板/etc/skel/重命名到指定用户的家目录下。

  • -s:修改shell。修改为/sbin/nologin则该用户无法登陆。

  • -G:扩展组,可以指定多个组。

[root@lwz ~]# id lwz1
uid=1001(lwz1) gid=1000(lwz) =1000(lwz)
[root@lwz ~]# usermod -G lwz1,root lwz1
[root@lwz ~]# id lwz1
uid=1001(lwz1) gid=1000(lwz) =1000(lwz),1001(lwz1),0(root)
  • -L:锁定用户,即无法登陆。/etc/shadow文件中用户的密码首位会加上一个!。被锁用户只能从root用户下su 用户名登陆。

  • -U:解锁用户。

用户切换:su

语法

su [选项] [参数]

su命令不加任何选项和参数,会默认切换到root用户,需要输入root的密码

选项

  • -:可以加载要切换到的用户的环境变量和配置等。

  • -c:使用指定用户执行一条命令,且不会切换到该用户。

[lwz@lwz ~]$ su -c "mkdir /root/lwz" root
密码:

[root@lwz lwz]# ll -d /root/lwz
drwx------ 2 root root 4096 9月   7 15:55 /root/lwz

用户密码管理:passwd

语法

passwd [选项] [参数]

  • passwd命令不加任何选项和参数,则默认修改当前用户的密码。只有管理员才能指定修改其他用户的密码。

  • 普通用户修改自己的密码,需要先输入旧密码,再输入新密码和确认新密码。

  • 新密码不能低于八位,也不能过于简单,且只能重试三次。

选项

  • -l:锁定用户。效果和usermod -L一样。

  • -u:解锁用户。效果和usermod -U一样。

  • -stdin:修改密码的另一种方式,将标准输出的内容作用于指定用户的密码。(只有管理员才能这样操作)

# 终端交互的方式,lwz的密码修改为123
[root@lwz lwz]# passwd --stdin lwz
更改用户 lwz 的密码 。
123
passwd:所有的身份验证令牌已经成功更新。

# 非交互的方式。将`echo`的标准输出`123123`作用于lwz的密码。
[root@lwz lwz]# echo "123123"|passwd --stdin lwz
更改用户 lwz 的密码 。
passwd:所有的身份验证令牌已经成功更新。

用户组管理

配置文件

用户组配置文件

[root@lwz ~]# tail -n 3 /etc/group
pesign:x:992:
lwz:x:1000:
lwz1:x:1001:lwz1

每一行代表一个组,每一列用:分隔,一共四列:

  • 第一列:组名

  • 第二列:密码占位符x,密码信息保存在/etc/gshadow文件中。

  • 第三列:用户组的GID。

  • 第四列:用户组的成员。

组密码配置文件

[root@lwz ~]# tail -n 3 /etc/gshadow
pesign:!::
lwz:!::
lwz1:!::lwz1

/etc/group文件一一对应,每一行代表一个组,每一列用:分隔,一共四列:

  • 第一列:组名

  • 第二列:加密后的密码

  • 第三列:组的管理员(多个用分隔)

  • 第四列:组内成员(多个用分隔)

创建用户组

语法

groupadd [选项] 组名

  • groupadd命令用于创建一个新的用户组,新用户组的信息将被添加到/etc/group文件。

选项

  • -g:指定新用户组的GID。

[root@lwz ~]# groupadd -g 1002 lwz2

[root@lwz ~]# tail -n 1 /etc/group
lwz2:x:1002:

修改用户组

语法

groupmod [选项] 组名

usermod用法类似

选项

  • -g:修改用户组的GID。

  • -n:修改用户组的名字。

删除用户组

语法

groupdel 组名


mkpasswd - 随机字符串

mkpasswd可以生成一组随机的字符串。

使用前需要安装该命令。

$ yum install -y expect

语法

mkpasswd [选项]

不带选项默认生成9位的随机字符串。

[root@lwz ~]# mkpasswd
.Tp6taZa8

选项

  • -l:指定字符串的长度。

  • -s:指定字符串中的特殊符号数量。

示例:一步到位创建用户密码

使用一条命令生成随机字符串,长度为10,包含特殊符号的数量为2,保存到文件中,使用这个字符串创建用户的密码。

# 一步到位创建用户并随机生成密码。"&&"符号代表前面的命令执行成功后,才会执行后面的命令。
[root@lwz ~]# mkpasswd -s 2 -l 10 >> passwd.txt && useradd lwz3 && tail -n 1 passwd.txt | passwd --stdin lwz3
更改用户 lwz3 的密码 。
passwd:所有的身份验证令牌已经成功更新。

# 给密码设置只有管理员可以读取,防止外泄。
[root@lwz ~]# chmod 600 passwd.txt