【问题标题】:php - changing file permissionsphp - 更改文件权限
【发布时间】:2009-05-25 21:22:07
【问题描述】:

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

只有文件的所有者才能更改权限是否正确? IE。如果我通过 cron 作业创建文件并设置权限,那么在从浏览器运行脚本时我不能更改这些权限?

请问有什么办法解决吗?删除(取消链接)并以脚本运行的用户身份重新创建文件?或者有没有办法通过cron作业作为nobody运行php脚本? / 通过浏览器作为用户名?

目的是能够通过更改文件权限使图像公开可见或不公开。

【问题讨论】:

    标签: php permissions


    【解决方案1】:

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

    解决方案 2:最简单的方法是让每个人都可以读写文件(chmod a+rw 文件名)会有这种效果。

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

    【讨论】:

      【解决方案2】:

      您无需在脚本中输入用户名或密码即可执行此操作。

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

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

      请注意,“nobody”用户(以及像“apache”这样的用户)通常没有登录权限。这可能需要您允许 sudo 在没有 tty 的情况下执行脚本。如果您收到类似以下的错误消息,您就会知道这一点:“sudo: sorry, you must have a tty to run sudo”

      可以通过使用 visudo 命令注释掉“Defaults requiretty”行来实现这一点。与对 sudo 的任何更改一样,您可能需要搜索此更改可能带来的任何副作用。

      【讨论】:

        【解决方案3】:

        是的,只有文件的所有者才能执行此操作。您的选项取决于您对服务器的控制类型。

        如果你对服务器有足够的控制权,你可以使用 SuPHP 代替 Apache 的 mod_php。这样,PHP 脚本将以拥有该脚本的用户身份运行,并且由 PHP 脚本创建的任何文件都将归同一用户所有。

        如果您没有那么多控制权(例如,常见的共享网络托管),您可以使用类似 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);
        

        【讨论】:

          【解决方案4】:

          只有文件的所有者才能执行此操作,我建议改为以“nobody”身份运行 cronjob。

          【讨论】:

            【解决方案5】:

            通常只有所有者或超级用户(或同等身份)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-06-20
              • 2013-02-14
              • 2012-02-16
              • 2013-06-27
              • 2018-06-18
              • 2010-09-18
              • 2012-04-03
              • 2021-03-09
              相关资源
              最近更新 更多