Linux 用户·权限与安全扩展
用户和组管理是系统运维的基础操作,涉及用户账号、组账号的创建、修改、删除以及权限控制等。
用户和组的配置文件
- 用户信息配置文件 /etc/passwd
# 执行查看命令
cat /etc/passwd
#结果如下:
root:x:0:0:root:/root:/bin/bash
# root x 0 0 root root /bin/bash
# 用户名 密码位 用户ID 组ID 用户说明 用户家目录 登录shell执行文件- 密码配置文件,可用于设置密码相关 /etc/shadow 只有 root 用户拥有查看权限
# 执行查看命令
cat /etc/shadow
# 结果如下:
user1:加密密码:17214:0:99999:7:::
# user1 加密密码 17214 0 99999 7
# 用户名 加密密码 密码最近更改时间的时间戳(天数) 两次密码的修改时间间隔(天) 密码的有效期(天) 密码到期前的警告时间 密码到期宽限天数 失效时间
# 注意
如果密码是!!或\*代表用户不能登录
可以通过加密密码临时禁用客户:我们可以在密码前加 ! 号,改变加密值,让用户暂时无法登录,达到临时禁用用户的目的,修复时将 ! 去掉保存退出即可
密码最近更改时间的时间戳(天数):将天数时间戳转化成时间,date -d "1970-01-01 17214 days"
两次密码的修改时间间隔:默认 0 ,代表可以随意修改- 组信息配置文件 /etc/group
# 执行查看命令
cat /etc/group
# 结果如下:
user1:x:500:
# user1 x 500
# 组名 组密码位 组id(GID) 此组支持的其他用户
# 注意
初始组:每个用户的初始组只能有一个,一般都是和用户名相同的组作为初始组
附加组:每个用户可以属于多个附加组,要把用户加入组都加入附加组
组密码位:不建议设置组密码,建议只有管理员有最高权限即可
# 组密码配置文件(不建议设置密码)
cat /etc/gshadow- 用户目录所在
/home/用户名/ # 用户的家目录
/var/spool/mail/用户名/ # 用户的邮箱目录
/home/用户名/ # 用户的家目录
/home/用户名/ # 用户的家目录用户管理
注解
用户账号用于登录系统并获取相应权限,每个用户有唯一的 UID(用户 ID)
用户 id(UID)的范围:0 是管理员,1~499 是系统用户(伪用户:所有的系统服务都有自己的用户,比如 mysql,appache),500~65535 是普通用户
如果想把普通用户的权限改成管理员权限,直接将用户的 uid 设置为 0 保存退出即可(linux 系统通过 uid 来分配权限)
创建用户
# 基本语法
useradd [选项] 用户名
# 常用选项:
# -m:自动创建用户的家目录(/home/用户名)
# -g:指定用户的初始组(主组,必须已存在)
# -G:指定用户的附加组(可多个,用逗号分隔)
# -s:指定用户的默认shell(如 /bin/bash 或 /sbin/nologin)
# -u:指定自定义UID(需唯一)
# 示例:创建用户 test,自动创建家目录,主组为 users,附加组为 wheel,shell 为 bash
useradd -m -g users -G wheel -s /bin/bash test
# 创建用户 实际执行的是将用户信息写入所有用户配置文件
# /etc/passwd 写入 存储所有用户的基本信息
# /etc/shadow 写入 存储用户密码的加密信息(仅 root 可查看)
# /etc/group 写入 存储所有组的基本信息(组名、GID、成员列表等)
# /etc/gshadow 写入 存储组密码的加密信息(较少使用)
# /home/用户名/ 创建并写入
# useradd 的默认配置文件,用来修改默认的用户和密码配置
#/etc/default/useradd /etc/login.defs设置密码|锁定解锁用户
# 基本语法
passwd 用户名
# 示例:为用户 test 设置密码(输入后会提示输入新密码)
passwd test
# 选项:
# -l:暂时锁定用户,禁止登录,仅root用户可用此命令(实际:在/etc/shadow 配置文件的密码前加 !)
# -u:解锁用户,仅root用户可用此命令(实际:去掉/etc/shadow 配置文件的密码前的 !)
# -d:清除用户密码(登录无需密码,不推荐)
# -stdin:通过管道符输出数据作为用户和密码,主要在批量添加用户的时候使用(echo "123" | passwd --stdin user1)
# 常用操作
passwd -l test # 锁定 test 用户
change -d 0 user1 # 让用户登录就要修改密码(将 shadow 第三字段归 0,即:密码修改日期设置为 0)
# 批量添加用户和设置密码
echo "123" | passwd --stdin user1
echo "456" | passwd --stdin user2
echo "789" | passwd --stdin user3
echo "000" | passwd --stdin user4
# 但是会有记录,需要 history -c 清楚,以确保密码安全
history
history -c修改密码
# 管理员修改其他用户密码
语法:passwd 用户名
规则:不需要输入旧密码,直接输入新密码,密码设置随意,可不符合密码规则
# 用户自己修改自己的密码
语法:passwd
规则:先输入旧密码,在输入两次新密码,且密码不能太简单,要符合密码原则删除用户
# 基本语法
userdel [选项] 用户名
# 选项:
# -r:删除用户的同时,删除家目录和邮件目录(推荐)
# 示例:彻底删除 test 用户及其家目录
userdel -r test
# 或者手动删除(不推荐)
vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim /etc/gshadow
rm -rf /home/用户名/修改用户信息
# 基本语法
usermod [选项] 用户名
-u 修改UID
-g 修改组名,配置文件/etc/passwd 第四个字段
-G 修改附加组
-c 修改用户说明,配置文件/etc/passwd 第五个字段
-d 修改家目录
-s 修改用户登录的shell位置,默认/bin/bash
-e 修改用户的失效日期,配置文件/etc/shadow 的第八个字段
-L 临时锁定用户
-U 解锁用户
# 示例:将 test 用户的附加组添加 docker
usermod -aG docker test # -a 表示追加,避免覆盖原有附加组
# 示例:修改 test 用户的家目录为 /opt/test,并移动原文件
usermod -d /opt/test -m test查看用户
# 查看当前登录用户
whoami
# 查看用户详细信息(UID、GID、组等)
id 用户名 # 如 id test
# 查看系统所有用户(/etc/passwd 文件存储用户信息)
cat /etc/passwd | grep 用户名切换用户身份
注意:超级用户切换到其他用户不需要输入密码,其他用户切换需要输入密码
# 基本语法
su [选项] 用户名
# 选项
- 彻底切换到新用户,使用 exit 命令,退回到原来用户
-c 临时切换到新用户,使用 exit 命令,退回到原来用户组管理
组用于统一管理用户权限,每个组有唯一的 GID(组 ID),用户可属于一个主组和多个附加组。
创建组
# 基本语法
groupadd [选项] 组名
# 选项:
# -g:指定自定义GID(需唯一)
# 示例:创建组 dev
groupadd dev
# 示例:创建GID为10086的组 test_group
groupadd -g 10086 test_group修改组属性
# 基本语法
groupmod [选项] 组名
# 选项:
# -g:修改GID
# -n:修改组名
# 示例:将组 dev 改名为 develop
groupmod -n develop dev
# 示例:将组 develop 的GID改为10010
groupmod -g 10010 develop删除组
# 基本语法(组必须不是任何用户的主组才能删除)
groupdel 组名
# 示例:删除组 test_group
groupdel test_group管理组内用户
# 基本语法
gpasswd [选项] 组名
# 常用选项:
# -a:添加用户到组
# -d:从组中删除用户
# -M:设置组的成员列表(覆盖原有成员,用逗号分隔)
# 示例:将用户 test 添加到组 develop
gpasswd -a test develop
# 示例:从组 develop 中删除用户 test
gpasswd -d test develop
# 示例:设置组 develop 的成员为 user1,user2,user3
gpasswd -M user1,user2,user3 develop查看组信息
# 查看用户所属的组
groups 用户名 # 如 groups test
# 查看系统所有组(/etc/group 文件存储组信息)
cat /etc/group | grep 组名 # 过滤特定组提示
Linux系统遵循 一切皆文件 原则,目录也是文件,读、写、执行权限是文件最基本权限,也是最常用权限,但是要注意权限作用的位置依次是:所有者、所属组、其他人
在 Linux 系统中,chmod 命令用于修改文件或目录的访问权限,权限控制着用户(所有者、组用户、其他用户)对文件的读(r)、写(w)、执行(x)操作
查看文件权限
# 基础语法
ls -l # 查看文件权限
ls -la # 查看文件权限(包括隐藏文件)
# 结果
-rw-r--r-- 1 root root 658739200 Jan 10 2025 nvm.tar.gz
drwxr-xr-x 8 root root 4096 Oct 30 10:49 test
# 结果解析 drwxr-xr-x 8 root root 4096 Oct 30 10:49 test
1. 第一个字符代表文件类型
- 代表普通普通文件
d 代表目录文件,linux中所有的文件或目录的一中
b 块设备文件,特殊设备文件,存储设备都是这个文件,比如:/dev/sda1
c 字符设备文件,特殊设备文件,输入设备是这个文件,比如:鼠标、键盘等
i 软连接文件
p 管道符文件,非常少见的特殊设备文件
s 套接字文件,殊设备文件,比如:socket访问会产生这类文件
2. 之后的 9 个字符,代表读写执行权限,每三个为一组用户,共三个组:
第一组:所有者权限(u) ----------------- user 首字母
第二组:所属组的权限(g) ----------------- group 首字母
第三组:其他人的权限(o) ----------------- other 首字母
每一组中的字符功能(有对应字符代表有权限,- 代表无权限):
第一个字符:可读权限(r) ----------------- read 首字母
第二个字符:可写权限(w) ----------------- write 首字母
第三个字符:可执行权限(x) ----------------- eXecute 第二个字母
3. 8 代表硬链接数,普通文件默认 1,目录默认等于子目录数 + 2(.和..)
4. 第一个 root 代表所有者
5. 第二个 root 代表所有者
6. 4096 代表存储大小,单位是字节
7. Oct 30 10:49 代表最后修改时间
8. test 代表文件 / 目录名chmod 文件权限管理(增、删、改)
# 基础语法
chmod [选项] 权限 文件/目录
# 选项
-R # 递归,如果要修改目录及其中所有文件 / 子目录的权限,需加 -R 选项(递归)
# 三类用户
u 所有者(User):文件的创建者。
g 所属组(Group):所有者所在的用户组。
o 其他用户(Others):既不是所有者也不在所属组的用户。
a 所有用户(all):所有
# 操作符
+ 添加权限
- 移除权限
= 设置权限(覆盖原有权限)
# 三种权限
r(Read,读权限):允许查看文件内容或列出目录内容(值为 4)。
w(Write,写权限):允许修改文件内容或创建 / 删除目录中的文件(值为 2)。
x(Execute,执行权限):允许运行文件(如脚本、程序)或进入目录(值为 1)。
# 数字模式权限(简洁)
4:r--(4) # 核心(读权限)
2:-w-(2) # 核心(写权限)
1:--x(1) # 核心(执行权限)
7:rwx(4+2+1)
6:rw-(4+2)
5:r-x(4+1)
3:-wx(2+1)
0:---(无权限)
# 示例
chmod u+rwx 文件名 # 添加 文件 的所有者的读、写、执行权限
chmod g+rwx 文件名 # 添加 文件 的所属组的读、写、执行权限
chmod o+rwx 文件名 # 添加 文件 的其他人的读、写、执行权限
chmod u+rwx,g+rwx,o+rwx 文件名 # 可联合统一设置
chmod u=rwx 文件名 # 设置 文件 的所有者的读、写、执行权限
chmod u-rw 文件名 # 删除 文件 的所有者的读、写权限
chmod 744 文件名 # 所有者读写执行,组和其他用户只读---------------- 最常用的文件权限
chmod 770 dir/ # 所有者读写执行,组读写执行,其他用户无权限---------------- 最常用的文件权限rwx 权限的实际意义
# 权限对 文件 的作用
可读 r 权限 # 可对此文件执行:cat、more、less、head、fail 等文件查看命令
可写 w 权限 # 可对此文件执行:vim、echo 等修改文件数据命令,注意:无权删除此文件,如果要删除需要对文件的上级目录拥有可写的权限
可执行 x 权限 # 文件变成执行文件,对文件来说 可执行 权限是最高的
# 权限对 目录 的作用
可读 r 权限 # 可对此目录执行:ls 命令
可写 w 权限 # 可对目录内文件进行 创建、删除、复制、剪切操作,即可执行:touch、rm、cp、mv 命令,对目录来说 可写 权限是最高的
可执行 x 权限 # 可进入,即:拥有 x 权限可以对此目录执行 cd 命令
# 注意:
目录只有以下几个可用权限,因为 x 和 r 权限是必须得给得,否则此目录无意义
0 不给予任何权限
5 进入和查看的权限
7 完全权限注意事项
- 命令之间的空格,可以空多个
- 权限对于超级用户 root 来说几乎没意义,权限是超级用户用来限制普通用户得
- root 管理员的 UID 是 0,普通用户的 UID > 500
- 只有文件的所有者或 root 用户才能使用 chmod 修改权限。
- 目录的 x 权限表示 “可进入”(cd),若没有 x 权限,即使有 r 权限也无法查看目录内容。
- 谨慎使用 777 权限(所有用户可读写执行),可能导致安全风险。
Linux 文件 / 目录的所有者、所属组和其他人(Other)管理,核心是通过 chown、chgrp、chmod 三个命令分别控制归属权和访问权限,实现文件安全隔离。
chown 修改文件的所有者、所属组
# 基础语法
chown [选项] 新所有者 文件名 # 修改所有者
chown [选项] 新所有者:新所属组 文件名 # 同时修改所有者和所属组
# 选项
-R # 递归,如果要修改目录及其中所有文件 / 子目录的所有文件的所有者,需加 -R 选项(递归)
# 示例
chown user1 text.txt # 将文件 test.txt 的所有者改为用户 user1
chown user1:group1 test.txt # 将文件 test.txt 的所有者改为 user1,所属组改为 group1chgrp 修改文件的所属组
# 基础语法
chgrp [选项] 新所属组 文件名
# 选项
-R # 递归,如果要修改目录及其中所有文件 / 子目录的所有文件的所属组,需加 -R 选项(递归)
# 示例
chgrp [选项] group1 text.txt # 将文件 test.txt 的所属组改为组 group1注意事项
- 普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行
- 普通用户只可以修改所有者是自己的文件的权限
- 创建用户后,这个用户自成用户组,用户名和所属组名相同
- [选项] 为 -R 是给目录中的所有文件设置权限
在 CentOS 系统中,umask(用户文件创建掩码)用于控制新创建文件和目录的默认权限。它通过从默认最大权限中减去掩码值来确定最终权限,避免新文件 / 目录默认拥有过高权限,增强系统安全性。
默认权限与 umask 的关系
文件默认最大权限:666(即 -rw-rw-rw-,无执行权限 x,避免文件默认可执行)。
目录默认最大权限:777(即 drwxrwxrwx,目录需要执行权限才能进入)。
umask 的值为要禁止的权限,计算方式:最终权限 = 默认最大权限 - umask 权限
umask 命令
# 查看当前 umask
umask # 输出示例:0022(表示默认掩码为 022)
# 临时修改 umask
umask 0002 # 临时将掩码改为 0002
# 永久修改 umask
vim /etc/profile # 编辑 /etc/profile 或 /etc/bashrc(CentOS 中推荐 /etc/profile)
umask 022 # 在文件中添加或修改 umask 配置
source /etc/profile # 保存后执行 source /etc/profile 使配置立即生效。
# 用户级别修改
vim ~/.bash_profile
umask 007 # 例如设置为 007(禁止其他用户的所有权限)
source ~/.bash_profile # 保存后执行 source ~/.bash_profile 使配置立即生效。常见的 umask 配置
umask 值 新文件权限(666 - umask) 新目录权限(777 - umask) 说明
000 666(-rw-rw-rw-) 777(drwxrwxrwx) 所有用户可读可写(不安全)
002 664(-rw-rw-r--) 775(drwxrwxr-x) 允许同组用户读写,其他用户只读
022 644(-rw-r--r--) 755(drwxr-xr-x) 仅所有者可写,其他用户只读(默认常用)
077 600(-rw-------) 700(drwx------) 仅所有者有所有权限注意事项
- umask 仅影响新创建的文件 / 目录,对已存在的文件无作用(需用 chmod 修改)。
- 不同用户(如 root 和普通用户)可能有不同的默认 umask(例如 root 默认 022,普通用户可能默认 002)。
- 若同时配置了系统级和用户级 umask,用户级配置会覆盖系统级。
注解
在 Linux 系统中,ACL(Access Control Lists,访问控制列表)是对传统 Unix 文件权限(用户、组、其他)的扩展,允许对文件 / 目录设置更精细的权限控制。 通过 ACL,你可以为多个用户或组分配不同的权限,而不仅限于文件的所有者、所属组和其他用户三类。
ACL 权限的作用
为特定用户(除所有者外)设置权限
为特定组(除所属组外)设置权限
支持默认 ACL(对目录生效,新创建的文件 / 目录会继承该 ACL)
ACL 权限管理
Linux 中主要通过 getfacl 和 setfacl 两个命令管理 ACL 权限
# 检查是否安装 ACL
which getfacl setfacl
# 安装 ACL
yum install acl
# 查看文件 / 目录的 ACL 权限
## 基础语法
getfacl 文件 / 目录
## 示例
getfacl test.txt # 查看 test.txt 的 ACL 信息
## 结果解析
## user::rw- # 所有者权限
## user:alice:r-- # 特定用户 alice 的权限
## group::r-- # 所属组权限
## group:dev:rw- # 特定组 dev 的权限
## mask::rw- # 权限掩码(限制除所有者和 other 外的最大权限)
## other::--- # 其他用户权限
# 设置文件 / 目录的 ACL 权限
## 基础语法
setfacl [选项] 权限规则 文件/目录
## 选项
-m:修改 / 添加 ACL 规则
-x:删除指定的 ACL 规则
-b:删除所有 ACL 规则(保留传统权限)
-d:设置默认 ACL(仅对目录有效,新文件 / 目录会继承)
-R:递归应用 ACL(对目录下所有内容生效)
## 示例
setfacl -m u:user1:r test.txt # 允许 user1 用户,对 test.txt 文件拥有 读 权限
setfacl -m g:group1:rw test.txt # 允许 group1 组,对 test.txt 文件拥有 读、写 权限
setfacl -x u:user1 test.txt # 删除用户 user1 的 ACL 权限
setfacl -b test.txt # 清空所有 ACL 权限:
setfacl -Rm g:group1:rwx dir/ # 允许组 group1 对 dir 目录有读、写、执行权限,并递归应用到子文件/目录
setfacl -d -m u:alice:rw- dir/ # 为 dir 目录设置默认 ACL:新文件自动允许用户 alice 读写注意
- ACL 作用是:用于解决用户身份不足的,即:系统权限无法满足时,单独对目录设置 ACL 权限,
- 一旦设置了 ACL 权限,ls -a 看到的权限就不准确了,需要使用 getfacl 文件名 查看 ACL 权限,
- 一旦给子目录递归设置权限后权限会溢出,所以建议:能用系统权限解决就不用 ACL 权限做
- 默认 ACL 仅对新创建的文件 / 目录生效,已有文件 / 目录需手动设置
- ACL 权限不会覆盖传统权限,而是作为补充。例如,传统权限的 other 若为 ---,则 ACL 中即使给其他用户设置权限也无效。
注解
在 CentOS 中,sudo 是用于授予普通用户临时执行管理员权限的工具,通过配置 /etc/sudoers 文件实现权限管理。
普通用户执行 sudo 命令 时,系统会验证该用户是否在 sudoers 配置中被授权,验证通过后(可能需要输入用户自身密码),临时以 root 权限执行命令,执行完毕后权限回收。
sudo 作用
给普通用户赋予部分管理员权限,因为 /sbin/和/usr/sbin/目录下的命令只有管理员可以使用 比如:重启服务器、更新文件等权限,普通用户无法使用,所以可以使用 sudu 命令,将管理员权限指定给用户
sudo 权限管理
sudo 的配置文件 /etc/sudoers,必须使用 visudo 命令编辑
# 基础语法
visudo # 进入 /etc/sudoers 文件的编辑模式
# sudo 配置文件 /etc/sudoers 的内容格式
用户/组 主机=(可切换的用户) 允许执行的命令
# 参数解析
用户 / 组 # 指定用户(如 testuser)或组(组名前加 %,如 %wheel)。
主机 # 指定允许在哪些主机上使用 sudo(ALL 表示所有主机)。
可切换的用户 # 指定可切换到的用户(ALL 表示所有用户,通常为 root)。
允许执行的命令 # 指定可执行的命令(ALL 表示所有命令,需写绝对路径,如 /bin/ls)。
# 示例
用户名或者组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
root ALL=(ALL) ALL # 让 root 用户拥有所有权限
%root ALL=(ALL) ALL # 让 root 组拥有所有权限
user1 ALL=(ALL) ALL # 让 user1 拥有管理员权限(需输入自身密码)
user2 ALL=(ALL) NOPASSWD: ALL # 允许用户免密执行所有命令
% userNoPass ALL=(ALL) NOPASSWD: ALL # 允许 userNoPass组 免密执行所有命令
user3 ALL=(ALL) /usr/bin/systemctl, /bin/ls # 仅允许 user3 执行 systemctl 和 ls 命令
user4 ALL=(ALL) /sbin/shutdown -r now # 仅允许 user4 执行 shutdown -r now 重启命令
# 查看当前用户可执行的 sudo 权限
sudo -l注意事项
- 避免给普通用户 NOPASSWD: ALL 权限,仅在必要时使用。
- 尽量通过 wheel 组管理 sudo 权限,而非直接修改 sudoers 单个用户。
- 定期检查 /var/log/secure 日志(sudo 操作记录),排查异常使用。
- 若
visudo保存时提示语法错误,按 e 重新编辑,切勿强制退出。 - 若误操作导致无法使用 sudo,可重启进入单用户模式修改 sudoers。
提示
SUID、SGID、SBIT 权限是 Linux 中特殊且重要的权限,它们能让文件或目录在执行时临时获得额外权限
核心结论是:SUID 针对用户、SGID 针对组、SBIT 针对目录,分别解决 “临时提权执行”“继承组权限” 和 “保护目录内文件” 的问题
三者作用
- SUID:让用户执行文件时,临时获得文件所有者权限 SUID(Set User ID)是针对可执行文件的特殊权限,作用是让普通用户执行该文件时,临时拥有文件所有者(通常是 root)的权限。
# 场景
/usr/bin/passwd文件默认带有 SUID 权限,普通用户执行它时,会临时获得 root 权限,从而能修改自己的密码(修改/etc/shadow文件)。
# 权限标识(如何查看文件的 SUID 权限)
在文件所有者权限位的执行位(x)处显示为s,如 -rwsr-xr-x;若所有者原本无执行权限,则显示为S(大写)。- SGID:让用户执行文件时,临时获得文件所属组权限或继承目录组
# 作用
多人协作的项目目录,设置 SGID 后,所有人在该目录下创建的文件都属于同一组,方便共享权限。
# 权限标识(如何查看文件的 SGID 权限)
在文件所属组权限位的执行位(x)处显示为s,如 -rwxr-sr-x;若组原本无执行权限,则显示为S。- SBIT:让用户执行文件时,保护目录内文件不被随意删除 仅作用于目录,核心是限制目录内文件的删除权限 —— 只有文件所有者、目录所有者或 root,才能删除该目录下的文件
# 作用
防止普通用户删除他人在公共目录下的文件,典型场景是/tmp目录(系统临时文件目录)
# 权限标识(如何查看目录的 SBIT 权限)
在目录其他用户权限位的执行位(x)处显示为t,如 drwxrwxrwt;若其他用户原本无执行权限,则显示为T(大写)。SUID 权限的增、删、查
此权限只是针对执行文件,设置此权限后任何用户都可临时成为此文件的所属着,即拥有执行此文件的权限
chmod u+s /usr/xxx/file1 # 增加 SUID 权限
chmod u-s /usr/xxx/file1 # 删除 SUID 权限
ls -a # 查看SUID权限,在所有者位置显示 s 就是拥有SUID权限SGID 权限的增、删、查
此权限时针对对执行文件和目录,设置此权限后任何用户在执行此文件时都会变成此文件的所属组,也就拥有了此文件的执行权限
chmod g+s /usr/xxx/file1 # 增加 SGID 权限
chmod g-s /usr/xxx/file1 # 删除 SGID 权限
ls -a # 查看SGID权限,在所有者位置显示 s 就是拥有SUID权限SBIT 权限的增、删、查
此权限只是时针对目录,设置此权限后任何用户对此目录都有rwx权限,但是普通用户只能删除自己建立的文件,无法删除其他用户的文件,哪怕有w权限
chmod o+t /usr/xxx/dir1 # 增加 SBIT 权限
chmod o-t /usr/xxx/dir1 # 删除 SBIT 权限
ls -a # 查看SBID权限,在其他人位置显示 s 就是拥有SUID权限三者的数字权限表示法
chmod 4775 file1 等价于 chmod u+s file1 # 第一位是4,代表赋予用户SUID权限
chmod 2775 file1 等价于 chmod g+s file1 # 第一位是2,代表赋予用户SGID权限
chmod 1777 file1 等价于 chmod o+t file1 # 第一位是1,代表赋予用户SBID权限注意
一般的系统命令文件都有 SUID、SGID、SBIT权限,作用是让非管理员用户临时具有管理员的权限执行命令
在 Linux 系统中,chattr 命令用于修改文件或目录的扩展属性(extended attributes),这些属性可以限制文件的操作权限, 即使是 root 用户也可能受到这些属性的约束。它常被用于增强文件的安全性,防止误删除、篡改或意外修改
chattr 权限管理
- 增删改权限
# 基础语法
chattr [选项] [属性] 文件/目录
# 选项
-R # 递归处理目录及其子内容(对目录操作时常用)。
-v <版本号> # 设置文件的版本号(较少用)。
-V # 显示命令执行过程的详细信息。
# 属性
i # 不可修改属性,设置后,文件 / 目录无法被删除、重命名、修改内容,也不能添加 / 删除链接,即使 root 用户也不行(除非移除该属性)
a # 仅追加属性,文件只能被追加内容(如日志文件),无法删除、修改已有内容或截断;目录只能创建新文件 / 目录,不能删除已有文件 / 目录。
u # 可恢复属性,删除文件时,数据会被保留,允许通过 lsattr 等工具恢复
d # 不备份属性,设置后,文件 / 目录不会被 dump 命令备份。
s # 安全删除属性,删除文件时,其数据会被彻底清零(覆盖),防止恢复。- 查看权限
lsattr /etc/passwd # 查看单个文件
lsattr -R /data/backup # 递归查看目录示例
# 防止 /etc/passwd 被篡改
chattr +i /etc/passwd
# 允许再次修改文件
chattr -i /etc/passwd
# 确保 /var/log/messages 只能被追加内容
chattr +a /var/log/messages
# 保护 /data/backup 目录下的所有内容,不可篡改
sudo chattr -R +i /data/backup
# 防止 /etc/passwd 被篡改
chattr +i /etc/passwd注意事项
- chattr 的属性优先级高于普通权限(rwx)和 root 权限,设置后需谨慎操作。
- 部分属性(如 u、s)仅支持特定文件系统(如 ext 系列),不支持所有文件系统(如 NFS、tmpfs 等)。
- 对目录设置 i 或 a 时,仅影响目录本身的操作,不直接限制目录内文件(需单独为文件设置)。
- 使用场景:通过 chattr 可以为关键文件(如配置文件、日志文件)添加额外保护
