如何在不是 root 的情况下将所有权授予 root?(Apache 所需)

如何在不是 root 的情况下将所有权授予 root?(Apache 所需)

我有一个 PHP 脚本,它在我的服务器上创建一个文件夹。该文件夹应该通过 Apache 访问,用户可以在线查看它。

现在,如果我以 root 身份创建此文件夹,一切都会正常工作,我可以在访问网站时查看 html/php。

如果我以 Apache 用户身份(或运行我的脚本)创建此文件夹,我可以创建该文件夹并将所有文件放入其中,但是当我进入我的网页时,它会显示:

You don't have permission to access / on this server.

现在我对 Apache 了解不多,但对我来说最简单的解决方案是将文件夹的所有权授予 root。我尝试输入:

chown root:root /blabla/myfolder

其中写道:

chown: changing ownership of 'myfolder/': Operation not permitted

这是为什么 ?

谢谢

答案1

您不需要也做不到将文件夹的所有者和组更改为 root。但是,您可以使用以下命令授予组和其他人的读取权限:

chmod go+r foldername

例子:

yvaine:~ rilindo$ ls -la | grep test
drw-------    2 rilindo  staff        68 Dec  5 01:10 test
yvaine:~ rilindo$ chmod go+r test
yvaine:~ rilindo$ ls -la | grep test
drw-r--r--    2 rilindo  staff        68 Dec  5 01:10 test

但是,如果它是一个空文件夹,则 Apache 中可能默认禁用目录浏览。在这种情况下,您可以在节中添加或修改某处:

Options +Indexes

请注意,除非有充分的理由,否则最佳做法通常是禁用目录浏览。

答案2

其他人似乎正在回答您的隐含问题“我该如何解决这个问题?”,并且做得很好,所以我想回答您的实际问题“为什么会这样?”。

出于正当理由,禁止所有非 root 用户通过 chown 放弃文件所有权(即将文件所有权转让给其他用户)。请考虑以下序列:

cp /bin/bash ~/naughty

现在,您的主目录中有一份 bash 副本。您拥有它。没什么大不了的。

chmod 4755 ~/naughty

现在您有了一个可由任何人运行的 bash 副本,并且任何运行它的人都将成为您,因为您已在二进制文件上设置了 SUID 位,并且您拥有该文件。不太好。

chown root:root ~/naughty

恭喜,您刚刚 root 了您的系统;您拥有一个 shell 副本,该副本对 root 具有 SUID,并且可以由任何人运行。

放弃文件所有权的坏处还有其他原因,例如,如果任何人都可以创建一个大文件然后将其交给另一个用户,那么这将影响磁盘配额。但最关键的原因是上述原因,而堵住这个漏洞的唯一方法(不去掉 SUID,这是一个好主意但很难做到)是规定非 root 的用户不得将文件交给另一个用户。

相关内容