gpt4 book ai didi

Linux:在没有副本的情况下更改文件所有权?

转载 作者:太空狗 更新时间:2023-10-29 11:24:38 25 4
gpt4 key购买 nike

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

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

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

有没有办法解决这个问题,无需 1) 复制文件,以及 2) 以根用户身份运行服务器?

编辑:几个精度:

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

最佳答案

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

为了安全起见,这个可执行文件应该做的事情越少越好,检查越多越好。

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

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

关于Linux:在没有副本的情况下更改文件所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com