【问题标题】:chown: Operation not permittedchown:不允许操作
【发布时间】:2012-11-05 03:10:54
【问题描述】:

我有一个问题,我需要通过 php 脚本为系统中的不同用户设置文件所有者权限

所以我通过以下命令执行此操作,其中 1002 是系统的用户 ID。

file_put_contents($filename, $content);
system("chown 1002 " . $filename . "");

但是我只在生产服务器中收到此错误(测试服务器工作正常)

chown: changing ownership of `/var/spool/asterisk/06h12m7.call':
Operation not permitted

【问题讨论】:

  • 请将其中一个答案标记为解决方案,以便可以将此问题标记为已关闭。如果它们都没有提供解决方案,则提供其他信息。谢谢。
  • 如果脚本是通过 cron 运行的,它将以 root 身份运行,这将具有更改文件所有权的能力。 (像apache 用户这样的非超级用户不要这样做。)希望这可以帮助一些人!

标签: php linux shell


【解决方案1】:

由于您将此问题标记为Linux,我假设您使用Apache 服务器。在生产服务器中,拥有所有php进程的Apache进程通常由apache user或不是root user的其他用户执行。

请记住,您要做的是使用chown 函数(将作为apache 用户执行)来更改您不拥有的文件的所有者。 (是的,您只能将所有者更改为您拥有的文件)。

你看,引用php手册,chown函数试图改变所有者:

尝试将文件文件名的所有者更改为用户用户。只有超级用户可以更改文件的所有者。

在生产服务器中,您通常以用户目录模式运行,这意味着您将绑定到主目录中的文件,例如 /home/yourusername/public_html,因此,/var 目录中的文件根本不存在在你的范围内(它们通常由 root 拥有),这就是你不能 chown 的原因。

我希望它有所帮助。干杯!

【讨论】:

    【解决方案2】:

    只有当您是 root 用户(或以 root 权限运行)时,您才可以更改文件的所有者。

    尝试将文件文件名的所有者更改为用户用户。只有超级用户可以更改文件的所有者。 http://www.php.net/manual/en/function.chown.php

    很可能在您的测试服务器上运行 php 脚本的 apache 进程已经拥有该文件,或者您正在以 root 权限运行它,而在您的生产服务器上并非如此。我绝对不建议在具有 root 权限的生产环境中运行。

    根据具体情况,一些可能会有所帮助的变通方法,您可以使用chgrp 函数更改文件的“组”设置。对文件具有写入权限的任何人都允许这样做。您还可以使用chmod 函数使文件对任何人都可写,尽管这可能很危险。下面列出了这两个函数的链接:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多