You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress配置FS_CHMOD_DIR时0775 & ~ umask()代码含义咨询

这行配置是WordPress用来定义程序自动创建新目录时使用的默认权限值的,0775 & ~ umask()是类Unix环境下非常经典的权限计算写法,完全适配系统本身的权限规则,具体逻辑如下:

基础概念铺垫

类Unix系统(Linux、macOS、各类BSD等)的文件/目录权限用八进制数值表示,每一位对应一组用户的读、写、执行权限:

  • 数值从左到右三组分别对应:文件所有者、所属用户组、其他所有用户
  • 单个权限的数值:读=4、写=2、执行=1,把需要的权限数值相加就是单组的权限值
    比如0775的含义就是:所有者可读可写可执行(4+2+1=7)、组内用户可读可写可执行(4+2+1=7)、其他用户可读可执行(4+1=5),是Web服务目录非常常用的基础权限配置。
运算逻辑逐段拆解

整个表达式是按位运算,三个部分各有用处:

  • umask():PHP内置函数,会返回当前系统配置的权限掩码,你可以直接把它理解成系统级的权限黑名单:掩码里某一位是1,就代表新创建的文件/目录绝对不能给对应位置的权限。常见的默认umask值有0022(屏蔽组用户、其他用户的写权限)、0002(仅屏蔽其他用户的写权限)两种。
  • ~:按位取反运算符,会把umask返回值的二进制位全部翻转:原来黑名单里要屏蔽的位(值为1)取反后变成0,原来允许的位(值为0)取反后变成1,最终得到一个「权限白名单」,只有白名单里的位是1。
  • &:按位与运算符,运算规则是两个数对应二进制位都为1时,结果位才为1,否则为0。这一步的本质就是拿预设的0775权限和刚才算出来的系统权限白名单做比对,只有两边都允许的权限位才会保留。
实际运算效果示例

拿最常见的系统默认umask0022举例:

  1. 预设权限0775转二进制(仅看有效权限位):111 111 101
  2. umask值0022转二进制:000 010 010
  3. umask按位取反后得到白名单:111 101 101
  4. 做按位与运算后结果为111 101 101,转八进制就是0755
    也就是说如果系统umask是0022,WordPress创建目录的实际权限就是0755,完全符合系统默认的安全要求,不会给组用户、其他用户多余的写权限。
    如果是共享主机环境常用的umask0002,运算后结果还是0775,会保留组用户的写权限,方便多个站点管理员共同维护文件,不需要手动修改WordPress配置。
为什么不直接写死0775?

直接硬编码权限值会有两个明显问题:

  • 如果系统配置了更严格的umask规则,硬写0775会直接绕过系统安全策略,导致目录权限过宽,容易被入侵
  • 不同主机环境的权限要求不一样,用这种动态计算的方式,只要调整系统层面的umask配置就能自动适配,WordPress本身不需要改配置,兼容性强得多

补充:这个计算逻辑不是WordPress独创的,系统原生的mkdir命令创建目录时,底层默认用的就是0777 & ~umask()计算最终权限,WordPress只是把系统默认的基础权限从0777改成了更安全的0775,同时保留了和系统权限规则适配的逻辑。


内容的提问来源于stack exchange,提问作者Gary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:15:37