WinSCP 在替换时破坏权限和组

WinSCP 在替换时破坏权限和组

有没有办法告诉 winscp 保留我上传文件的组和权限?我厌倦了修改网页/webapp 二进制文件并需要将组更改为 www-data 以便服务器可以读取它们。

如果没有,我可以使用什么应用程序?我主要使用 winscp,因为它可以轻松将文件复制/粘贴到我的 Linux 服务器上,并且可以轻松浏览文件系统(可以在一秒钟内在 2 个以上的文件夹之间切换,不会出现拼写错误)

答案1

我猜你遇到这个问题是因为 WinSCP 在上传新文件之前删除了现有文件 - 这不应该发生除非您没有旧文件的“写入”权限,在这种情况下,删除和替换是 WinSCP 上传文件的唯一方法。

在 Linux 上创建新文件时,创建者的主组将是文件所在的组1,权限将使用 (0666 & ~umask) 计算2。所有者可以修改权限,但只能将文件所属的组更改为自己所属的组。

对于网站来说,我通常会setgid在目录中设置位,以便我创建的所有文件都归该组所有:

sudo chown -R :www-data public_html/
find public_html/ -type d -exec chmod g+s {} \;

如果服务器的文件系统启用了 ACL,您还可以为该组指定默认权限:

setfacl -Rdm g::rX public_html

或者您可以跳过“setgid”和“chgrp”步骤,只需为您想要的组分配默认权限:

setfacl -Rm g:www-data:rX public_html
setfacl -Rdm g:www-data-rX public_html

-d(带有set 的命令默认权限。


  1. 除非目录有设置组ID位,这使得新创建的文件继承目录的组。
  2. 可以使用目录上的默认 ACL 来影响。

答案2

您需要配置 WinSCP 不传输到临时文件(然后将其重命名为目标文件名)。然后 WinSCP 将直接写入目标文件,并保持权限/所有权不变。

前往首选项 > 传输 > 耐久性 > 启用传输到临时文件名

答案3

设置文件夹的 gid,现在应该将组保留为 www-data,前提是文件夹组也是 www-data

相关内容