Unable to change file permissions on Ubuntu Bash for Windows 10
Solution 1:
If you're referencing files in the Windows file system, they do not, by default, retain Linux permissions.
However, there's a way to enable that. Edit or create (using sudo
) /etc/wsl.conf
and add the following:
[automount]
options = "metadata"
Shut down all WSL instances and restart an instance, and any chmod
changes are now retained.
Solution 2:
The correct way to handle this:
-
Create
/etc/wsl.conf
with the following:[automount] enabled = true root = /mnt/ options = "metadata,umask=22,fmask=11"
To understand the meaning of each parameter above, please refer to this article on MSDN
-
Close all WSL terminals and open a new one
-
Restart your machine (as indicated by some comments)
Now you are all set; changing permissions of a file in Windows from /mnt/c/
will be reflected, and mounted, correctly within WSL on startup via the metadata
option.
Solution 3:
Is the private key on your Windows filesystem (under /mnt/)? You can't modify the permissions of files on Windows's filesystem using chmod on Bash on Ubuntu on Windows. You'll have to copy the private key to your WSL home directory (~) and do it there.
Some discussion here: https://github.com/Microsoft/WSL/issues/81
Solution 4:
I created an alias that gets loaded in my ~/.bashrc
file and allows to unmount/remount the C:/
drive in the /mnt/c/
folder with `"metadata" permissions.
alias win-chmod="cd ~ && sudo umount /mnt/c && sudo mount -t drvfs C: /mnt/c -o metadata && cd -"
This allows me to only enable chmod
when I need it, preventing unwanted changes to the mounted file system. It's just a matter of invoking
$ ls -l | grep myfile
-rwxrwxrwx 1 root root 0 Dec 12 16:34 myfile.txt
$ win-chmod
/mnt/c/Users/myself/Documents/myfolder
$ chmod 666 myfile.txt
$ ls -l | grep myfile
-rw-rw-rw- 1 root root 0 Dec 12 16:34 myfile.txt