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

sta*_*tti 2 unix linux security permissions

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

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

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

有没有办法绕过这个,没有1)复制文件,2)以root身份运行服务器?

编辑:几个精度:

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

Pat*_*pin 10

如果您创建一个单独的用户来处理chown,您可以为该用户提供CAP_CHOWN功能,并且您可以拥有该用户拥有setuid位的单个可执行文件(因此它将作为该用户执行).

为了安全起见,此可执行文件应尽可能少地执行,并尽可能多地进行检查.

它应该在服务器用户执行移动后为服务器用户执行chown.它应该存在于其他用户无法写入的目录中; 它可以进行检查以确保它对所要求的文件的所有属性(当前所有者,位置等)感到满意,它可以让服务器用户硬编码(因此没有其他人可以使用它),等等

这可能必须是一个小型C程序,因为大多数系统都不允许您将setuid与脚本一起使用.你可以在网上找到几个小的示例程序 - 一个在这里