转换服务器以允许 Apache 对某些目录进行写访问,这个解决方案看起来正确吗?

转换服务器以允许 Apache 对某些目录进行写访问,这个解决方案看起来正确吗?

我一整天都在研究这个问题,我想我终于弄清楚了,但在将其投入生产之前想确定一下。

我正在更改我的服务器以允许apache:apache用户对几个目录具有写入权限。我是jeff:jeff服务器上的唯一用户。

我的目录结构看起来像这样:

/home/jeff/www/                       0755 jeff:jeff
/home/jeff/www/example1.com/          0755 jeff:jeff
/home/jeff/www/example2.com/          0755 jeff:jeff
/home/jeff/www/example2.com/uploads/  0755 apache:apache

问题是:

我运行chmod apache:apache uploads/以允许apache写访问。

每当我想通过 sftp 编辑文件时uploads/,我必须chown将其返回到jeff:jeff,然后在完成后反转。

我的初步解决方案是:

  • apache将用户添加到jeff
  • 通过手动授予jeff组对目录的写权限uploads/chmod 775
  • 强制apache用户将任何新文件+文件夹+子文件夹创建为apache:jeff.需要setgid 2775目录uploads/
  • 强制用户使用= viaapache创建任何新文件+文件夹+子文件夹umask 002775系统

我只有大约 50% 确信我做对了。

听起来还好吗?有没有更好的办法?我错过了什么吗?

在吉姆的帮助下,这是我使用的最终解决方案:

供我参考。

# usermod --append --groups apache jeff

> Relogin all sessions

# chown -R apache:apache www/example.com/uploads/
# find www/example.com/uploads/ -type d -exec chmod 775 {} \;
# find www/example.com/uploads/ -type f -exec chmod 664 {} \;

# systemctl edit --full php.service

-----------
[Service]
UMask=0002
-----------

# systemctl daemon-reload
# systemctl restart php

WordPress 用户需要将其添加到他们的 wp-config.php 中:

define('FS_CHMOD_DIR', 0775);
define('FS_CHMOD_FILE', 0664);

答案1

是的,这是一般的想法,而且你已经相当接近了,但我建议,与其将用户添加apache到组中jeff,不如这样做更安全,也许更方便(并且可扩展,如果这很重要的话)反过来说:

  1. apache从组里拿出来jeff

  2. 相反,添加jeffapache组中。对于初学者来说,这会阻止apache对所有组文件的读取访问权限jeff

  3. chown目录,uploads/以便组中的任何人都可以在其中创建/删除文件。apache:apachechmod 775apache

  4. 使用apache创建文件umask 2,以便apache创建的任何内容都是组可写的。

这边走:

A) 您不再需要chown先创建文件才能编辑它们;所有upload文件都属于 group apache,并且是组可写的,并且您已经属于该apache组。

B) 您可以轻松地将其他用户添加到apache组中,并且他们也可以编辑上传的文件。

相关内容