Joi

179 阅读11分钟

一、用户和用户组概述

1.1用户介绍

Linux系统是一个多用户多任务的分时操作系统(服务器系统),允许多个用户同时登陆到系统上,并响应每个用户的请求。

任何需要使用操作系统的用户,都需要一个系统账号。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

用户在系统中是分角色的,在Linux系统中,由于角色的不同,权限和所完成的任务也不同。值得注意的是每个用户是通过UID(User ID)来唯一标识的。

1.2用户账号的分类

  • 超级用户: root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限,系统中超级用户是唯一的。在生产环境,一般禁止root账号远程登录SSH连接服务器,以加强系统安全。其UID和GID均为0

  • 普通用户: 由root用户或其他管理员用户创建,拥有的权限会受到限制,一般只在用户自己的宿主目录中拥有完整权限。在 centos 7中 ,普通用户的UID范围为1000-60000。

  • 程序用户: 在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,- 例如系统默认的bin、adm、nodoby、mail用户等。在centos 7中,系统用户的UID范围为1-999。

  • 由于服务器角色的不同,有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)。

1.3用户组概述

linux系统中的用户组(group)就是具有相同特性的用户(user)集合。

有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件,只需要把授权的用户都加入到同一个用户组里,然后通过修改该文件对应组的权限,让用户组具有符合需求的操作权限,这样组内所有用户对该文件就会具有相同的权限,这就是用户组的用途。

将用户分组是linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了运维管理工作。

组账号类型:

1)基本组(私有组)

  • 创建用户账号时,如果没有指定用户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组,默认只容纳一个用户。
  • 在用户所属组中的第一个组称为基本组,基本组在/etc/passwd 文件中指定。
  • 基本组有且唯一。

2)附加组(公共组)

  • 在用户所属组中,除了第一个组(基本组)以外的其他组就是附加组,附加组在/etc/group文件中指定。
  • 附加组可有可无,且可以有多个。

二、用户账号管理

用户账号的管理工作主要涉及到用户账号的添加、修改和删除。

2.1 用户信息存储文件

用户账号的管理工作主要涉及到用户账号的添加、修改和删除。

2.1.1 用户账号文件/etc/passwd

用途:保存用户名称、宿主目录、登录shell等基本信息。

文件位置:/etc/passwd。

每行说明:每一行对应一个用户的账号记录。

行内字段含义:

[root@localhost ~]# haed -2 /etc/passwd    //查看passwd文件头2行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

冒号(:)作为分隔符,将每行分为了7段。以第一行“root:x:0:0:root:/root:/bin/bash”为例,解释每段含义:

  • 字段1:root,用户名。
  • 字段2:x,密码占位符。为保障用户密码的安全性,密码实际存放在/etc/shadow文件中。
  • 字段3:0,用户编号UID。
  • 字段4:0,用户基本组编号GID。
  • 字段5:root,用户描述说明。
  • 字段6:/root,用户家目录。
  • 字段7:/bin/bash,用户的登录shell。

注:可使用”man 5 passwd“命令,查看/etc/passwd文件说明及每个字段含义。

2.1.2 用户口令文件/etc/shadow

用途:存储用户的密码信息,又称为“影子文件” 。/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

文件位置:/etc/shadow。

每行说明:每一行对应一个用户的密码信息。

查看文件内容:

[root@localhost ~]# tail -3 /etc/shadow    //查看shadow文件尾部3行
alice:$6$Cm32tytk$KT.XqgcgaZqZdB9USbAes2QBrh.ItCItnKqaj/wrXubrjqZpAZH.1pjsy3gjGdYzdsV0rTXy6FBY4dN.Qe4eM1:19026:0:99999:7:::
jack:!!:19017:0:99999:7:::
zhangsan:!!:19030:0:99999:7:::

/etc/shadow文件也是以冒号(:)作为分隔符,将每行分成了9段,每个字段的含义如下:

  • 字段1:用户名。

  • 字段2:密码加密值。当此字段为*或!!时,表示用户不能登录到此系统。当为空时,表示用户无需密码即可登录。

  • 字段3:上次修改密码时间。从1970/1/1到上次修改密码的天数。

  • 字段4:最小修改密码间隔天数,即两次修改口令之间所需的最小天数。若不设置,默认为0,表示当天即可修改。

  • 字段5:密码有效期。若为99999,表示永久有效。

  • 字段6:警告时间。表示从系统开始警告用户到用户密码正式失效之间的天数。

  • 字段7:密码过期后的宽限天数。

    密码过期后,仍然接受使用此密码进行登录的天数(在此期间,用户应该在下次登录时修改密码)。

  • 字段8:账户失效时间。从1970/1/1日起,到用户被禁用的天数。默认为空。

    账户过期不同于密码过期。账户过期后,用户将不被允许登录。密码过期后,用户将不被允许使用此密码登录。

  • 字段9:保留字段。此字段保留作将来使用。

2.2 添加用户账号 useradd

命令格式:

useradd [选项] 用户名 添加用户后,会在/etc/passwd文件和/etc/shadow文件中生成相应信息:

  • 在/etc/passwd 文件和/etc/shadow 文件的末尾增加该用户账号的记录。
  • 若未明确知道用户的宿主目录,则在/home 目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。
  • 若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到/etc/group 和 /etc/shadow 文件中。
[root@localhost ~]# useradd nancy       //创建nancy用户
[root@localhost ~]# cat /etc/passwd |grep nancy   //查看passwd文件中和nancy有关的行
nancy:x:1006:1007::/home/nancy:/bin/bash
[root@localhost ~]# tail -1 /etc/passwd    //查看passwd文件最后一行
nancy:x:1006:1007::/home/nancy:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow    //查看shadow文件最后一行
nancy:!!:19044:0:99999:7:::

  • 常用选项:
选项作用
-u指定用户的UID号,要求该UID号码未被其他用户使用
-d指定用户的宿主目录位置(当与-M一起使用时,不生效)只能用绝对路径指定目录,且不需要事先创建目录
-e指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式
选项作用
-u指定用户的UID号,要求该UID号码未被其他用户使用
-d指定用户的宿主目录位置(当与-M一起使用时,不生效)只能用绝对路径指定目录,且不需要事先创建目录
-e指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式
  • 举例:

1)-u 指定用户的UID

[root@localhost ~]# useradd -u 2000 helen   //添加helen用户,并指定UID为2000
[root@localhost ~]# tail -1 /etc/passwd     //查看passwd中helen的信息
helen:x:2000:2000::/home/helen:/bin/bash

2)-d 指定用户的宿主目录

[root@localhost ~]# useradd -d /home/test/ user04   //创建用户,并指定家目录
[root@localhost ~]# tail -1 /etc/passwd   
user04:x:2003:2003::/home/test/:/bin/bash

3)-e 指定用户的账户失效时间

[root@localhost ~]# useradd -e 2022-6-30 user05  //创建用户并指定账户失效时间为2022年6月30日
[root@localhost ~]# tail -1 /etc/shadow   //查看shadow文件,19173表示距离1970年1月1日的19173天
user05:!!:19044:0:99999:7::19173:

4)-g 指定用户基本组

[root@localhost ~]# useradd -g hr user06    //创建用户并指定用户基本组为hr组
[root@localhost ~]# id user06        //查看用户信息,基本组为hr组
uid=2005(user06) gid=1002(hr) 组=1002(hr)

5)-G 指定用户附加组

[root@localhost ~]# useradd -G hr user07   //创建用户并指定用户附加组为hr组
[root@localhost ~]# id user07              //查看用户信息,附加组为hr组
uid=2006(user07) gid=2006(user07) 组=2006(user07),1002(hr)

6)-M 不建立家目录

[root@localhost ~]# useradd -M user08     //创建用户且不建立家目录
[root@localhost ~]# ls /home              //查看/home下没有user08的目录
alice  jack    nancy    user05   user07     
Amy    helen   user01   user06   zhangsan

7)-s 指定用户的登录shell(一般用于程序用户)

[root@localhost ~]# useradd -s /sbin/nologin apache   //创建用户并指定登录shell为/sbin/nologin,该用户无法登录系统
[root@localhost ~]# tail -1 /etc/passwd
apache:x:2008:2008::/home/apache:/sbin/nologin

2.3 设置/更改用户口令 passwd

root用户可以指定用户名作为参数,对指定账号的密码进行管理。不指定用户名时,修改当前账号的密码。

普通用户只能执行单独的passwd命令修改自己的密码。

命令格式:

passwd [用户名]

常用选项:

选项功能
-d清空指定用户的密码,仅使用用户名即可登录系统
-l锁定用户账户,锁定的用户账号将无法再登录系统。(一定要事先设好密码)
-S查看用户账户的状态(是否被锁定)。
-u解锁用户账户

举例:

1、设置或修改用户密码

[root@localhost ~]# passwd nancy   //设置或修改nancy用户的密码
更改用户 nancy 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo "linux666" | passwd --stdin nancy  //简便设置用户密码
更改用户 nancy 的密码 。
passwd:所有的身份验证令牌已经成功更新。

2、-d 清除用户密码,使用用户名可直接登录

[root@localhost ~]# passwd -d nancy   //清除nancy用户的密码
清除用户的密码 nancy。
passwd: 操作成功

3、锁定和解锁用户

[root@localhost ~]# passwd -l nancy    //锁定用户密码,锁定后用户无法登陆
锁定用户 nancy 的密码 
passwd: 操作成功
[root@localhost ~]# passwd -u nancy   //解锁用户,因nancy无密码,系统提示不安全,必须使用-f才能解锁
解锁用户 nancy 的密码。
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
[root@localhost ~]# passwd -S nancy      //查看nancy用户状态,仍为锁定状态
nancy LK 2022-02-21 0 99999 7 -1 (密码已被锁定。)

2.4 修改用户账号属性—usermod命令

格式:usermod [选项]... 用户名

  • 常用选项:
选项作用
-u修改用户的UID号
-d修改用户的宿主目录位置
-e修改用户的账户失效时间,可使用YYYY–MM-DD的日期格式
-g修改用户的基本组名(或使用GID号)
-G修改用户的附加组名(或使用GID号)
-M不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录
-s指定用户的登录Shell
以上上面选项与useradd命令中的含义相同
-l更改用户账号的登录名称 格式:usermod -l 新名称 旧名称
-L锁定用户账户
-u解锁用户账户
  • 举例:
[root@localhost ~]# usermod -l sasha helen    //将helen的用户名改成sasha
[root@localhost ~]# usermod -L sasha          //锁定用户sasha
[root@localhost ~]# passwd -S sasha           //查看sasha状态,已被锁定
sasha LK 2022-02-21 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U sasha          //解锁用户sasha
[root@localhost ~]# passwd -S sasha           //查看sasha状态,正常状态
sasha PS 2022-02-21 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

三、组管理

3.1 组账号文件

(1)文件位置:

  • /etc/group:保存组账号基本信息。
  • /etc/gshadow:保存组账号的密码信息。

(2)/etc/group文件内容: