6

I'm using cygwin in windows 7 to copy a directory to an ubuntu machine using this command.

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

After copying all the files, they all have "no read, no write" permissions. Does anyone know why?

Alternatively if I copy /cygdrive/c/xampp/htdocs/ to /cygdrive/c/Users/user and then use scp to copy the files. The permissions are correct.

---------- 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
2
  • can you run ls -l /home/user/somefolder and edit your question so we can see the permissions on the linux side?
    – Huckle
    Apr 25, 2012 at 4:19
  • Hello, and thanks for your response. I've added the output of ls -l
    – Kelbizzle
    Apr 26, 2012 at 21:23

3 Answers 3

2

I've had some issues with rsync/ssh and cygwin, this is how I managed to solve:

  • Disable acl's as these cannot be properly mapped to Linux ACL's
  • Check mount options before changing:

$ 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)
  • Change setting for ACL's

cp /etc/fstab /etc/fstab.install

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

  • To activate the new setting, logout and login again

logout ssh Adminstrator@hostname

  • Check the new setting for "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)

(sorry can't seem to get the formatting right this morning.)

1
  • I can confirm this works. After changing the mount options to acl with. "-mount -o /cygdrive/c binary,posix=0,auto,noacl" I'm able to copy the files with SCP over to linux and have the permissions of the ssh account I'm using. If anyone is interested in the learning about the mount command as it relates to cygwin check out. This link
    – Kelbizzle
    Apr 28, 2012 at 1:58
1

Since you are copying from an NTFS drive (with windows-like permissions) Cygwin is essentially "making up" a set of unix like permissions. As you copy the files to a real unix-based system, those permissions become relevant. Since you are using the -p option on scp, you are retaining the permissions that Cygwin "made up". The receiving system either doesn't have a user with that UID, or at the very least your user account is not the one with that UID, so you do not have permission to even see the permissions.

The easiest way to fix this is to take ownership of the files on the linux side.

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

from the linux desktop, which will give you rwx permssions to the user, rx to the group, and no access to others. Or drop the -p from scp which should use your user account's UMASK to generate new permissions on the unix side

4
  • I just did a ls -l on the windows machine and the permissions are the same you are correct. SCP is copying the permissions. I created another folder c:\test, copied that, and the permissions are the same. As a test I just created another folder in "c:\Users\user\My/ Documents" , copied that over, and this folder has the correct permissions. It appears to be anything that's not in my users folder doesn't have the permissions for my local user on the windows machine.
    – Kelbizzle
    Apr 26, 2012 at 21:41
  • On the windows computer I copied /cygdrive/c/xampp/htdocs/ to /cygdrive/c/Users/user , tried to reproduce the original issue. Everything copied as I had expected.
    – Kelbizzle
    Apr 26, 2012 at 21:59
  • Wow, ok, you used 'the same' without really explaining what it was the same as, and then you said you user's folder, but didn't really explain if that was the Linux User or the Windows User...
    – Huckle
    Apr 27, 2012 at 22:37
  • I said on the windows machine, I thought that was obvious enough. As for 'the same' I was referring to the permissions of c:\test were the exact same after copying them over to the linux machine.
    – Kelbizzle
    Apr 28, 2012 at 1:24
0

Use an additional flag. From man scp:

 -p      Preserves modification times, access times, and modes from the original file.
3
  • He is copying from an NTFS drive so the permissions are likely emulated anyway, not sure if -p would help.
    – Huckle
    Apr 26, 2012 at 21:25
  • I actually did use the -p I mistakenly missed it in the OP, I've edited to reflect it.
    – Kelbizzle
    Apr 26, 2012 at 21:26
  • That's actually your problem, Cygwin is making up a set of invalid unix permissions to use with the NTFS files. Drop the -p or alternately take ownership of the files on linux
    – Huckle
    Apr 26, 2012 at 21:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .