在Linux系统的运维工作中,账号与权限管理是保障系统安全的第一道防线,Linux通过严谨的账号分类、权限机制和配置文件,实现了对用户操作的精细化管控。
一、先搞懂:Linux账号体系的底层逻辑
Linux是一个多用户、多任务的操作系统,每一个能登录系统的用户,都对应着一个唯一的账号。这些账号不是孤立存在的,而是通过“用户-组”的关联方式,实现权限的批量管理。
1. 用户账号的三种类型
Linux里的用户账号主要分为三类,各自的权限和用途完全不同:
超级用户(root):这是系统的“管理员账号”,拥有对整个系统的最高权限,可以执行任何操作,比如删除系统文件、修改核心配置。它就像Windows里的Administrator账号,但权限更大。日常操作中我们应该避免直接用root登录,否则一个误操作就可能导致系统崩溃。
普通用户:这类账号需要由root或其他管理员创建,权限受到严格限制。普通用户只能在自己的“家目录”(比如 /home/zhangsan )里拥有完整的读写权限,对系统其他目录的访问则需要额外授权。
程序用户:这类账号并不是给人用的,而是给系统服务或程序运行时使用的,比如 nginx 、 mysql 账号。它们通常不能登录系统,主要作用是让服务以最低权限运行,避免程序漏洞被黑客利用后获取系统最高权限。
2. 组账号:批量管理权限的利器
为了更高效地管理用户权限,Linux引入了“组账号”的概念。我们可以把多个用户加入同一个组,然后给这个组设置权限,组里的所有用户都会自动继承这些权限。
基本组:每个用户创建时,系统会自动创建一个和用户名同名的组,这个组就是该用户的基本组。用户的文件默认都会归属到这个基本组。
附加组:除了基本组,用户还可以被加入其他组,这些组就叫附加组。比如技术部的员工 zhangsan ,基本组是 tech ,后来因为工作需要被加入邮件管理员组 mailadm ,那么 mailadm 就是他的附加组。
3. UID与GID:系统识别用户的“身份证”
在Linux系统内部,其实并不是通过用户名来识别用户的,而是通过数字形式的UID(用户标识号)和GID(组标识号)。
UID规则:root用户的UID固定为0,程序用户的UID默认在1~499之间,普通用户的UID则从500开始分配。
GID规则:和UID对应,root组的GID固定为0,程序组的GID默认在1~499之间,普通组的GID从500开始分配。
二、核心配置文件:账号信息的“数据库”
Linux的账号信息都保存在几个核心配置文件里,理解这些文件的结构,是深入掌握账号管理的基础。
1. /etc/passwd :用户基本信息文件
这个文件里保存了所有用户的基本信息,包括用户名、UID、GID、家目录等,任何用户都可以读取它的内容。每一行对应一个用户,用冒号 : 分隔成7个字段:
1. 用户名:登录系统时使用的名称,比如 root 、 zhangsan 。
2. 密码占位符:这里默认显示 x ,表示密码已经被加密并转移到 /etc/shadow 文件中。
3. UID:用户的唯一标识号。
4. GID:用户所属基本组的标识号。
5. 用户说明:可以填写用户的全名或备注信息。
6. 家目录:用户登录后的默认工作目录,普通用户一般是 /home/用户名 。
7. 登录Shell:用户登录后使用的命令解释器,默认是 /bin/bash ,如果设置为 /sbin/nologin 则表示该用户不能登录系统。
举个列子, root:x:0:0:root:/root:/bin/bash 这一行就表示:用户名是root,密码存在 /etc/shadow 里,UID和GID都是0,用户说明是root,家目录是 /root ,登录Shell是 /bin/bash 。
2. /etc/shadow :用户密码信息文件
这个文件是 /etc/passwd 的“安全升级版”,保存了用户的加密密码、密码有效期等敏感信息,只有root用户才能读取。每一行同样用冒号分隔,包含9个字段,其中最关键的是:
第2个字段:经过SHA-512加密的密码字符串,如果是 !! 或 * 则表示该用户没有密码,无法登录。
第5个字段:密码的最长有效天数,默认是99999,表示不限制。
第7个字段:密码过期后多少天内禁用该用户。
3. /etc/group :组信息文件
这个文件保存了所有组的信息,包括组名、GID、组成员等,每一行用冒号分隔成4个字段:
1. 组名:组的名称,比如 root 、 tech 。
2. 组密码占位符:通常显示 x ,组密码保存在 /etc/gshadow 中(很少使用)。
3. GID:组的唯一标识号。
4. 组成员:属于这个组的用户列表,多个用户用逗号分隔。
比如 root:x:0:root 这一行表示:组名是root,GID是0,组成员是root用户。
三、用户账号管理:创建、修改与删除
了解了基本概念和配置文件,我们就可以动手管理用户账号了。Linux提供了一系列命令来完成这些操作,下面是最常用的实战命令。
1. 创建用户: useradd
这是创建用户的核心命令,最简单的用法就是直接跟用户名:
useradd zhangsan
执行这个命令后,系统会自动完成以下操作:
在 /etc/passwd 和 /etc/shadow 文件末尾添加该用户的记录。
创建一个和用户名同名的基本组。
在 /home 目录下创建用户的家目录 /home/zhangsan ,并复制初始配置文件(比如 .bashrc )。
如果需要自定义用户属性,可以添加各种选项:
-u :指定用户的UID,比如 useradd -u 1005 lisi 。
-d :指定用户的家目录,比如 useradd -d /opt/wangwu wangwu 。
-e :指定用户的失效日期,格式为 YYYY-MM-DD ,比如 useradd -e 2026-12-31 ftpuser 。
-g :指定用户的基本组,比如 useradd -g tech zhaoliu 。
-G :指定用户的附加组,多个组用逗号分隔,比如 useradd -G tech,mailadm sunqi 。
-s :指定用户的登录Shell,比如 useradd -s /sbin/nologin mysql (创建程序用户)。
举个例子,创建一个管理员账号 admin ,基本组为 wheel ,附加组为 root ,家目录为 /admin :
useradd -d /admin -g wheel -G root admin
2. 设置密码: passwd
创建用户后,必须设置密码才能登录,使用 passwd 命令:
passwd zhangsan
执行后会提示你输入两次密码,输入时不会显示任何字符,这是正常的安全机制。如果是root用户,可以直接修改其他用户的密码,不需要验证旧密码。
3. 修改用户: usermod
如果需要修改已存在用户的属性,使用 usermod 命令,选项和 useradd 基本一致:
修改用户的附加组: usermod -G tech,dev zhangsan 。
锁定用户账号(禁止登录): usermod -L zhangsan 。
解锁用户账号: usermod -U zhangsan 。
4. 删除用户: userdel
删除用户的命令是 userdel ,加上 -r 选项可以同时删除用户的家目录和邮件文件:
userdel -r zhangsan
⚠️ 注意:如果用户当前正在登录系统,无法直接删除,需要先让用户退出登录。
四、组账号管理:批量权限的高效配置
组账号的管理命令和用户账号类似,下面是核心操作:
1. 创建组: groupadd
创建一个新组的命令很简单:
groupadd tech
如果需要指定GID,可以用 -g 选项:
groupadd -g 1008 dev
2. 修改组: groupmod
修改组的名称或GID:
修改组名: groupmod -n department tech (把tech组改名为department)。
修改GID: groupmod -g 1009 dev 。
3. 删除组: groupdel
删除一个空组(组里没有用户):
groupdel tech
⚠️ 注意:如果组是某个用户的基本组,无法直接删除,需要先删除该用户或修改用户的基本组。
4. 添加组成员: gpasswd
把用户加入组或从组中移除:
把用户加入组: gpasswd -a zhangsan tech (把zhangsan加入tech组)。
把用户从组中移除: gpasswd -d zhangsan tech 。
设置组管理员: gpasswd -A zhangsan tech (让zhangsan管理tech组,可以添加/删除成员)。
五、账号信息查询:快速定位用户与组
有时候我们需要快速查询用户或组的信息,下面几个命令可以帮你高效完成:
1. groups :查询用户所属的组
比如查询 zhangsan 属于哪些组:
groups zhangsan
输出结果会显示该用户的基本组和附加组,比如 zhangsan : tech mailadm 。
2. id :查询用户的UID、GID和组信息
查询 root 用户的标识信息:
id root
输出结果会显示UID、GID以及所属的所有组,比如 uid=0(root) gid=0(root) groups=0(root),1(daemon) 。
3. w :查询当前登录的用户信息
这个命令可以查看当前有哪些用户登录了系统,以及他们的操作:
w
输出结果会包含用户名、登录终端、登录时间、来源IP以及当前正在执行的命令。
4. grep :从配置文件中筛选信息
比如从 /etc/group 中查询包含 root 的组:
grep "root" /etc/group
这在排查用户组归属时非常有用。
六、新手避坑指南:常见问题与解决思路
1. 创建用户时提示“UID已被使用”
这是因为指定的UID已经被其他用户占用了,解决方法是换一个未被使用的UID,或者不指定UID让系统自动分配。
2. 普通用户无法执行管理员命令
普通用户需要在命令前加 sudo 来临时获取root权限,比如:
sudo useradd lisi
执行后需要输入当前用户的密码,验证通过后就能以root权限执行命令。
3. 删除用户时提示“用户已登录”
可以用 pkill -u 用户名 强制终止该用户的所有进程,然后再删除用户:
pkill -u zhangsan
userdel -r zhangsan
4. 忘记root密码怎么办
重启系统,在开机引导界面按 e 进入编辑模式,找到以 linux16 开头的行,在末尾添加 init=/bin/bash ,然后按 Ctrl+X 启动系统,进入单用户模式后,用 passwd root 重置密码。
七、总结:账号与权限管理的核心原则
1. 最小权限原则:给用户分配刚好够用的权限,不要用root账号日常操作。
2. 组权限优先:尽量通过组来管理权限,避免给每个用户单独设置权限,提高管理效率。
3. 定期审计:定期检查 /etc/passwd 、 /etc/shadow 等文件,删除不再使用的账号,避免安全隐患。
4. 密码安全:设置复杂的密码,定期更换,避免使用弱密码。
掌握这些知识,你就能应对绝大多数Linux账号与权限管理的场景了。记住,实践是最好的老师,建议你在虚拟机里反复练习这些命令,熟悉每个操作的效果和报错场景,这样在遇到问题时才能快速定位和解决。






