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

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

我的问题如下:由于文件可能很大,因此我想避免进行昂贵的复制,而只是将文件从temp文件夹移至其最终目的地。但是,移动文件会阻止服务器更改其所有权(see here for example)。

是否可以解决此问题,而无需1)复制文件,以及2)以root用户身份运行服务器?

编辑:几个精度:

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

    如果创建一个单独的用户仅用于处理chown,则可以为该用户提供CAP_CHOWN功能,并且该用户拥有的单个可执行文件上会设置setuid位(因此它将作为该用户执行)。

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

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

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

    关于linux - Linux : changing file ownership without a copy?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31272030/

    10-12 06:19