我一整天都在研究这个问题,我想我终于弄清楚了,但在将其投入生产之前想确定一下。
我正在更改我的服务器以允许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/
- 强制用户使用= via
apache
创建任何新文件+文件夹+子文件夹umask 002
775
系统
我只有大约 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
,不如这样做更安全,也许更方便(并且可扩展,如果这很重要的话)反过来说:
apache
从组里拿出来jeff
。相反,添加
jeff
到apache
组中。对于初学者来说,这会阻止apache
对所有组文件的读取访问权限jeff
。chown
目录,uploads/
以便组中的任何人都可以在其中创建/删除文件。apache:apache
chmod 775
apache
使用
apache
创建文件umask 2
,以便apache
创建的任何内容都是组可写的。
这边走:
A) 您不再需要chown
先创建文件才能编辑它们;所有upload
文件都属于 group apache
,并且是组可写的,并且您已经属于该apache
组。
B) 您可以轻松地将其他用户添加到apache
组中,并且他们也可以编辑上传的文件。