前言
在 Linux 系统中,用户、组和文件权限是保障系统安全与稳定运行的基石。无论是日常运维、应用部署还是团队协作,都离不开对账号的合理规划和对权限的精细控制。本文从用户账号与组账号的管理入手,逐步深入到文件属性的查看与修改,最后介绍 SUID、SGID、SBIT 特殊权限以及 ACL 访问控制列表等进阶内容,帮助读者系统掌握 Linux 权限体系的核心知识
目录
一、 管理用户账号和组账号
1.1 用户账号、组账号概述
1.2 用户账号管理
1.3 组账号管理
1.4 账号查询命令
二、 管理目录和文件属性
2.1 查看属性 ls -l / ls -ld
2.2 chmod 修改权限
2.3 chown 修改归属(属主、属组)
2.4 umask 默认权限
三、 进阶权限:特殊权限 + ACL
3.1 特殊权限 SUID SGID SBIT
3.2 ACL 访问控制列表(精细化权限)
本章总结
一、 管理用户账号和组账号
1.1 用户账号、组账号概述
用户账号三类
| 用户类型 | UID | 代表 | 特点 |
|---|---|---|---|
| 超级用户 | 0 | root | 系统最高权限,谨慎操作 |
| 普通用户 | 1000 及以上 | zhangsan、mike | 管理员创建,日常业务操作 |
| 程序用户 | 1-999 | ftp、mail | 运行服务,禁止登录系统 |
安全原则:日常不用 root 登录,需要管理员权限再切换
组账号
- 基本组(私有组):每个用户只能有 1 个,创建用户默认生成,一般和用户名同名,记录在 /etc/passwd
- 附加组(公共组):一个用户可以加入多个,用来获得额外权限
内核只识别 UID、GID 数字,用户名只是给人看的映射
1.2 用户账号管理
两大核心配置文件
/etc/passwd:用户公开基础信息,所有用户可读;7 个字段用 : 分隔
用户名:x:UID:GID:注释:家目录:登录Shell第 2 位 x 只是密码占位符,真正密码不在此处
Shell:/bin/bash 可登录;/sbin/nologin 禁止登录
/etc/shadow: 影子密码文件,仅 root 可读,存放加密密码、有效期,9 个字段 : 分隔
用户名:加密密码:上次改密时间:最短有效期:最长有效期:警告时间:宽限期:账号失效时间::!! / * 代表账号锁定,禁止登录
用户管理命令
useradd 创建用户
useradd [选项] 用户名| 选项 | 作用 |
|---|---|
| -u | 指定 UID |
| -d | 指定家目录 |
| -e YYYY-MM-DD | 账号失效日期 |
| -g | 指定基本组 |
| -G | 指定附加组,多个逗号隔开 |
| -s | 指定登录 shell,-s /sbin/nologin 禁止登录 |
默认行为:自动创建同名基本组;家目录 /home/用户名;复制 /etc/skel/* 模板文件到家目录
passwd 设置密码、锁定解锁账号
root:可以给任意用户改密码;普通用户只能改自己密码
passwd 用户名 # 设置密码 passwd -l 用户名 # 锁定账号 passwd -u 用户名 # 解锁账号 passwd -S 用户名 # 查看账号状态 PS正常 / LK锁定 passwd -d 用户名 # 清空密码usermod 修改已有用户属性,选项大部分同 useradd
usermod -l 新名 旧名 # 修改登录用户名 usermod -L 用户名 # 锁定账号 usermod -U 用户名 # 解锁账号 usermod -d /xxx 用户名 # 修改家目录(记得移动真实目录文件)userdel 删除用户
userdel 用户名 # 只删账号,保留家目录 userdel -r 用户名 # -r 删除账号+家目录+邮件(推荐)用户初始配置文件(模板 /etc/skel)
家目录下隐藏文件,用户登录自动执行
| 文件 | 作用 | 生效时机 |
|---|---|---|
| .bash_profile | 用户个人环境变量 | 登录时 |
| .bashrc | 别名、终端设置 | 打开新终端就执行 |
| .bash_logout | 退出执行脚本 | 退出登录时 |
用户全局配置:/etc/profile、/etc/bashrc,全部用户生效,root 修改
修改配置后 source 文件名 立即生效
1.3 组账号管理
组配置文件
/etc/group:组信息,4 字段组名:x:GID:成员,基本组成员不写在此处,附加组成员写在这里
/etc/gshadow:组密码影子文件,企业很少使用
组管理命令
groupadd 组名 # 创建组,-g 指定GID gpasswd -a 用户 组名 # 把用户加入组(附加组) gpasswd -d 用户 组名 # 从组移除用户 gpasswd -M user1,user2 组名 # 批量设置全部组成员,覆盖旧成员 groupdel 组名 # 删除组;不能删除某个用户的基本组1.4 账号查询命令
groups # 查看当前用户所有组;groups 用户名查看指定用户 id 用户名 # 查看uid/gid/所有组id(最常用) w # 查看当前系统所有登录用户,负载信息 pinky -l 用户名 # 查看用户登录属性(需要安装util-linux-user)二、 管理目录和文件属性
每个文件 / 目录两大属性:权限、归属(属主、属组);root 不受权限限制
2.1 查看属性 ls -l / ls -ld
ls -l 文件;ls -ld 目录(看目录本身,不是目录里面内容)
ls -l
权限 10 字符结构:【文件类型】【属主 u 3位】【属组 g 3位】【其他 o 3位】
文件类型:- 普通文件,d 目录,l 软链接,b 块设备,c 字符设备
r w x 对文件和目录含义完全不同(重点)
| 权限 | 文件含义 | 目录含义 |
|---|---|---|
| r | 读:读取文件内容 | 可以列出目录文件名(ls) |
| w | 写:修改、覆盖文件内容 | 可以创建、删除、重命名目录内文件(高危!就算文件不属于自己) |
| x | 执行:运行脚本 / 程序 ./xxx | 可以 cd 进入目录,目录必须要有 x 权限才能访问内部 |
2.2 chmod 修改权限
只有 root 和文件属主可以执行 chmod
r=4,w=2,x=1;数字累加;三级:属主、属组、其他
-R:递归,修改目录 + 目录内部全部文件子目录,谨慎使用
1)字符模式 chmod [ugoa][+-=][rwx]
u 属主,g 属组,o 其他,a 全部
+ 增加权限,- 移除,= 直接设置权限覆盖旧权限
chmod u+x,o-r test.txt2)数字模式
chmod 755 test # rwxr-xr-x chmod -R 644 /xxx # 递归2.3 chown 修改归属(属主、属组)
只有 root 可以执行 chown
chown 属主:属组 文件/目录 # 同时修改属主属组
chown 属主 文件 # 只改属主
chown :属组 文件 # 只改属组,冒号不能丢
chown -R user1:group1 /opt/data # 递归修改目录及内部所有文件
不要随便修改系统目录 /etc/bin 归属,会系统故障
2.4 umask 默认权限
控制新建文件、目录的默认权限
目录最大原始权限 777;文件最大原始权限 666(文件默认不会自动获得 x 权限,安全保护)
实际权限 = 最大权限 - umask
常用 umask(权限掩码)
| umask | 新建目录 | 新建文件 | 场景 |
|---|---|---|---|
| 022 | 755 | 644 | 系统服务器默认 |
| 002 | 775 | 664 | 团队共享目录 |
| 077 | 700 | 600 | 私有敏感目录 |
| 000 | 777 | 666 | 测试,生产禁止! |
umask 022:临时生效(当前终端)
永久修改要写配置文件,source 生效
umask 和父目录权限无关,新建文件权限只由 umask 决定
三、 进阶权限:特殊权限 + ACL
3.1 特殊权限 SUID SGID SBIT
| 特殊权限 | 数字位 | 字符标记 | 适用对象 | 功能 | 典型案例 |
|---|---|---|---|---|---|
| SUID | 4 | 属主 x 位变成 s | 可执行文件 | 执行程序时临时获得文件属主权限 | /usr/bin/passwd 4755 |
| SGID | 2 | 属组 x 位变成 s | 目录(也可文件) | 目录内新建文件自动继承目录的属组 | 团队共享目录 |
| SBIT 粘滞位 | 1 | 其他 x 位变成 t | 仅目录 | 目录内用户只能删除自己创建的文件,不能删别人的 | /tmp 目录 1777 |
设置示例
chmod u+s /bin/xxx # 设置SUID;数字4755
chmod g+s /opt/team # 设置SGID;数字2775
chmod o+t /opt/mytmp # 设置SBIT;数字1777
警告:不要随意给 rm、bash 设置 SUID,会造成重大安全漏洞。
3.2 ACL 访问控制列表(精细化权限)
基础权限只有 u/g/o 三级,ACL 可以给单独某个用户 / 单独某个组设置独立权限。
命令:
getfacl 文件 查看 ACL;ls -l 权限位末尾出现 + 号说明开启 ACL
setfacl 设置 ACL
setfacl 常用选项
- -m 添加 / 修改 ACL 条目
- -x 删除单条 ACL
- -b 清空全部 ACL,恢复普通权限
- -R 递归
- -d 设置默认 ACL(仅目录):目录中新创建文件自动继承 ACL
示例
# 给用户mike设置rwx权限
setfacl -m u:mike:rwx test.txt
给组dev设置rwx,递归目录
setfacl -R -m g:dev:rwx /opt/data
设置目录默认ACL,新建子文件自动继承
setfacl -d -m u:mike:rwx /opt/data
删除单条acl
setfacl -x u:mike test.txt
全部清空acl
setfacl -b test.txt
getfacl test.txt # 查看acl详情
本章总结
- 账号体系:用户分超级(UID 0)、普通、程序用户;每个用户 1 个基本组、多个附加组;核心配置 /etc/passwd、/etc/shadow、/etc/group
- 账号管理命令:用户命令 useradd、passwd、usermod、userdel;组命令 groupadd、gpasswd、groupdel;查询 id、groups、w
- 文件权限:r/w/x 对文件和目录意义不同;chmod 改权限;chown 改归属;-R 递归慎用
- 默认权限:umask 控制新建文件目录默认权限,文件不会默认带执行权限
- 特殊权限:SUID(4 提权)、SGID(2 继承属组)、SBIT(1 粘滞位防删他人文件)
- ACL 精细化授权:setfacl/getfacl;-d 默认 ACL 实现新建文件继承权限