cygwin's chmod behaves as working, but it does not work

3

My Cygwin installation is behaving strangely: chmod does not work.

[09:45 Administrator@DellIns14 ~] > ls -ls /usr/bin/chmod
64K -rwxr-xr-x 1 Administrator None 38K Feb  6  2012 /usr/bin/chmod

[09:47 Administrator@DellIns14 ~] > rm /tmp/example.sh
rm: remove regular empty file `/tmp/example.sh'? y
[09:48 Administrator@DellIns14 ~] > touch /tmp/example.sh
[09:48 Administrator@DellIns14 ~] > ls -ls /tmp/example.sh
0 -rw-r--r-- 1 Administrator None 0 Jul  8 09:48 /tmp/example.sh
[09:48 Administrator@DellIns14 ~] > chmod -v +x /tmp/example.sh
mode of `/tmp/example.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
[09:48 Administrator@DellIns14 ~] > ls -ls /tmp/example.sh
0 -rw-r--r-- 1 Administrator None 0 Jul  8 09:48 /tmp/example.sh
[09:48 Administrator@DellIns14 ~] >

Note that the directory is writable, as the file is created.

When I look at this directory from a windows perspective, it is reported as read-only (even after I change it to read-write, it reverts to read-only).
Screen-captures are at cygwin's /tmp is read-only in windows, and cannot be changed to read-write

Can you suggest how to debug/solve?


Environment:
Windows 7, Cygwin 1.7.29(0.272/5/3) i686

boardrider

Posted 2014-07-08T07:28:09.403

Reputation: 615

Same problem for ~/.ssh/config on win7+cygwin64, (ssh won't run unless I can chmod 0600 config) and NONE of the answers below help (/etc/fstab, setfacl, subinacl /file config /display). – mosh – 2016-08-03T17:15:10.930

Answers

5

Kudos to this answer https://stackoverflow.com/questions/25730041/updating-file-permissions-with-git-bash-on-windows-7 contents pasted below


You are probably using NTFS or FAT32 on Windows, and those filesystems do not support the executable permission. Instead, cygwin looks at the file name and contents to determine whether it's executable:

Files are considered to be executable if the filename ends with .bat, .com or .exe, or if its content starts with #!.

So you should make sure that the bash file starts with a shebang. Then, you should be able to just execute the file, disregarding the permission output of ls.

crowne

Posted 2014-07-08T07:28:09.403

Reputation: 185

1

I was unable to chmod until I found that /etc/fstab contained:

none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

but needed to be:

none /cygdrive cygdrive binary,posix=0,user 0 0

After closing all open Cygwin processes and restarting, all worked.

rshdev

Posted 2014-07-08T07:28:09.403

Reputation: 141

Thanks @rshdev, but on my machine, the noacl is already absent, viz: $ tail -1 /etc/fstab none /cygdrive cygdrive binary,posix=0,user 0 0 – boardrider – 2016-04-30T21:32:39.737

1

I found This Answer helpful.

Besides normal POSIX permissions that contoll owner, group, other access, the file permission in Cygwin may also be affected by Windows ACL.

In your case, please try

ls -l /tmp/example.sh
getfacl /tmp/example.sh
setfacl -b /tmp/example.sh
ls -l /tmp/example.sh
chmod -v +x /tmp/example.sh
ls -l /tmp/example.sh

Danny Zeng

Posted 2014-07-08T07:28:09.403

Reputation: 11

If you found additional permission by getfacl, you make need to check/reset /tmp too. – Danny Zeng – 2015-02-16T04:03:27.143

Thanks @Danny Zeng: I'll keep the [gs]etfacl commands in mind. As for the original problem - seems that in the meantime, it vanished, and now chmod works as expected on my cygwin. Quite a few things were changed on my system in the interim, so I cannot hazard a guess what was the change that solved the problem. – boardrider – 2015-02-17T22:03:02.173