Linux文件权限详细解读
1.文件权限示例1.1 文件类型首字符最开头的字符表示该文件类型d 表示目录文件- 表示普通文件l 表示软链接1.2 权限类型r 表示read读权限w 表示write写权限x 表示excute执行权限- 表示无此权限对于普通文件r能读文件内容w能写/修改文件能容x能运行此文件对于目录文件r能列出该目录下的文件x能创建/删除该目录下的文件夹x能进入此目录1.3 权限分组第2~10字符每个文件权限由三个权限分组构成每个分组权限由三位字符表示Owner文件所有者权限由第2/3/4字符表示Group权限即与所有者同组的用户权限由第5/6/7字符表示Others权限即其他用户组权限由第8/9/10字符表示1.4 目录权限示例如上图第一行drwxr-x---共计10个字符每一位都有具体的含义d 表示该文件类型为目录文件rwx 表示Owner文件所有者拥有r读 w写 x执行cd进入的权限r-x 表示Group权限拥有r读x执行cd进入的权限--- 表示Others权限没有任何权限不可读/不可写/也进不去只能看得到1.5 文件权限示例如上图第二行-rw-r--r--共计10个字符每一位具体的含义如下- 该文件类型为普通文件rw- 表示Owner有读、写权限无执行权限r-- 表示同组用户只有读权限无写和执行权限r-- 表示其他用户组只有读权限无写和执行权限2. 文件权限的值2.1 每个组的每一位权限都对应一个数值基本规则如下r 4w 2x 1- 02.2 每组权限是每位权限的位操作之和rwx 421 7rw- 420 6r-x 401 5r-- 400 4-wx 021 3-w- 020 2--x 001 1--- 000 02.3 文件的完整权限示例777 rwxrwxrwx表示所有用户拥有可读可写可执行权限很危险755 rwxr-xr-x表示owner用户可读可写可执行同组和其他用户组拥有可读和可执行权限文件的一般数值如下所示普通文件默认 644 rw-r--r--可执行文件/目录默认 755 rwxr-xr-x私钥文件 600 r-x------只读文件 400 r--------3. 文件所有权修改chownchange owner改变文件的所有者和所属用户组。//基本语法如下 chown [新所有者]:[新用户组] 文件名场景命令效果文件所有者更换chown yol file.txt将file.txt的所有者改为yol文件换组chown :devteam file.txt将file.txt的所属组改为devteam所有人和组同时更换chown yol:devteam file.txt所有者改yol组改devteam递归修改目录chown -R yol:yol /home/yol将/home/yol下所有内容都改属主一个常见坑用sudo创建的文件所有者是root普通用户改不了。记得改完所有权sudo cp config.json /etc/myapp/ sudo chown myapp:myapp /etc/myapp/config.json4. 文件权限修改chmodchmod change mode作用改变文件/目录的读/写/执行权限。场景命令效果私有文件chmod 600 file.txt仅自己可读写-rw-------家目录安全chmod 700 /home/yol仅自己可进入drwx------脚本可执行chmod 755 script.sh自己可读写执行其他人只读执行共享目录chmod 775 /shared同组用户可写其他人只读5. chmod 777的危险chmod 777的意思是任何人都可以读、写、执行——包括服务器上的所有其他用户和所有运行中的进程。这就是它危险的地方。# 某开发者遇到权限问题图省事 chmod 777 /var/www/html/uploads/ # 这意味着 # - 任意用户可以往里写文件 # - Web 服务器进程www-data可以往里写任意文件 # - 如果网站有文件上传漏洞攻击者可以上传 PHP 木马 # - 木马具有执行权限x可以直接运行 # - 服务器被拿下正确做法# 只给 Web 服务器用户写权限其他人不能写 chown www-data:www-data /var/www/html/uploads/ chmod 755 /var/www/html/uploads/ # 或者如果只有 www-data 需要写 chmod 700 /var/www/html/uploads/最小权限原则只给必要的权限不多给一位。6. SUID6.1 定义SUIDSet User ID是 Linux 权限系统中一个极其特殊且危险的“提权”机制。它允许普通用户临6时借用文件所有者的身份来执行程序而不是以当前用户的身份执行。在权限位中x执行位被替换为s表示“执行 特殊权限”。位置正常权限开启SUID后含义所有者位-rwx-rwsSUID执行时变身为文件所有者组位-rwx-rwsSGID执行时变身为文件所属组例如# 查看 passwd 命令的权限 ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 59976 Nov 24 14:28 /usr/bin/passwd逻辑解析passwd文件属于root权限是rwsSUID。当前用户执行passwd但实际运行身份是root为什么需要修改密码需要写入/etc/shadow这个文件只有 root 可写。如果没有 SUID用户连改自己密码的权限都没有。其他常见SUID程序sudo提权工具本身就需要 SUID。ping需要 raw socket 权限通常需 root。mount挂载文件系统。6.2 SUID的风险SUID 是 Linux 系统最大的攻击面之一原因如下1提权漏洞放大器如果 SUID 程序如sudo、passwd存在代码漏洞攻击者可以利用漏洞直接获得 root 权限而不需要知道 root 密码。2恶意脚本风险如果某个 SUID 脚本被攻击者控制任何执行它的人都会自动以 root 身份运行恶意代码。3权限边界模糊普通用户可能无意中执行了带有 SUID 的后门程序导致权限泄露。6.3 SUID的管理6.3.1 SUID设置仅限root操作# 方法1数字4xxx chmod 4755 /path/to/program # 4 代表 SUID # 方法2符号 chmod us /path/to/program安全原则最小化原则系统中 SUID 文件越少越安全。不要给脚本加 SUID脚本容易被篡改极其危险。定期审计检查是否有未知的 SUID 文件出现。6.3.2 查找系统中的SUID文件# 查找所有 SUID 文件 find / -type f -perm /4000 2/dev/null # 查找 root 拥有的 SUID 文件高危 find / -type f -user root -perm /4000 2/dev/null7. 访问控制列表Access Control List, ACL传统权限只有三组Owner/Group/Others遇到这种场景就不够了文件属于alice组是dev。现在需要bob不在 dev 组也能读这个文件但其他所有人不能读。用传统权限做不到——只能把 Others 的r打开但那样所有人都能读了。ACLAccess Control List解决这个问题允许为任意用户或组单独设置权限。7.1 启用ACL# 检查 /home 分区的挂载选项 mount | grep home # 应包含 acl 字样如 defaults,acl 或 acl7.2 精细化权限分配# 1. 创建测试目录 mkdir /home/yol/project cd /home/yol/project # 2. 设置基础权限仅自己可访问 chmod 700 /home/yol/project # 3. 【关键】使用 ACL 添加例外规则 # 语法setfacl -m u:用户名:权限 路径 setfacl -m u:alice:rwx /home/yol/project # 给 alice 读写执行 setfacl -m u:bob:r-x /home/yol/project # 给 bob 只读进入 setfacl -m g:devteam:rwx /home/yol/project # 给 devteam 组全员读写7.3 权限分配验证getfacl /home/yol/project输出示例# file: /home/yol/project # owner: yol # group: yol user::rwx # 所有者yol权限 user:alice:rwx # 【ACL】用户 alice 单独权限 user:bob:r-x # 【ACL】用户 bob 单独权限 group::--- # 所属组yol权限 group:devteam:rwx # 【ACL】组 devteam 权限 mask::rwx # 有效权限掩码 other::--- # 其他人权限