权限拓展
1、文件归属更改
可以改变属主和属组
chown
命令(修改属主和/或属组)
chown [选项] 新属主:新属组 文件或目录
或(仅修改属组)
chown [选项] :新属组 文件或目录
常用选项
-R
:递归处理目录及其子内容。 -v
:显示操作详情
案例:同时修改属主和属组
将文件 file.txt 的属主设为 alice,属组设为 developers
chown alice:developers file.txt
案例:仅修改属主
将目录 /data 的属主设为 bob(不修改属组)
chown bob /data
案例:仅修改属组
将文件.log的属组设为 admins(等价于 chgrp)chown :admins file.log
案例:递归修改目录及其子内容
将 /var/www 目录下所有内容的属主设为 www-data,属组设为 webchown -R www-data:web /var/www
2、设置位S(SUID/SGID,针对二进制文件)
设置位S的作用
SUID(Set User ID):当普通用户执行具有SUID权限的二进制文件时,临时继承文件属主的权限(通常是root).
SGID(Set Group ID):类似SUID,但继承的是文件属组的权限。
主要针对二进制文件(命令),为了让一般使用者临时具有该文件所属主/组的执行权限.
/usr/bin/passwd 在执行它的时候需要去修改 /etc/passwd 和 /etc/shadow 等文件。
这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,该怎么办呢?
whereis 命令,主要功能就是查询某个命令所在的路径,基本语法 => whereis passwd
普通账号 => 执行 /usr/bin/passwd => 修改/etc/shadow 文件(存放用户的密码)
/etc/shadow 文件比较特殊,其权限为(000),除root外,其他人都没有权限
/usr/bin/passwd
的SUID机制
ls -l /usr/bin/passwd输出示例:-rwsr-xr-x 1 root root 59976 Nov 24 2022 /usr/bin/passwd
s
表示SUID已启用(属主执行位为 s
而非 x
)。
=普通用户执行
passwd
时,临时获得root权限,从而修改/etc/shadow
(默认权限:-rw-r-----
,仅root可写)
添加SUID:
chmod u+s /path/to/file 符号法
chmod 4755 /path/to/file 数字法(4表示SUID,755为基本权限)
移除SUID:
chmod u-s /path/to/file 符号法
chmod 0755 /path/to/file 数字法(0表示清除特殊权限)
验证权限:
ls -1 /usr/bin/passwd 检查属主执行位是否为 `-rws`
3、沾滞位T(针对文件夹)
SBIT
核心功能:在具有写权限的目录中,仅文件所有者、目录所有者或root可删除文件。
典型场景:多用户共享目录(如 /tmp
),防止用户误删他人文件。
/tmp
目录的粘滞位
默认权限分析:
ls -ld /tmp输出示例:drwxrwxrwt 10 root root 4096 Aug 30 10:00 /tmp
t
表示粘滞位已启用(其他用户执行位为 t
而非 x).
功能验证:
用户A在 /tmp
创建文件 fileA.txt
。
用户B无法删除 fileA.txt
,除非用户B是root或文件所有者。
添加粘滞位:
chmod o+t /path/to/dir 符号法
chmod 1777 /path/to/dir 数字法(1表示粘滞位,777为基本权限)
移除粘滞位:
chmod o-t /path/to/dir 符号法
chmod 0777 /path/to/dir 数字法(0表示清除特殊权限)
验证权限:
ls -ld /tmp 检查其他用户执行位是否为 `rwt`
注意事项
-
仅对目录有效:对文件设置粘滞位无意义。
-
权限配合:粘滞位需与目录的写权限(
w
)配合使用,例如1777
表示所有用户可读写,但受删除限制。
4、ACL访问控制
ACL,是 Access Control List(访问控制列表)的缩写,在Linux系统中,ACL可实现对单一用户设定访问文件的权限。
扩展:ACL权限可以针对某个用户,也可以针对某个组。ACL优势就是让权限控制更加的精准。
传统权限的局限性:
-
无法为多个用户/组单独授权:例如,共享目录需要允许用户A、B、C分别读写,但又不属于同一个组。
-
权限继承不灵活:目录下新建文件无法自动继承复杂权限规则。
ACL 的优势:
支持为任意用户或组单独设置权限.
支持为目录设置默认权限规则(新建文件自动继承).
ACL 权限优先级
当多个规则冲突时,优先级顺序为:
用户条目 > 组条目 > 传统属主权限 > 传统属组权限 > 其他用户权限
获取某个文件的ACL权限
基本语法:
getfacl 文件或目录名称
给某个文件设置ACL权限
setfacl【选项】文件或目录名称
选项说明:
-m:添加/修改 ACL 规则。
-x:删除 ACL 规则。
-b:删除所有 ACL 规则。
-R:递归操作目录。
-d:设置默认 ACL 规则(仅目录)。
案例:针对readme.txt文件给linuxuser设置一个权限=>可读
setfacl1 -m u:linuxuser:r readme.txt => 针对某个用户开通ACL权限
案例:针对shop文件夹给zking组设置一个权限=>可读可写权限rw
setfacl -R -m g:zking:rw shop => 针对某个用户组开通ACL权限
案例:把linuxuser用户权限从readme.txt中移除掉
setfacl -x u:linuxuser readme.txt
案例:把zking用户组权限从shop中移除掉
setfacl -x g:zking shop
案例:把readme.txt文件中的所有ACL权限全部移除
setfacl -b readme.txt