I would like to give 755 permissions to a directory, so I use:

# chmod -R 755 /my/folder/

It works for all files inside my folder, but the problem is that I use scripts that create new files in this folder, and by default the permissions are 600.

How could I impose, 755 permissions on these 'future' files ?


I use a script that gives me info about network traffic on my campus. I have a new file every 10 minutes, located in a folder called journey, located in the month folder like this :

ls -lrt /home/netmet/secure/2017-04/2017-04-27/
total 118548
-rwxr-sr-x 1 root root   85922 avril 27 00:10 zzaccounting.dmp-00-00
-rwxr-sr-x 1 root root   54874 avril 27 00:20 zzaccounting.dmp-00-10
-rwxr-sr-x 1 root root   33534 avril 27 00:30 zzaccounting.dmp-00-20
-rwxr-sr-x 1 root root   48890 avril 27 00:40 zzaccounting.dmp-00-30
-rwxr-sr-x 1 root root   36878 avril 27 00:50 zzaccounting.dmp-00-40
-rwxr-sr-x 1 root root   37034 avril 27 01:00 zzaccounting.dmp-00-50
-rwxr-sr-x 1 root root   38154 avril 27 01:10 zzaccounting.dmp-01-00
-rwxr-sr-x 1 root root   38318 avril 27 01:20 zzaccounting.dmp-01-10
-rwxr-sr-x 1 root root   26978 avril 27 01:30 zzaccounting.dmp-01-20
-rwxr-sr-x 1 root root   31558 avril 27 01:40 zzaccounting.dmp-01-30
-rwxr-sr-x 1 root root   23662 avril 27 01:50 zzaccounting.dmp-01-40
-rwxr-sr-x 1 root root   32298 avril 27 02:00 zzaccounting.dmp-01-50
-rwxr-sr-x 1 root root   30282 avril 27 02:10 zzaccounting.dmp-02-00
-rwxr-sr-x 1 root root   31110 avril 27 02:20 zzaccounting.dmp-02-10
-rwxr-sr-x 1 root root   25718 avril 27 02:30 zzaccounting.dmp-02-20
-rwxr-sr-x 1 root root   26306 avril 27 02:40 zzaccounting.dmp-02-30
-rwxr-sr-x 1 root root   23690 avril 27 02:50 zzaccounting.dmp-02-40
-rwxr-sr-x 1 root root   23002 avril 27 03:00 zzaccounting.dmp-02-50
-rwxr-sr-x 1 root root   21854 avril 27 03:10 zzaccounting.dmp-03-00

Here I changed permissions by hand but when new the file appears, I have this :

-rw------- 1 root root 3479106 avril 27 15:50 zzaccounting.dmp-15-40

The thing is that for every folder and file under /home/netmet/secure/ I want 755 permision by default.

I have already done this :

chmod -R g+s /home/netmet/secure   
setfacl -d -m g::rwx /home/netmet/secure   
setfacl -d -m o::rx /home/netmet/secure   
  • 3
    ACL is the answer. This has been discussed before. – d3ag0s Apr 27 '17 at 11:43
  • 8
    ACL is the answer for overriding the umask, but not for overriding a program that creates files with mode 0600 by design. See here for some references. – ilkkachu Apr 27 '17 at 12:06
  • 1
    And one more detail: by default you can't use umask for adding execution bit to files, this need to be done by hand – Romeo Ninov Apr 27 '17 at 13:01
  • umask doesn't work guys – klaypez Apr 28 '17 at 9:40
  • Can you edit the script you use to make the files? How do the files get in to the final directory (eg. 2017-04-27) and how are the directories made in the first place? Please update the question with these details. – Tigger Apr 28 '17 at 10:46

Try to run umask in your folder. If it returns anything other than '0022' then this is your problem. In your case it should initialy output '0177'. The permission system when creating directory is basically computed: default - umask 0777 is the default mode for directories, and 0666 to ordinary files, but there are different umasks, if I understand these things right. Try to execute umask a=rx,uu+w.

EDIT: You can use umask to give execute bit to directory to be able to cd into it, but not to files. These have to be given execute bit manually because of security. Simply add chmod +x <file> to your script. And, execute flag set on file anything other than executable has no effect.

  • 1
    The umask shell command does not depend on the path, it only depends on the user running it, each user has a specific umask value, defined at login and that can be changed later. This defines how new file permissions are created. – Patrick Mevzek Nov 25 '17 at 22:21
  • That should be chmod a=rx,u+w in your reply. – Patrick Mevzek Nov 25 '17 at 22:22

I am guessing you are running the scripts that generate the files in an environment where umask is set to 0077. This prevents the generating program to set any permission bits in the 'group' and 'other' permission bits.

Note that the umask is part of any process's inherited environment and typically set from a default 'profile' at login. Any process (shell) can modify their own and descendant children's (initial) umask with the 'umask' command.

The bits in the current umask will prevent creation of files with these bits set in their permissions (hence a "mask", masking the resulting permission bits)


Note: This is not ideal and should be considered as a temporary workaround

You can create cron job that runs the chmod command every 5 minutes or as preferred.

There's also inotify

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.