Setting default permissions for newly created files and sub-directories under a directory in Linux?

后端 未结 4 2068
夕颜
夕颜 2020-12-04 05:51

I have a bunch of long-running scripts and applications that are storing output results in a directory shared amongst a few users. I would like a way to make sure that every

相关标签:
4条回答
  • 2020-12-04 05:54

    in your shell script (or .bashrc) you may use somthing like:

    umask 022

    umask is a command that determines the settings of a mask that controls how file permissions are set for newly created files.

    0 讨论(0)
  • 2020-12-04 05:56

    To get the right ownership, you can set the group setuid bit on the directory with

    chmod g+rwxs dirname
    

    This will ensure that files created in the directory are owned by the group. You should then make sure everyone runs with umask 002 or 007 or something of that nature---this is why Debian and many other linux systems are configured with per-user groups by default.

    I don't know of a way to force the permissions you want if the user's umask is too strong.

    0 讨论(0)
  • 2020-12-04 06:05

    It's ugly, but you can use the setfacl command to achieve exactly what you want.

    On a Solaris machine, I have a file that contains the acls for users and groups. Unfortunately, you have to list all of the users (at least I couldn't find a way to make this work otherwise):

    user::rwx
    user:user_a:rwx
    user:user_b:rwx
    ...
    group::rwx
    mask:rwx
    other:r-x
    default:user:user_a:rwx
    default:user:user_b:rwx
    ....
    default:group::rwx
    default:user::rwx
    default:mask:rwx
    default:other:r-x
    

    Name the file acl.lst and fill in your real user names instead of user_X.

    You can now set those acls on your directory by issuing the following command:

    setfacl -f acl.lst /your/dir/here
    
    0 讨论(0)
  • 2020-12-04 06:13

    Here's how to do it using default ACLs, at least under Linux.

    First, you might need to enable ACL support on your filesystem. If you are using ext4 then it is already enabled. Other filesystems (e.g., ext3) need to be mounted with the acl option. In that case, add the option to your /etc/fstab. For example, if the directory is located on your root filesystem:

    /dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1
    

    Then remount it:

    mount -oremount /
    

    Now, use the following command to set the default ACL:

    setfacl -dm u::rwx,g::rwx,o::r /shared/directory
    

    All new files in /shared/directory should now get the desired permissions. Of course, it also depends on the application creating the file. For example, most files won't be executable by anyone from the start (depending on the mode argument to the open(2) or creat(2) call), just like when using umask. Some utilities like cp, tar, and rsync will try to preserve the permissions of the source file(s) which will mask out your default ACL if the source file was not group-writable.

    Hope this helps!

    0 讨论(0)
提交回复
热议问题