Skip to content

用户

Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须向系统管理员申请一个账号,然后以这个账号的身份进入系统

users 的命令是列出当前登录用户的列表

创建账号

添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录 Shell 等资源。刚添加的账号是被锁定的,无法使用

sh
useradd [选项] 用户名
选项含义
-ccomment 指定一段注释性描述
-d指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
例子:useradd -d /home/xxx -m 用户名
-g用户所属组,指定用户所属的用户组。创建用户时必须指定(不指定就自动创建同名组)
而且只能有 1 个。这个用户在创建文件时,文件的所属组就是这个主组
-G用户附加组,指定用户所属的附加组。没有个数限制。
作用:让用户拥有多个组的权限(不影响文件归属,只影响权限)
-s指定用户的登录Shell,如果不指定系统会用默认 Shell
或者可以指定 没有 Shell。意思就是这个用户不能登录,只能用来跑服务 / 程序
例子:useradd -s /sbin/nologin 用户名
-u用户号:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号

删除帐号

删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录

sh
userdel [选项] 用户名
选项含义
仅删除用户,保留家目录
-r删除用户 + 家目录
-f强制删除用户(即使用户已登录)
-rf强制删除用户 + 家目录

家目录 = 创建用户时 -d 指定的目录

修改用户

sh
usermod [选项] 用户名
选项含义
-ccomment:修改用户的注释性描述
-d修改用户的主目录,若要同时迁移目录内容,需配合 -m 使用
-m配合 -d 使用,将原主目录内容迁移到新指定的目录
-g修改用户的主组(只能有 1 个),用户创建文件时的所属组将更新为此组
-G覆盖用户的附加组列表,多个组用逗号分隔,会清空原有附加组
-aG向用户的附加组列表中追加新组,不会覆盖原有附加组
-s修改用户的登录 Shell,可指定为 /sbin/nologin/bin/false 来禁止登录
-u修改用户的 UID(用户号),若配合 -o 可使用非唯一的 UID
-l修改用户的登录名(用户名)
-L锁定用户账号,禁止登录
-U解锁用户账号,恢复登录权限

用户口令

用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令;指定和修改用户口令的命令是 passwd。root 用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令

sh
passwd [选项] 用户名
选项含义
-l锁定口令,即禁用账号(在 /etc/shadow 中密码字段前加 !
-u口令解锁,恢复账号登录权限
-d使账号无口令(清空密码,登录时无需输入密码)
-f强迫用户下次登录时修改口令
-e立即让密码过期,强制用户下次登录时修改密码
-S显示指定用户的密码状态信息
-n设置密码的最小使用天数(用户在多少天内不能再次修改密码)
-x设置密码的最大使用天数(超过该天数必须修改密码)
-w设置密码过期前的警告天数
-i设置密码过期后账号的禁用天数

普通用户:直接使用 passwd 命令即可,上述选项基本上都是给 root 用户使用

在 Linux 中,组是一种将多个用户组织在一起的机制还有分配权限(只要用户属于某个组,就拥有那个组的权限)。每个用户都属于一个或多个组,而组可以包含多个用户;每个用户必定有一个主组(创建用户的时候创建,不指定名称的话默认会创建和用户同名的组)

groups 命令能列出当前的用户所属的所有组(或者使用 groups 用户名 查看指定用户的所属组),第一个组名为主组,其他都是附加组

创建组

sh
groupadd [选项] 组名
选项含义
-g指定组的 GID(组标识号),需是未被使用的数字,默认系统会自动分配
-r创建系统组(适用于服务类组),系统组的 GID 范围通常小于 1000(不同发行版略有差异)
-f强制创建,若要创建的组已存在,不会报错(默认重复创建会提示错误)
-o允许创建重复 GID 的组(配合 -g 使用),默认 GID 必须唯一

删除组

sh
groupdel [选项] 组名
选项含义
-f强制删除组(即使是某个用户的主组也强行删)

默认删除组的话那么这个组必须不是某个用户的主组

修改组

sh
groupmod [选项] 组名
选项含义
-g修改组的 GID
-n修改组的 组名

newgrp

指令含义
newgrp 组名临时切换当前有效主组为指定组名,之后新建文件的所属组将变为该组
exit退出 newgrp 环境,恢复原来的主组

用户系统文件

Linux系统中,用户与用户组的所有配置、权限、身份信息,均依托三大核心文件存储

路径含义
/etc/passwd用户基本信息
/etc/shadow用户密码与安全配置
/etc/group用户组信息

上述的 用户/组 执行的命令本质上就是对这三个文件的更新

/etc/passwd

存储系统内所有用户的基础身份信息,无密码明文,仅做用户身份标识与基础配置记录。所有用户均拥有可读权限,仅 root 用户可修改,普通用户无法写入

格式:用户名:密码占位:UID:GID:注释信息:家目录:登录Shell

字段含义说明
用户名用户登录系统的名称,全局唯一,区分大小写
密码占位早期存放加密密码,现已迁移至 /etc/shadow,此处仅为占位
x 代表密码正常存于 shadow,空值代表无密码,!/*代表账号锁定
UID(用户ID)系统识别用户的唯一数字标识:
0 为 root 超级管理员
1-999为系统/服务用户
≥1000为普通登录用户
GID(主组ID)用户所属主组的数字标识,一个用户仅有一个主组,对应 /etc/group 内的GID
注释信息用户备注说明,可填写用途等,无实际权限约束
家目录用户登录系统后的默认工作目录,root 默认为 /root,普通用户默认为 /home/用户名
登录Shell用户登录后使用的命令解释器,/bin/bash 为标准可登录 Shell,/sbin/nologin 为禁止登录(服务用户专用)

/etc/shadow

专门存储用户的加密密码、密码有效期、账号锁定状态等敏感安全信息,仅root用户拥有可读可写权限,普通用户无任何访问权限

格式:用户名:加密密码:最后修改时间:最小修改间隔:最大有效期:过期警告天数:过期宽限天数:账号失效时间:保留字段

字段含义说明
用户名/etc/passwd 内用户名一一对应,用于关联用户基础信息
加密密码采用 SHA-512 等算法加密的密码串,无密码为空,!/* 开头代表账号锁定
最后修改时间从1970年1月1日到上次修改密码的天数,0代表下次登录需强制改密
最小修改间隔密码修改后,需等待该天数才能再次改密,0代表无限制
最大有效期密码最长使用天数,超期需改密,99999代表永久有效
过期警告天数密码过期前,提前提醒用户改密的天数
过期宽限天数密码过期后,仍可登录改密的宽限天数,过期则账号失效
账号失效时间账号永久失效的时间(1970年起算天数),空值代表永久有效
保留字段系统预留字段,暂无实际用途

/etc/group

存储系统内所有用户组的基础信息,包括组名、GID、组内成员,用于管理用户的组权限,实现文件权限的批量管控,所有用户均可读取,仅root用户可修改

格式:组名:密码占位:GID:组内成员

字段含义详细说明
组名用户组的名称,全局唯一
密码占位组密码占位符,x 代表密码存于 /etc/gshadow,极少使用,空值代表无组密码
GID(组ID)用户组的唯一数字标识,与 /etc/passwd 内GID对应
1-999为系统组
≥1000为普通组
组内成员属于该组的附加组成员,多个用户用逗号分隔
用户主组的成员不会显示在组内成员字段中,仅附加组成员会罗列