Apache 未创建启用 sgid 的目录

Apache 未创建启用 sgid 的目录

我将 sgid 递归添加到我的 WordPress 网站的文档根目录中。我可以在其中创建文件和目录并继承组。即使是由 FTP 创建的目录也可以与 sgid 一起正常工作。但是 apache (www-data) 创建的任何目录都没有启用 sgid 位,因此内部的任何内容都将使用默认的 www-data:www-data 创建。

例如,在 uploads/2017 目录中,apache 创建了没有 sgid 的 09 目录。即使我在这里使用 root 用户创建任何目录,它也会启用 sgid。

drwxrwsr-x+ 10 www-data myuser  4096 Sep 19 20:44 . 
drwxrwsr-x+ 16 www-data myuser  4096 Sep 19 20:48 ..    
drwxrwxr-x+  2 www-data myuser  4096 Sep 19 19:23 09 
drwxrwsr-x+  2 root     myuser  4096 Sep 19 21:04 test

我们如何在创建新目录时强制 apache 使用 sgid?

答案1

这是 WordPress 的事情,对吧?我遇到了同样的问题,我也指责 Apache,但我找到的解决方案实际上是 WordPress 设置。

https://codex.wordpress.org/Editing_wp-config.php#Override_of_default_file_permissions

在我的特定服务器上,WordPress 使用自己的文件权限设置(并忽略 SGID 位),与您描述的方式相同。我不知道理由是什么,但似乎是故意的。我的解决方案是将特定的权限掩码添加到 wp-config.php 文件中:

define( 'FS_CHMOD_DIR', 02775 );
  • 0 == 八进制

  • 2==设置SGID

  • 第755章

使用正确的权限设置现有的 WordPress 文件和目录(包括所有目录上的 SGID)后,WordPress 创建的新文件和目录(插件、主题、上传)使用 02755 文件掩码并继承了正确的组所有权。注意 Apache 用户 www-data 也必须在该组中。

更多细节:

  1. 创建供所有 SFTP 用户和 Apache 使用的组:sudo groupadd sftp-grp。

  2. 将 Apache 添加到组 sftp-grp: sudo usermod -a -G sftp-grp www-data

  3. 将常规用户添加到组 sftp-grp,如上所述。

  4. 将所有 WordPress 文件设置为 Apache 所有,但具有共享组: sudo chown -R www-data:sftp-grp /var/www/path-to-wordpress

  5. 确保所有 WordPress 文件都是组读/写(可能需要重新考虑 .htaccess 和 wp-config.php): sudo chmod -R g+rw /var/www/path-to-wordpress

  6. 将 SGID 位添加到 WordPress 主目录: sudo chmod g+s /var/www/path-to-wordpress

  7. ...以及所有子目录: sudo find /var/www/path-to-wordpress -type d -exec chmod g+s '{}' \;

  8. 添加到 wp-config.php:define( 'FS_CHMOD_DIR', 02775 );

相关内容