是的,可以通过 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(),这只是我想到的第一个函数)
正如我之前所说,这可能非常危险,虽然上述方法可行,但我之前只在我自己的私有系统上使用过它,从未在公共生产服务器上使用过。我相信很多人都会对此的安全性发表评论,所以我很想知道这种方法可能存在哪些其他潜在的陷阱和安全漏洞。我知道可以使用 SuExec 完成类似的事情,但我对它不太熟悉,所以如果有人对这种方法有任何 SuExec 的优点或缺点,我很想听听他们的意见。
最后一点:我会将apache用户从nobody更改为'apache'或'www'之类的东西-可能只是很傻,但我不喜欢将root权限授予名为nobody的用户的想法!!!
希望这可以帮助!