编程与数学 03-009 Linux 操作系统应用 05_Linux 文件权限

摘要:本文深入讲解了 Linux 文件权限的管理与应用,涵盖权限基础模型、特殊权限位、文件与目录权限含义、查看与修改权限的方法,以及高级权限控制技术如默认权限控制、属性扩展权限和 ACL 的使用。同时,探讨了权限继承与传播规则、故障排查方法、安全加固实践,以及共享文件管理和临时提权等特殊场景处理。通过这些内容,读者可以全面掌握 Linux 权限管理的核心技能,确保系统安全性和稳定性。

关键词:Linux 文件权限,权限三元组,特殊权限,ACL,权限继承,安全加固

人工智能助手:Kimi


一、Linux 权限基础模型

(一)权限三元组结构

在 Linux 系统中,文件和目录的权限是通过权限三元组来表示的,这是 Linux 权限管理的基础。

  1. 权限字符分解:权限三元组由三部分组成,分别是所有者权限、所属组权限和其他用户权限。例如,-rwxr-xr--,其中:
    • - 表示文件类型,- 表示普通文件,d 表示目录。
    • rwx 表示所有者权限,r 表示可读,w 表示可写,x 表示可执行。
    • r-x 表示所属组权限,r 表示可读,x 表示可执行。
    • r-- 表示其他用户权限,r 表示可读。
  2. 数字权限表示法:权限也可以用数字来表示,每个权限位对应一个数字,r 为 4,w 为 2,x 为 1。例如:
    • 755 表示所有者有读写执行权限(rwx,4 + 2 + 1 = 7),所属组和其他用户有读执行权限(r-x,4 + 1 = 5)。
    • 644 表示所有者有读写权限(rw-,4 + 2 = 6),所属组和其他用户有读权限(r--,4)。

(二)特殊权限位详解

在 Linux 系统中,除了基本的读、写、执行权限外,还有一些特殊权限位,这些特殊权限位可以改变文件或目录的访问行为。

  1. Sticky Bit(目录防删位):当设置了 Sticky Bit 的目录,只有文件的所有者、目录的所有者或 root 用户才能删除或移动该目录中的文件。例如,chmod +t /shared,目录的权限会显示为 drwxrwxrwt
  2. SGID(继承父目录组):当设置了 SGID 的目录,新建的文件或子目录会继承父目录的所属组。例如,chmod g+s /project,目录的权限会显示为 drwxr-sr-x
  3. SUID(以所有者身份执行):当设置了 SUID 的文件,执行该文件时,会以文件所有者的权限执行。例如,chmod u+s /usr/bin/passwd,文件的权限会显示为 -rwsr-xr-x

(三)权限对文件和目录的不同含义

在 Linux 系统中,r(可读)、w(可写)和 x(可执行)权限对文件和目录有不同的含义。

  1. 文件权限
    • r:表示可以查看文件的内容。
    • w:表示可以修改文件的内容。
    • x:表示可以执行文件。对于可执行文件(如脚本或二进制文件),x 权限是必需的。
  2. 目录权限
    • r:表示可以列出目录中的文件和子目录。
    • w:表示可以创建、删除或重命名目录中的文件和子目录。
    • x:表示可以进入目录。没有 x 权限,即使有 r 权限,也无法进入目录。

(四)查看和修改文件权限

  1. 查看文件权限:使用 ls -l 命令可以查看文件或目录的权限。例如:
    ls -l /path/to/file
    
    输出示例:
    -rwxr-xr-- 1 user group 1234 Jan 1 12:34 /path/to/file
    
    其中,-rwxr-xr-- 表示文件的权限,1 表示链接数,user 表示文件所有者,group 表示文件所属组,1234 表示文件大小,Jan 1 12:34 表示文件的最后修改时间。
  2. 修改文件权限:使用 chmod 命令可以修改文件或目录的权限。例如:
    chmod 755 /path/to/file
    
    这将设置文件的权限为 rwxr-xr-x
  3. 修改文件所有者和所属组:使用 chownchgrp 命令可以修改文件的所有者和所属组。例如:
    chown user:group /path/to/file
    
    这将设置文件的所有者为 user,所属组为 group

二、高级权限控制技术

(一)默认权限控制

  1. umask 值计算umask(用户文件创建掩码)用于设置新建文件和目录的默认权限。umask 值是从最大权限中减去的值。例如:
    • umask 022,新建文件的默认权限为 644(666 - 022),新建目录的默认权限为 755(777 - 022)。
    • umask 027,新建文件的默认权限为 640(666 - 027),新建目录的默认权限为 750(777 - 027)。
  2. 系统级配置umask 值可以在系统级配置文件 /etc/profile/etc/bashrc 中设置,这样可以为所有用户设置统一的默认权限。例如,在 /etc/profile 文件中添加以下内容:
    umask 022
    

(二)属性扩展权限(chattr

chattr 命令可以设置文件或目录的扩展属性,这些属性可以提供更精细的权限控制。

  1. 设置不可变属性sudo chattr +i /critical_file,设置文件为不可变属性,这样文件就不能被删除或修改。
  2. 设置追加属性sudo chattr +a /var/log/audit.log,设置文件为追加属性,这样文件只能被追加内容,不能被删除或修改。
  3. 查看特殊属性lsattr /path,可以查看文件或目录的特殊属性。例如:
    lsattr /path/to/file
    
    输出示例:
    ----i--------e-- /path/to/file
    
    其中,i 表示文件具有不可变属性,e 表示文件使用了扩展属性。

(三)ACL(访问控制列表)

ACL 提供了比传统 chmod 更精细的权限控制。

  1. 查看 ACL:使用 getfacl 命令可以查看文件或目录的 ACL。例如:
    getfacl /path/to/file
    
    输出示例:
    # file: path/to/file
    # owner: user
    # group: group
    user::rwx
    group::r-x
    other::r--
    
  2. 设置 ACL:使用 setfacl 命令可以设置文件或目录的 ACL。例如:
    setfacl -m u:user1:rwx /path/to/file
    
    这将为用户 user1 设置对文件的读写执行权限。
  3. 删除 ACL:使用 setfacl 命令可以删除文件或目录的 ACL。例如:
    setfacl -x u:user1 /path/to/file
    
    这将删除用户 user1 对文件的 ACL。

三、权限继承与传播

(一)目录权限继承规则

  1. 新建文件继承父目录的组:当设置了 SGID 的目录,新建的文件或子目录会继承父目录的所属组。例如:
    sudo chmod g+s /project
    
    /project 目录下新建文件或子目录时,它们的所属组将继承自 /project 目录。
  2. ACL 默认规则:访问控制列表(ACL)可以为文件或目录设置更精细的权限。例如,setfacl -d -m u:user1:rwx /shared_dir,为 /shared_dir 目录设置默认规则,用户 user1 对该目录下的新建文件或子目录有读写执行权限。

(二)权限边界控制

  1. fs.protected_regular 内核参数:该内核参数用于防止系统文件被篡改。例如,在 /etc/sysctl.conf 文件中添加以下内容:
    fs.protected_regular = 1
    
    然后执行以下命令使配置生效:
    sudo sysctl -p
    
  2. 容器环境中的 rootless 模式权限限制:在容器环境中,rootless 模式可以限制容器内的 root 用户权限,防止容器内的 root 用户对宿主机造成损害。例如,使用 Podman 运行容器时,可以通过以下命令启用 rootless 模式:
    podman run --rootless -d my_image
    

四、权限故障排查

(一)常见问题诊断

当出现 “Permission denied” 错误时,可以通过以下步骤进行诊断:

  1. 检查文件权限:使用 ls -l 命令查看文件权限。例如:
    ls -l /path/to/file
    
    输出示例:
    -rwxr-xr-- 1 user group 1234 Jan 1 12:34 /path/to/file
    
  2. 确认用户所属组:使用 groups 命令查看用户所属的组。例如:
    groups user
    
    输出示例:
    user : user group1 group2
    
  3. 检查父目录执行权限:确保父目录有执行权限(x 位)。例如:
    ls -ld /path/to
    
    输出示例:
    drwxr-xr-x 2 user group 4096 Jan 1 12:34 /path/to
    
  4. 查看 SELinux/AppArmor 限制:如果系统启用了 SELinux 或 AppArmor,需要检查相关的安全策略。例如,使用 ls -Z 命令查看文件的 SELinux 上下文:
    ls -Z /path/to/file
    
    输出示例:
    -rwxr-xr--. user group unconfined_u:object_r:default_t:s0 /path/to/file
    

(二)权限修复示例

以修复 Web 目录权限为例:

sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data /var/www/html

五、安全加固实践

(一)敏感文件权限规范

为了确保系统的安全性,需要对敏感文件设置合适的权限:

  1. /etc/shadow:该文件存储了用户密码信息,权限应设置为 600,只有 root 用户可以访问。例如:
    sudo chmod 600 /etc/shadow
    
  2. SSH 密钥:SSH 密钥文件的权限应设置为 600,只有用户自己可以访问。例如:
    sudo chmod 600 ~/.ssh/id_rsa
    
  3. 日志文件:日志文件的权限应设置为 640,只有 root 用户和 adm 组的用户可以访问。例如:
    sudo chmod 640 /var/log/syslog
    

(二)权限监控与审计

  1. 检测 SUID/SGID 异常文件:使用 find 命令查找系统中具有 SUID 或 SGID 权限的文件,例如:
    find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -ld {} \;
    
    输出示例:
    -rwsr-xr-x 1 root root 1234 Jan 1 12:34 /usr/bin/passwd
    
  2. 监控权限变更:使用 auditctl 命令监控文件权限的变更,例如:
    sudo auditctl -w /etc/passwd -p wa -k passwd_change
    
    这将监控 /etc/passwd 文件的写入和属性变更事件。

六、特殊场景处理

(一)共享文件管理方案

以开发团队共享目录为例:

sudo mkdir -p /dev/project
sudo chmod 2775 /dev/project  # SGID+组读写
sudo setfacl -dm g:devteam:rwx /dev/project

(二)临时提权方法

  1. 精细化 sudo 授权:在 /etc/sudoers 文件中,可以为特定用户或组设置临时提权规则。例如:
    user1 ALL=(appuser) NOPASSWD: /opt/app/bin/start.sh
    
    这将允许用户 user1appuser 的身份无需密码执行 /opt/app/bin/start.sh 脚本。

附:权限管理速查表

场景命令示例
递归修改目录权限chmod -R 750 /secure_dir
修改文件所属组chgrp developers file.txt
清除所有特殊权限chmod =rwx file
验证权限实际效果sudo -u testuser cat /protected_file

总结

本节课我们详细介绍了 Linux 文件权限的各个方面,包括权限基础模型、高级权限控制技术、权限继承与传播、权限故障排查、安全加固实践以及特殊场景处理。通过学习这些内容,我们了解到:

  1. 权限基础模型:权限三元组结构和特殊权限位在 Linux 系统中起着关键作用,它们决定了用户对文件和目录的访问权限。
  2. 高级权限控制技术umask 值和 chattr 命令为我们提供了更灵活的权限控制手段,可以满足不同场景下的需求。
  3. 权限继承与传播:目录权限继承规则和 ACL 默认规则确保了权限的合理传播,而权限边界控制则有助于防止权限滥用。
  4. 权限故障排查:通过一系列诊断步骤,我们可以快速定位并解决权限相关的问题。
  5. 安全加固实践:对敏感文件设置合适的权限和进行权限监控与审计,有助于提高系统的安全性。
  6. 特殊场景处理:共享文件管理和临时提权方法为我们解决实际问题提供了有效的解决方案。

在实际工作中,我们应充分理解 r/w/x 对文件和目录的不同含义,遵循最小权限原则,合理使用 getfacl/setfacl 等工具进行权限管理,以确保系统的安全性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值