Linux下的用户可以分为三类:

  • 超级用户
  • 系统用户(伪用户)
  • 普通用户

Linux下的组可以分为两类;

  • 基本组(私有组)
  • 附加组(共有组)

Linux中用户和组的类型

用户类型

Linux下的用户可以分为三类:

  • 超级用户:用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
  • 系统用户(伪用户):是Linux系统正常工作所必需的用户。主要是为了满足相应的系统进程对文件属主的要求而建立的,例如:bin、daemon、adm、lp等用户。系统用户不能用来登录。
  • 普通用户:是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。

组类型

Linux下的组可以分为两类:

  • 基本组(私有组):建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组。
  • 附加组(共有组):可以容纳多个用户,组中的用户都具有组所拥有的权利。

用户和用户组的配置文件

在Linux中,用户账号、密码、用户组信息和用户组密码均是存放在不同的配置文件中的。

文件名称 文件功能
/etc/passwd 用户账号文件
/etc/shadow 用户密码文件
/etc/group 用户组账号文件
/etc/gshadow 用户组密码文件

用户账号文件

是一个文本文件,用于定义系统的用户账号,由于所有用户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。

如下命令可以查看用户账号文件:

1
head -1 /etc/passwd  # 只查看第一行

输出结果如下

1
root:*:0:0:root:/root:/bin/bash

上面输出的结果是用户的账号信息,以 隔离,有7个字段,对于字段的依次说明:

字段 含义 补充
账号名称 用户登录Linux系统时使用的名称
密码 以前是以加密格式保存密码的位置,此处只是密码占位符“x”或“*”。若为“x”,说明密码经过了shadow的保护
UID 用户的标识,是一个数值,用它来区分不同的用户,每个用户都有一个UID数值 超级用户的UID:0
系统用户的UID:1~999
普通用户的UID:≥1000
GID 用户所在基本组的标识,是一个数值,用它来区分不同的组,相同的组具有相同的GID
个人资料 可以记录用户的完整姓名、地址、办公室电话、家庭电话等个人信息
主目录 类似Windows 的个人目录,通常是/home/username,这里username是用户名,用户执行“cd~”命令时当前目录会切换到个人主目录
Shell 定义用户登录后激活的Shell,默认是Bash Shell

用户密码文件

如下命令可以查看用户密码文件:

1
head -1 /etc/shadow  # 只查看第一行

输出结果如下

1
root:$6$dgDMHJYKTHTgb3j5$ta3diR/As25nLbu3MX838RM5yWEU7hhkXLzMar7vFmNilgPA9xuy39ed2ZUWn3qVSzkUsX50YLz6zSbyNLVZ61::0:99999:7:::

上面输出的结果是用户密码信息,以 隔离,有9个字段,对于字段的依次说明:

字段 含义
登录名 登录名
加密口令 使用SHA-512/SHA-256/MD5算法加密后的密码($id$,id为1表示md5,5表示sha256, 6为sha512) ,若为空,表示该用户无需密码即可登录,若为"*“表示该账号不能用于登录系统,若为“!!”表示该账号密码已被锁定
最后一次修改时间 最后一次更改密码的日期,以距离1970年1月1日的天数表示
最小时间间隔 密码在多少天内不能被修改,默认为0,表示不限制
最大时间间隔 密码在多少天后必须修改,默认99999,表示不限制
警告时间 提前多少天警告用户密码过期,默认为7天,表示不提供警告
不活动时间 密码过期多少天后禁用此用户
失效日期 密码失效日期,以距离1970年1月1日的天数表示,默认为空,表示可永久使用
标志 保留未用,以便以后发展只用

用户组账号文件

系统中的每个组,在/etc/group文件中有一行记录,任何用户均可以读取用户组账户信息配置文件。

字段依次说明:

字段 含义
Groupname 组的名字
Passwd 组的加密口令
GID 是系统区分不同组的ID,在/ect/passwd域中的GID字段使用这个数字来指定用户的基本组
Userlist 使用,分开的用户名,列出的成员以该组为附加组,本字段可以为空

用户组密码文件

 /etc/gshadow是/etc/group的加密文件,/etc/gshadow中的内容以:进行分割,共分为4个字段,具体含义如下:

字段 含义
Groupname 用户组的名称
Passwd 对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 !,指的是该群组没有组密码,也不设有群组管理员
组管理员 从系统管理员的角度来说,该文件最大的功能就是创建群组管理员
组中的附加用户 该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同

用户管理

useradd:添加用户

  • 基本语法

    1
    2
    
    useradd 用户名  # 功能描述:添加新用户
    useradd -g 组名 用户名  # 功能描述:添加加新用户到某个组
    
  • 选项说明

    root用户的文件夹是/root,普通用户的用户文件夹在/home/

    image-20230502171907307

  • 实操案例

    image-20230502142755540

passwd:设置用户密码

  • 基本语法

    1
    
    passwd 用户名  # 功能描述:设置用户密码
    
  • 实操案例

    image-20230502143733947

id:查看用户是否存在

  • 基本语法

    1
    
    id 用户名  # 功能描述:查看用户是否存在
    
  • 实操案例

    image-20230502143916253

su:切换用户

  • 基本语法

    1
    2
    
    su 用户名  # 功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量
    su - 用户名  # 功能描述:切换到用户并获得该用户的环境变量及执行权限
    
  • 特别说明

    • root用户切换到普通用户不需要输入密码,普通用户之间的切换,或普通用户切换到root用户需要密码

    • 用户的切换是基于当前会话的一个层层嵌套的关系,例如:当前会话是以root用户创建的,当你进行切换用户操作时,会在当前的root会话下在嵌套一层会话,可以使用exit命令返回到上一层用户会话,详细见下图:

      image-20230502151118801

  • 实操案例

    image-20230502145258133

uesrdel:删除用户

  • 基本语法

    1
    
    userdel 用户名  # 删除用户
    
  • 选项说明

    image-20230502153224027

  • 实操案例

    image-20230502153521203

users:查看当前登录系统的用户

  • 基本语法

    1
    
    users  # 功能描述:查看当前登录系统的用户
    
  • 实操案例

    image-20230502153810077

who:查看用户登录信息

  • 基本语法

    1
    2
    
    whoami  # 显示自身用户名称
    who am i  # 显示登录用户的用户名以及登录时间
    
  • 实操案例

    image-20230502155450984

last:列出登陆过系统的用户信息

  • 基本语法

    1
    2
    
    last  # 功能描述:列出登陆过系统的用户信息,默认读取/var/log/wtmp文件
    last -5  # 功能描述:显示最近的5条登录信息
    
  • 实操案例

    image-20230502155951394

lastlog:查看每个账号的最近登录时间

  • 基本语法

    1
    
    lastlog  # 功能描述: 查看每个账号的最近登录时间,读取/var/log/lastlog文件
    
  • 实操案例

    image-20230502160358969

w:显示登录到系统的用户信息

  • 基本语法

    1
    
    w  # 功能描述:示登录到系统的用户信息
    
  • 实操案例

    image-20230502160536939

sudo:设置普通用户具有root权限

使用sudo命令可以提高普通用户的操作权限,不过这个权限需要root用户进行配置/etc/sudoers文件才可使用。

修改修改流程如下:

  1. 添加dev用户,并设置密码

    1
    2
    
    useradd dev
    passwd dev
    
  2. 修改配置文件

    1
    
    vim /etc/sudoers
    

    修改/etc/sudoers 文件,找到下面一行(100 行左右),在root 下面添加一行,如下所示:

    1
    2
    3
    
    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    dev  ALL=(ALL) ALL
    

    或者配置成采用sudo 命令时,不需要输入密码

    1
    2
    3
    
    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    dev  ALL=(ALL) NOPASSWD:ALL
    

    修改完毕,现在可以用dev帐号登录,然后用命令sudo ,即可获得root 权限进行操作。

  3. 实操案例

    image-20230502163400865

usermod:修改用户

  • 基本语法

    1
    
    usermod [选项] 用户名
    
  • 选项说明

    image-20230510114139210

  • 实操案例

    image-20230502174112140

用户组管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。 用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新

groupadd:新增组

  • 基本语法

    1
    
    groupadd [选项] 组名  # 功能描述:创建用户组
    
  • 选项说明

    image-20230503091052357

  • 实操案例

    image-20230503093904321

groupmod:修改组

  • 基本语法

    1
    
    groupmod [选项] 用户组  # 功能描述:修改用户组信息
    
  • 选项说明

    image-20230503094519984

  • 实操案例

    image-20230503094703894

gpasswd:添加删除组成员

  • 基本语法

    1
    
    gpasswd [选项] 用户 用户组  # 功能描述:删除添加用户组成员
    
  • 选项说明

    image-20230503095157054

  • 实操案例

    image-20230503095622951

groups:查询用户组信息

  • 基本语法

    1
    
    grous 用户名  # 功能描述:查询用户相关用户组
    
  • 实操案例

    image-20230503095814819

groupdel:删除组

  • 基本语法

    1
    
    groupdel 用户组  # 功能描述:删除用户组
    
  • 说明

    被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组。

  • 实操案例

    image-20230503100220039