The read, write and execute permissions apply slightly
differently to directories than they do to files. The
read permission on a directory controls the ability to
list the contents of that directory. In this example we?ll
create a directory and place a blank file in it. We?ll then
modify the permissions on the directory so the owner cannot see
the contents.$ mkdir secret_dir
$ touch secret_dir/my_secret.txt
$ ls secret_dir/
my_secret.txt
$ chmod u-r secret_dir/
$ ls secret_dir/
ls: secret_dir/: Permission denied
$ cd secret_dir/
$ ls
ls: .: Permission denied
$ cd ../
We see that we get a Permission denied error when trying to
view the contents of the directory when the read permission has
been revoked. Despite not being able to see what is in the
directory we can still change our working directory to that
directory.
The write permission on a directory behaves
somewhat as expected. If a user has write on a directory they
can create or remove files from that directory even if they are
not the owner of the files. This is important to note as giving
a user, group or other users write on a directory with other
user?s files in it will allow them to delete other users files.
Now we?ll give read permissions back to the owner and revoke
the execute permission:
$ chmod u+r secret_dir/
$ chmod u-x secret_dir/
$ ls secret_dir/
my_secret.txt
$ cd secret_dir/
-bash: cd: secret_dir/: Permission denied
We can now view the contents of the directory again but look
at what happened when we tried to cd into it! Not having the
execute permission on a directory will prevent
you from changing into that directory even though you can view
the contents. It is understandable how this can cause some
confusion.