For some obvious reasons I need to set umask value for one specific folder. How can one do that?

Thanks beforehand!

UPDATE 1

The reason I need to use umask for a specific folder is following. I have a web application and when it creates some file the default permission is 700. But I need at least 755 permission for that file. I think I could explain the problem more clearly now.

share|improve this question
1  
The reasons might be obvious to you, but not to us. Please share what you want to do. – htorque May 22 '11 at 20:12
    
@htorque. Added the reason why I need to use umask in my specific problem. – Bakhtiyor May 22 '11 at 20:24

you could use setfacl

setfacl -d -m group:name:rwx /path/to/your/dir

Where name is the group name

To find which groups you or a specific user belong see In unix/linux how do you find out what group a given user is in via command line?

share|improve this answer
1  
+1 for answering the actual question. – mkoistinen Nov 30 '13 at 22:59
1  
Perhaps setfacl has changed. I am getting an error stating that -m is not a valid option. – Ryan Burnette Jan 10 '15 at 19:51
    
Ryan, setfacl is not changed. Most likely you have't provided proper group name (after -m). – sergk Feb 4 '15 at 3:10
    
pretty sure setfacl is for access control lists and not umask. A better solution but not actually what was asked, I don't think. – Wyatt8740 Feb 11 '16 at 0:05

You cannot set umask per directory, it's a process-level value. If you need to prevent others from reading files in a directory, revoke the corresponding permissions bits.

For example, if you've a directory /home/user/directory with some files and directories which can get permissions like 777 from a process, set the permission bits of /home/user/directory to something like 700. That will make it impossible for other users (excluding the superuser root) to descend in /home/user/directory.

I'm paranoid and set the permissions on /home/user to 750, so only I can read, write and descend in my home directory. This has as consequence that folders like /home/user/Public cannot be accessed by others, but I can live with that.


Per update of your question: still, you cannot control that in the filesystem (other than using a different filesystem type like FAT which is strongly discougared), you need to do that in your webapp. If your webapp is coded in PHP, you can change the umask on the fly using the umask function:

<?php
umask(0022);
// other code
?>

You could put this in a configuration file, like the file containing the database connection password (thinking in apps like Wordpress).

Remember that it's a process value, some webservers allow you to set it in their configuration files, otherwise you could modify the startup scripts to set the desired umask. Remember that permissions like 755 and 644 are quite dangerous for webapps, if the code is sensitive, everyone can read it.

share|improve this answer

Another solution might be to just set the group id on files created in the directory, which makes the new files owned by the directory group id, instead of the group id of the user that created the files. So I think you could just do:

chown www-data:www-data /my/folder

chmod 4755 /my/folder

This sets the setgid special file permission, which would cause all files created in /my/folder to be owned by the www-data group, which has then has rx (5) permission because of the parent directory.

share|improve this answer

To change permissions for a folder use chmod. umask is for files.

Set umask to what you need by

umask xxx

and change back when your done

umask 022
share|improve this answer
8  
umask = files and directories, fmask = only files, dmask = only directories. :P – htorque May 22 '11 at 20:15
    
I learned something new today :) – wojox May 22 '11 at 20:23
1  
Actually that are options for certain file systems like NTFS (not that file creation mask setting command umask). Sorry for adding confusing information. – htorque May 22 '11 at 20:54
    
umask changes the file-creation mask for the current process (the current shell), if you have a different shell open or user-owned process, I don't believe it will be affected. This command will also affect any other files created outside of the directory until you change it back. – Mr. Dave May 3 '17 at 14:57

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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