通过 scp 复制后权限不正确

通过 scp 复制后权限不正确

我正在使用 Windows 7 中的 cygwin 使用此命令将目录复制到 ubuntu 机器。

scp -rp -P 54322 /cygdrive/c/xampp/htdocs/. [email protected]:/home/user/somefolder/

复制所有文件后,它们都具有“无读取、无写入”权限。有人知道为什么吗?

或者,如果我复制 /cygdrive/c/xampp/htdocs//cygdrive/c/Users/user然后使用 scp 复制文件。权限是正确的。

---------- 1 user user 1273 Apr 21 16:32 about.html
---------- 1 user user 1707 Apr 21 16:33 contact.html
d--------- 2 user user 4096 Apr 21 04:14 images
---------- 1 user user 2259 Apr 21 22:27 index.html
---------- 1 user user 1252 Apr 21 16:33 projects.html
---------- 1 user user  823 Apr 22 22:03 style.css
drwx------ 6 user user 4096 Apr 21 02:11 xampp

答案1

我在使用 rsync/ssh 和 cygwin 时遇到了一些问题,下面是我设法解决的方法:

  • 禁用 acl,因为它们无法正确映射到 Linux ACL
  • 更改之前检查安装选项:

$ mount

D:/ProgramsVista/ICW/etc/terminfo on /usr/share/terminfo type ntfs (binary,noacl)
D:/ProgramsVista/ICW/bin on /usr/bin type ntfs (binary,noacl)                    
D:/ProgramsVista/ICW/lib on /usr/lib type ntfs (binary,auto)                     
D:/ProgramsVista/ICW on / type ntfs (binary,noacl)                               
C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)                  
D: on /cygdrive/d type ntfs (binary,posix=0,user,noumount,auto)                  
E: on /cygdrive/e type iso9660 (binary,posix=0,user,noumount,auto)
  • 更改 ACL 的设置

cp /etc/fstab /etc/fstab.install

echo "none /cygdrive cygdrive binary,posix=0,user,noacl 0 0" >> /etc/fstab

  • 要激活新设置,请注销并重新登录

logout ssh Adminstrator@hostname

  • 检查“noacl”的新设置:

$ mount

D:/ProgramsVista/ICW/etc/terminfo on /usr/share/terminfo type ntfs (binary,noacl)
D:/ProgramsVista/ICW/bin on /usr/bin type ntfs (binary,noacl)
D:/ProgramsVista/ICW/lib on /usr/lib type ntfs (binary,auto)
D:/ProgramsVista/ICW on / type ntfs (binary,noacl)
C: on /cygdrive/c type ntfs (binary,noacl,posix=0,user,noumount,auto)
D: on /cygdrive/d type ntfs (binary,noacl,posix=0,user,noumount,auto)
E: on /cygdrive/e type iso9660 (binary,noacl,posix=0,user,noumount,auto)

(抱歉,今天早上似乎无法正确格式化。)

答案2

由于您是从 NTFS 驱动器(具有类似 Windows 的权限)复制的,因此 Cygwin 本质上是在“编造”一组类似 UNIX 的权限。当您将文件复制到真正的基于 UNIX 的系统时,这些权限就变得相关了。由于您-p在 scp 上使用选项,因此您保留了 Cygwin“编造”的权限。接收系统要么没有具有该 UID 的用户,要么至少您的用户帐户不是具有该 UID 的帐户,因此您甚至无权查看权限。

解决此问题的最简单方法是获取 Linux 端文件的所有权。

chown $(whoami):$(whoami) ~/somefolder -R
chmod 750 -R ~/somefolder/

从 Linux 桌面,这将授予用户 rwx 权限、授予组 rx 权限,而其他用户则无权访问。或者-p从 scp 中删除,它应该使用您的用户帐户的 UMASK 在 unix 端生成新的权限

答案3

使用附加标志。来自man scp

 -p      Preserves modification times, access times, and modes from the original file.

相关内容