php - 更改文件权限

时间:2009-05-25 21:22:08

标签: php permissions

我有一个PHP脚本,可以使用chmod更改服务器上的文件权限。我希望能够通过浏览器(无人)和cron作业(作为用户名)运行脚本。

仅文件所有者可以更改权限是否正确?即如果我通过cron作业创建文件并设置权限,那么从浏览器运行脚本时我无法更改这些权限?

请问这有什么方法吗?删除(取消链接)并以脚本运行的任何用户重新创建文件?或者有没有办法通过cron作业运行PHP脚本作为没人? /通过浏览器作为用户名?

目的是通过更改文件权限,使图像能够公开显示。

5 个答案:

答案 0 :(得分:2)

解决方案1:为用户和cron用户创建一个组,将每个用户添加到新组,并授予两个用户读取和写入文件的权限(chmod g + rw filename)。 (比下一个解决方案更安全)。

解决方案2:最简单的方法是让每个人都可读写文件(chmod a + rw filename)会产生这种影响。

我不建议将其用于生产用途。

答案 1 :(得分:1)

您可以在不在脚本中添加用户名或密码的情况下执行此操作。

在您的crontab中,让sudo以您的Web服务器运行的用户身份执行脚本。按照你的例子,我将使用nobody用户。

0 12 * * *(sudo -u nobody php ./yourscript.php)

请注意,“nobody”用户(以及“apache”等用户)通常不具有登录权限。这可能要求您允许sudo在没有tty的情况下执行脚本。如果你收到如下错误,你就会知道这个:“sudo:抱歉,你必须有一个tty来运行sudo”

允许这样做可以通过使用visudo命令注释掉“Defaults requiretty”行来完成。与对sudo的任何更改一样,您可能希望搜索此更改可能带来的任何副作用。

答案 2 :(得分:0)

是的,只有文件的所有者才能这样做。您的选项取决于您对服务器的控制。

如果您对服务器有足够的控制权,则可以使用SuPHP而不是Apache的mod_php。这样,PHP脚本将作为拥有该脚本的用户运行,并且由PHP脚本创建的任何文件将由同一用户拥有。

如果您没有那么多控件(例如,常见的共享Web托管),您可以使用像Joomla的FTP方法。在Joomla中打开FTP支持时,它使用FTP完成所有文件操作。这样,它可以创建或操作具有与FTP用户相同权限的文件。

像这样(忽略错误处理):

$ftp = ftp_connect('localhost');
ftp_login($ftp, 'username', 'password');
ftp_chdir($ftp, '/root/to/website');
ftp_chmod($ftp, 0644, 'filename.ext');
ftp_close($ftp);

答案 3 :(得分:-1)

只有文件的所有者可以这样做,我建议改为将cronjob作为'nobody'运行。

答案 4 :(得分:-2)

通常只有所有者或超级用户(或等效用户)