1

更新:原来问题比我最初想象的要复杂。我同时试图解决我mkdir停止工作的原因,这是因为我手动更改了父目录的权限以进行测试,然后将它们切换回并添加chmod到脚本中,该脚本不起作用,因为该脚本是由apache而不是我自己运行的. 我将发布一个更大问题的新问题,因为我认为将所有这些添加到这个问题中会变得混乱。


我是我大学的一名实验室讲师,我一直在重写他们提供的用于上传作业的脚本,因为他们拥有的脚本又旧又漏洞百出。我没有修改现有脚本(用 python 编写),而是用 php 从头开始​​编写它。

我遇到了一个问题,似乎 chown 不起作用。php 脚本在用户下运行apache。我不确定该用户是否“特权”,但原始脚本使用了 chown。

我可以假设因此apache应该具有所需的权限,并且我的问题出在其他地方还是逻辑错误?


服务器是大学的,他们不可能让我进行任何配置更改。我确实相信他们正在运行的是 CentOS。没有错误消息我只是注意到我可以chmod文件并更改权限,但chown下一行的命令似乎没有效果。

ls -al在旧脚本上显示:

-rwxr-xr-x 1 mattw labstaff 5067 Sep  1 17:52 File_Upload.cgi

看起来 setuid 位没有打开。

Stefan 提到“用户 apache 很可能没有足够的权限来更改它不拥有的文件/文件夹”。我试图创建的目录chown只是用 a 创建的,mkdir所以它应该归 apache 所有。当您已经拥有该文件时,应该chown不管特权如何工作吗?

4

3 回答 3

2

Apache 可能没有这样做的特权。这取决于它在哪个环境中运行。您说 apache 在用户 apache 下运行,所以我只是假设它是 RHEL 或 RHEL 变体,例如 Centos。

您将能够编辑 sudoers 文件(使用 visudo)并让 apache 在某个目录下无需密码即可使用 sudo。请注意,如果您非常注重安全性,则不建议这样做。

添加类似的东西

apache ALL = NOPASSWD: /bin/chown 1[1-9][0-9][0-9]\:1[1-9][0-9][0-9] /var/www/[a -zA-Z0-9]*

您可以将 apache 添加到不同的组,或者将另一个用户添加到 apache 组或类似的东西,然后将其更改为 0775 或 0664。

最好发布引发错误的代码、错误消息(如果有)以及哪些用户和组需要访问正在上传的文件。

于 2012-01-05T02:22:15.777 回答
1

如果旧脚本由apache用户运行但能够执行chown,它可能会打开setuid位以允许它以提升的权限运行。在这种情况下,您的假设将是错误的。

请发布输出ls -al /path/to/script以确认这一点。它应该显示root为它的所有者和s它的模式。

要为新脚本启用 setuid 模式,chmod u+s 它。请注意,这可能会产生严重的安全隐患。特别是永远不要让 setuid 脚本或二进制可写。

于 2012-01-05T02:11:50.393 回答
1

用户 apache 很可能没有足够的权限来更改它不拥有的文件/文件夹,您可以赋予 apache 更多权限,但这可能会成为安全问题。

于 2012-01-05T02:13:03.903 回答