引言:为什么要学账号与权限管理?
多用户操作系统,就是Linux 账号控制用户访问资格,权限控制资源管理范围—— 比如限制普通用户修改系统文件、分配 FTP 用户仅访问指定目录、团队共享目录按组授权等,都是服务器安全与高效管理的核心。本文整理 16 个高频命令,按「用户→组→权限→查询」逻辑分类,附场景化用法和避坑技巧,新手可直接套用。
一、前置基础概念(先搞懂再动手)
在学命令前,先明确 3 个核心概念,避免踩坑:
- UID/GID:用户 / 组的唯一标识(0=root,1-999 = 架构账号,1000+= 普通账号);
- 核心组 vs 附加组:用户默认归属 1 个基本组(创建用户时自动生成或指定),可加入多个附加组(公共组);
- 权限三要素:
- 属主(u):文档 / 目录的创建者;
- 属组(g):文件 / 目录所属的组;
- 其他用户(o):非属主、非属组成员;
- 权限符号:r(读 = 4)、w(写 = 2)、x(执行 = 1),数字组合 = 权限总和(如 7=4+2+1)。
二、用户账号管理(4 个核心命令)
1. useradd:创建用户(基础中的基础)
功能说明:
新建 Linux 用户,可指定家目录、登录 Shell、所属组等属性,避免默认配置不符合需求。
命令格式:
useradd [选项] 用户名
关键选项(新手必记):
选项 | 作用 | 注意事项 |
-u | 指定 UID(如 1001) | 避免与已有 UID 冲突 |
-d | 指定家目录(如 /ftphome/mike) | 需确保目录路径存在 |
-g | 指定基本组(必须已存在) | 不指定则自动创建同名组 |
-G | 指定附加组(多个用逗号分隔) | 扩展用户权限范围 |
-s | 指定登录 Shell(/bin/bash = 允许登录,/sbin/nologin = 禁止登录) | 禁止登录用于 FTP / 邮件账号 |
-M | 不自动创建家目录 | 仅需账号记录时使用 |
场景化实战:
- 需求 1:创建 FTP 用户(禁止登录系统,仅访问 /ftphome/mike)
useradd -d /ftphome/mike -g ftpuser -G ftp -s /sbin/nologin mike
- 需求 2:创建普通登录用户(指定 UID,不自动建家目录)
useradd -u 1002 -M testuser
2. passwd:设置 / 管理用户密码
功能说明:
修改用户密码、锁定账号、查看密码状态,是用户登录系统的核心验证。
命令格式:
passwd [选项] 用户名(不写用户名 = 修改当前用户密码)
关键选项:
选项 | 作用 | 风险提示 |
-l | 锁定账号(禁止登录) | 仅 root 可操作 |
-u | 解锁账号 | 需与锁定成对应用 |
-d | 清空密码(无需密码登录) | 极高风险,生产环境禁用 |
-S | 查看密码状态(锁定 / 密码类型) | 快速排查账号困难 |
场景化实战:
- 修改当前用户密码(安全输入,密码不显示):passwd
- 锁定员工账号(离职时):passwd -l zhangsan
- 验证账号是否锁定:passwd -S zhangsan(输出 L = 锁定,P = 正常)
3. usermod:修改用户属性(账号创建后调整)
功能说明:
修改用户名、UID、家目录、所属组等,相当于「用户信息编辑应用」。
命令格式:
usermod [选项] 用户名
关键选项(复用 useradd 核心选项):
- -l:修改用户名(如把 zhangsan 改为 zhang);
- -u/-d/-g/-G/-s:同 useradd,用于调整对应属性;
- -L/-U:锁定 / 解锁账号(与 passwd 功能一致)。
场景化实战:
- 员工改名后,修改用户名 + 调整附加组:
usermod -l zhang -G tech,admin zhangsan
- 禁止用户登录(修改 Shell):usermod -s /sbin/nologin testuser
4. userdel:删除用户(谨慎处理!)
功能说明:
删除用户账号,默认仅删账号记录,需加选项才删除家目录。
命令格式:
userdel [-r] 用户名
关键选项:
选项 | 作用 | 注意事项 |
-r | 递归删除用户 + 家目录 + 所有材料 | 彻底清理,无法恢复 |
无选项 | 仅删除账号记录(保留家目录) | 需手动清理残留文件 |
场景化实战:
- 彻底删除离职员工账号(含工作文件):userdel -r zhangsan
- 临时删除账号(保留家目录,后续可能恢复):userdel testuser
三、组账号管理(3 个核心命令)
1. groupadd:创建组(用户的「组织单位」)
功能说明:
创建组账号,用于批量管理用户权限(如 tech 组用户可访问技术部共享目录)。
命令格式:
groupadd [-g GID] 组名
关键选项:
- -g:指定 GID(如 1003),不指定则架构自动分配(从 1000 开始)。
场景化实战:
- 创建技术部组(指定 GID):groupadd -g 1003 tech
- 创建市场部组(默认 GID):groupadd market
2. gpasswd:管理组成员(添加 / 删除 / 批量设置)
功能说明:
维护组的成员列表,比直接编辑 /etc/group 文件更安全高效。
命令格式:
gpasswd [选项] 组名
关键选项:
选项 | 作用 | 特点 |
-a | 向组添加单个用户 | 增量添加(不覆盖原有成员) |
-d | 从组删除单个用户 | 精准移除 |
-M | 批量设置成员(多个用户用逗号分隔) | 覆盖原有成员,谨慎使用 |
场景化实战:
- 把 mike 加入 tech 组:gpasswd -a mike tech
- 批量设置 market 组成员(张三、李四、王五):gpasswd -M zhangsan,lisi,wangwu market
- 把 lisi 移出 market 组:gpasswd -d lisi market
3. groupdel:删除组(前提:组内无成员)
功能说明:
删除空组,若组内有用户,需先移除成员再删除。
命令格式:
groupdel 组名
避坑提示:
- 某个用户的基本组,需先修改用户的基本组(usermod -g 其他组 用户名),再删除。就是报错「cannot remove the primary group of user」:说明该组
场景化实战:
- 删除空组 market:groupdel market
四、权限与归属管理(3 个核心命令)
1. chmod:设置文件 / 目录权限(最常用!)
功能说明:
控制谁能读、写、执行文件 / 目录,是权限管理的核心命令。
两种格式(新手推荐数字模式,灵活用符号模式):
模式 | 格式示例 | 适用场景 |
数字模式 | chmod 754 文件名 | 批量设置,简单高效 |
符号模式 | chmod u+x 文件名 | 精准调整某类用户权限 |
关键参数:
- 数字模式:3 位八进制数(属主 + 属组 + 其他用户),如 754=u=rwx(7)、g=rx(5)、o=r(4);
- 符号模式:u/g/o/a(用户类型)+ +/~/=(权限操作)+ r/w/x(权限类型);
- -R:递归修改目录及所有子文件 / 子目录(目录必须加,否则仅改目录本身)。
场景化实战:
- 让脚本可执行(属主 + 属组 + 其他用户均有执行权限):chmod +xtest.sh(等价于 chmod a+x)
- 设置共享目录(属主读写执行,属组读写执行,其他用户只读):chmod -R 775 /data/public
- 禁止其他用户修改文件:chmod o-w test.txt(仅去除其他用户的写权限)
避坑提示:
- 不要轻易设 777 权限(所有用户可读写执行),会导致记录被篡改风险;
- 目录必须有 x 权限(执行)才能进入,文件一般不要求 x 权限(脚本除外)。
2. chown:修改材料 / 目录归属(谁是主人)
功能说明:
调整文件 / 目录的属主(所有者)或属组,比如把员工创建的文件转给团队组。
命令格式:
需求 | 格式示例 |
仅改属主 | chown 用户名 目标 |
仅改属组 | chown :组名 目标 |
同时改属主 + 属组 | chown 用户名:组名 目标 |
关键选项:
- -R:递归修改目录及子项(必须加,否则仅改目录本身)。
场景化实战:
- 把材料转给 mike:chown mike report.txt
- 把技术部目录归属 tech 组:chown -R :tech /data/tech
- 同时改属主和属组:chown -R mike:tech /home/mike
3. umask:设置默认权限(新建文件 / 目录自动生效)
功能说明:
控制新建文件 / 目录的默认权限,通过「默认最大值 - 掩码」计算得出:
- 新建文件默认最大值:666(无执行权限,避免误执行脚本);
- 新建目录默认最大值:777(需执行权限才能进入);
- 计算示例:umask 022 → 文件默认 666-022=644,目录默认 777-022=755。
命令格式:
umask [掩码值](无参数 = 查看当前掩码)
场景化实战:
- 查看当前默认掩码:umask(默认一般是 002 或 022);
- 设置严格默认权限(仅属主可读写,其他人只读):umask 022;
- 团队共享服务器(组内可读写):umask 002(档案 664,目录 775)。
五、账号信息查询命令(6 个实用工具)
1. groups:查询用户所属组
- 格式:groups [用户名](无用户名 = 查当前用户);
- 示例:groups mike → 输出:mike : mike ftpuser tech(mike 是基本组,后两个是附加组)。
2. id:查询用户 UID/GID
- 格式:id [用户名];
- 示例:id mike → 输出:uid=1001(mike) gid=1001(mike) groups=1001(mike),1002(ftpuser),1003(tech)。
3. finger:查询用户详细信息(需安装)
- 作用:显示用户名、家目录、登录 Shell、登录时间等;
- 安装:yum install finger -y(CentOS)/ apt install finger -y(Ubuntu);
- 示例:finger mike。
4. 已登录用户查询(w/who/users)
命令 | 功能特点 | 适用场景 |
w | 显示登录用户 + 终端 + 登录时间 + 当前处理(最详细) | 排查谁在操作服务器 |
who | 显示登录用户 + 终端 + 登录时间(简洁) | 高效查看登录用户 |
users | 仅显现登录用户名(最简洁) | 统计当前在线人数 |
- 示例:快速查看谁在登录:users → 输出:root mike。
六、总结与实战建议
- 核心原则:最小权限原则(给用户 / 组分配刚好够用的权限,避免超额授权);
- 高频场景组合:
- 创建团队用户 + 组:groupadd tech → useradd -g tech -s /bin/bash zhangsan → passwd zhangsan;
- 共享目录授权:mkdir /data/tech → chown -R :tech /data/tech → chmod -R 775 /data/tech;
- 避坑清单:
- 否有重要文件(用ls /home/用户名检查);就是删除用户前先确认
- 锁定账号优先用passwd -l,而非删除(便于后续恢复);
- 避免给系统文件设 777 权限(如/etc/passwd),会导致系统漏洞。
建议新手先在测试机(如虚拟机)练习,熟悉后再操作生产服务器。如果遇到具体场景(如 FTP 权限配置、sudo 授权),可针对性扩展命令用法!
浙公网安备 33010602011771号