【问题标题】:rsync does not have permissions to be triggered by phprsync 没有权限被 php 触发
【发布时间】:2014-08-15 14:59:26
【问题描述】:

我正在尝试通过从 php 脚本触发 rsync 来同步两个本地文件夹。产生以下错误:

rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]
rsync: recv_generator: mkdir "/Library/xxxxxxx" failed: Permission denied (13)

如何授予 php/apache 权限以触发 rsync 进程?

谢谢!

【问题讨论】:

    标签: php rsync


    【解决方案1】:

    问题是你没有创建目录的权限。

    在目录/Library 上使用chown 并分配给正在执行Apache 服务器的同一用户,并赋予所有文件和目录755 的权限,例如,如果用户执行Apache 是守护进程

    sudo chown daemon.daemon -R /Library
    sudo chmod 755 -R /Library
    

    【讨论】:

    • 感谢@Sal00m,我最终使用了这个解决方案,尽管 Adder 的也可以使用。在 OS X 上,用户是 _www。
    【解决方案2】:

    Apache/PHP 进程通常以用户 www-data 的身份工作。 要允许用户 www-data 写入目录,您可以手动将所有者或组更改为 www-data,并为用户或组授予对目录的写入权限。然而,这可能会破坏与该目录一起工作的其他进程。

    chgrp www-data /Library && chmod g+a /Library
    

    如果您将 rsync 多次,即当目录已经存在时:

    chgrp -R www-data /Library/directory && chmod -R g+a /Library/directory
    

    另一种方法是使用 setuid 脚本。 这是一个由用户 www-data 调用但作为脚本所有者执行的脚本。但这可能是一个安全问题。

    http://www.krenel.org/setuid-and-shell-scripts-explained/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      相关资源
      最近更新 更多