我要问一个已经发布过很多次的问题,但即使我阅读了很多指南和帖子,我仍然心存疑虑。
我有一台 ubuntu 14.04 的服务器,其中有一个具有 sudo 权限的用户(辅助组“sudo”)和一个只想用于“Web 服务器”的用户。
我会详细解释...
我的网络服务器用户是“jack”,这是 www-data 组的一部分(作为主要组)
虚拟主机指向 Jack 的主目录,我在其中创建了一个名为“alias”的子文件夹,其中包含带有各种子域的子文件夹
es.
/home/jack/public_html <-- main site
/home/jack/alias/forum <-- subdomain
/home/jack/alias/wiki <-- subdomain
/home/jack/alias/cloud <-- subdomain
我想知道的是:
- 第一个问题-
jack 属于主要组 www-data 而不是属于 users 组,并且作为次要组 www-data ,这是正确的吗?
- 第二个问题-
一位朋友建议我这样设置网络服务器文件夹的权限
chgrp www-data /home/jack/public_html
chmod g+rwxs /home/jack/public_html
别名文件夹也是如此。现在看起来可以了,但是有一个问题......
- 如果我在网络服务器中加载文件,则根权限是
杰克:www-数据0644
- 如果文件是由 www-data 生成的(例如通过 cms)
www-数据:www-数据 0666
现在,如果我手动编辑文件,例如通过 ftp,这会更改权限并给各种“网络应用程序”带来问题
我该如何修复它?
答案1
第一个问题:随便。有很多不同的方法可以实现这项工作。 Linux 标准的做法与您的做法不同,但您的方式也有效。事实上,您没有像 Linux 标准那样在 apache 帐户下运行 Web 服务器,这一事实至少表明可能存在一些其他问题,但第一个问题的结尾没有指出任何问题。
第二个问题:正如 the_velour_fog 所建议的,您需要为所有网络文件设置权限,尽管我不同意这样做的方法。
chgrp -R www-data /home/jack/public_html
很好,不会造成任何问题。但我建议不要只是将 -R 添加到其他命令中
chmod -R g+rwXs,o-w /home/jack/public_html
使用此变体,它不会对尚未标记为可执行文件的文件设置执行权限。它还会删除所有文件的其他写入权限,因为您不太可能真正想要这样做。
当然,该 chmod 只是解决 Web 服务器创建具有权限 0666 的文件的问题的创可贴。我不确定您的 Web 服务器的问题到底出在哪里,但我怀疑在某些时候您的 Web 服务器用户执行了类似的操作umask 0
并且应该将其更改为umask 02
.
至于您 ftp 的文件具有错误的权限,我不确定这是否是 ftp 服务器中的问题,或者是否是文件在传输之前创建方式的问题。这些文件还应该在已设置的会话上创建umask 02
,但它们可能会umask 022
在生效时创建。 (也可能是umask 22
;从技术上讲,前导 0 只是提醒读者该数字是八进制的。无论如何,Umask 都会将其解析为八进制,但很容易忘记这一点。)
如果您的权限问题与您的 ftp 服务器有关...而不是修复这些问题,我建议切换到scp
或sftp
,因为 ftp 是一种高度不安全的协议。在 2019 年,它的主要价值是它允许匿名传输,但您可以使用 Web 服务器匿名拉取文件,并且您可能不希望匿名拉取或推送到您的 Web 服务器帐户。只要您已安装并且进程正在运行,两者scp
都应该在您的 Ubuntu 服务器上可用。sftp
ssh
sshd