【问题标题】:CHMOD a linux directory using PHP on an apache server在 apache 服务器上使用 PHP 对 linux 目录进行 CHMOD
【发布时间】:2010-03-10 13:10:47
【问题描述】:

有没有人使用 PHP(经过验证且成功)通过 Web 浏览器 CHMOD 目录?

我的障碍是: (a) PHP 脚本在浏览器中作为“nobody”运行 (b) 我想要 CHMOD 的目录上面的目录归 ftp 用户所有,“nobody”没有写权限

所以当我尝试 chmod 0666 /usr/www/dirOwnedbyFTPuser/dirIamTryingToCHMOD/ 我得到 Permission denied

如果您曾经编写并成功运行过一个脚本来执行此操作,您可以与我分享代码片段吗?谢谢...几个月来一直在这里。

【问题讨论】:

  • 有解决办法,但是让php管理系统权限是不好的。你需要做什么?
  • 我需要使用 PHP 动态创建一个目录。

标签: php chmod


【解决方案1】:

是的,可以通过 php 执行此操作。但是,通常的 linux 权限规则适用,因此当您正在寻找不属于 apache 用户(nobody)并且 apache 用户没有写入权限的 chmod 脚本时,一种方法是授予 apache 使用 sudo 的权限

请注意 - 这可能是一个巨大的安全漏洞!!!

您可以通过编辑 sudoers 文件来授予 apache 使用 sudo 的权限。建议您不要直接编辑此文件,因为错误可能会让您完全搞砸,所以我在我的 (Ubuntu) 系统上键入

sudo visudo

然后你需要为你的“nobody”用户添加一行。您可以将 sudo 权限限制为特定脚本或文件夹,因此我建议编写一个 shell 脚本来更改权限,然后将其放在远离任何其他脚本的文件夹中。这样 apache 在您的系统上没有完整的 root 权限(这是一个非常可怕的想法)。您还可以在 shell 脚本中放置一些代码来限制可以更改的文件。

您还需要允许 apache 在没有密码的情况下执行 sudo,因为您无法通过 php 输入密码。因此,您要添加的行类似于

nobody ALL=(ALL)NOPASSWD:/path/to/my/script

然后在 php 中你只需在命令前加上 sudo

passthru ("sudo /path/to/my/script ...");

(您可以使用其他一些函数来代替 passthru(),这只是我想到的第一个)

正如我之前所说,这可能非常危险,虽然上述方法可行,但我之前只在我自己的私有系统上使用过它,从未在公共生产服务器上使用过。我敢肯定,很多人都会对这种方法的安全性有 cmets,所以我很想知道这种方法可能存在哪些其他潜在的陷阱和安全漏洞。我知道使用 SuExec 可以完成类似的事情,但我不太熟悉,所以如果有人对这种方法有任何 SuExec 的优点或缺点,我很想听听。

最后说明:我会将 apache 用户从 nobody 更改为 'apache' 或 'www' 之类的东西 - 可能只是很愚蠢,但我不喜欢将 root 权限授予名为 nobody 的用户的想法!!!

希望这会有所帮助!

【讨论】:

【解决方案2】:

是的,您可以通过网络浏览器从 php 进行 chmod。 (是的,我们都知道这可能是个坏主意)..

但是——你只能chmod php 脚本有权限使用的文件!如果您的网络服务器以无人身份运行 PHP,那么您可以对“无人”拥有的任何文件进行 chmod...

【讨论】:

    【解决方案3】:

    http://www.php.net/ftp 您可以让 php 以 ftp 用户身份登录并执行此操作。

    【讨论】:

    • 是的,克里斯...谢谢!我已经走上了这条路,并成功地编写了脚本来工作。现在我的困境是更改目录的组名。我试过 ftp_site($ftpStream, 'chgrp nobody '.$directory) 但我无法让它工作。有没有人通过 ftp_connect() 成功更改目录组?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2013-10-29
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多