Linux:更改文件所有权而不复制?

我有一个REST服务器,其目的是组织各个用户生成的文件。 为了简单起见,服务器和用户都可以访问共享networking文件系统。

工作stream程如下:用户在临时文件夹中生成文件。 然后,他通知服务器将文件放在自己的位置,并将一些元数据存储在数据库中。 服务器应该拥有这些文件,并根据需要照顾他们的删除。

我的问题是:因为文件可能相当大,我想避免昂贵的副本,而只是将文件从临时文件夹移动到他们的最终目的地。 但是,移动文件会阻止服务器更改其所有权( 例如,请参阅此处 )。

有没有办法解决这个问题,没有1)复制文件,2)作为root运行服务器?

编辑:一对夫妇精度:

  • 要移动的文件可以是具有文件层次结构的目录
  • 让服务器拥有最终位置中的文件来限制对其他用户的访问会很好。

    如果你创建一个单独的用户来处理chown,你可以给这个用户CAP_CHOWN功能,并且你可以拥有一个单独的可执行文件,该可执行文件拥有setuid位(所以它以该用户身份执行)。

    为了安全起见,这个可执行文件应尽可能少地执行尽可能多的检查。

    在服务器用户移动之后,它应该为服务器用户做chown。 它应该存在于其他用户不能写入的目录中; 它可以进行检查,以确保它满足要求chown(当前所有者,位置等)的文件的所有属性,它可以使服务器用户硬编码(所以没人可以使用它),等等

    这可能必须是一个小型的C程序,因为大多数系统不允许你使用setuid和脚本。 你可以在网上找到几个很小的例子程序 – 一个在这里

    您应该为所有用户和服务器使用一个用户组。 使该组拥有该临时目录并将其设置为可写组和sgid。

    chown :groupname /path/to/temp chmod g+s /path/to/temp chmod 770 /path/to/temp 

    然后服务器可以容易地采用文件的所有权。 当然,这意味着用户可以编写其他用户的文件,但我想这不是一个问题,因为他们呆在那里很短的时间?