Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux:在没有副本的情况下更改文件所有权?_Linux_Security_Unix_Permissions - Fatal编程技术网

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

Linux:在没有副本的情况下更改文件所有权?,linux,security,unix,permissions,Linux,Security,Unix,Permissions,我有一个REST服务器,其目的是组织由不同用户生成的文件。为了简单起见,服务器和用户都可以访问共享的网络文件系统 工作流程如下:用户在临时文件夹中生成文件。然后,他通知服务器,服务器将文件放在自己的位置,并在数据库中存储一些元数据。然后,服务器应该拥有这些文件,并根据需要删除它们 我的问题是:由于文件可能相当大,我希望避免昂贵的复制,而只是将文件从临时文件夹移动到最终目的地。但是,移动文件会阻止服务器更改其所有权() 有没有办法解决这个问题,1)不复制文件,2)以root用户身份运行服务器 编辑

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

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

我的问题是:由于文件可能相当大,我希望避免昂贵的复制,而只是将文件从临时文件夹移动到最终目的地。但是,移动文件会阻止服务器更改其所有权()

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

编辑:几个精度:

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

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

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

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

如果您创建一个单独的用户只是为了处理chown,您可以为该用户提供CAP_chown功能,并且您可以拥有一个由该用户拥有的、设置了setuid位的可执行文件(因此它作为该用户执行)

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

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


这可能必须是一个小型的C程序,因为大多数系统不允许您在脚本中使用setuid。您可以在web上找到几个小的示例程序,它们可以进行更改--一个是

用户和服务器是否可以在同一组中,这样您就可以在不需要更改文件的情况下处理权限?@EricRenouf:如果服务器进行更改,则不拥有该文件,它不能限制其他用户的权限。基本上,我希望用户将所有权授予服务器并放弃其权限,以便以后他们将以独占方式通过服务器访问该文件。对于ZFS和btrfs等文件系统,复制该文件的成本应该很低。我不确定(这里没有适合测试的内容),但我认为,当文件拥有不同的所有者时,那些将文件识别为重复文件且不实际存储两次的文件系统很可能仍然有效。谢谢,我将尝试这样做并报告。setgid不适用于移动到那里的文件,仅适用于在那里创建的文件(a
cp
也会创建)。此移动仅被视为重命名,因此文件的所有其他属性保持原样。此解决方案的另一个问题是,文件的unix所有权保留给其初始创建者,服务器无法真正采用这些文件(从unix所有权的意义上讲)。