If you require more control of your file permissions, Access Control Lists (ACLs) may be the way to go. ACLs go beyond the normal user/group/other paradigm and allow setting permissions per individual user or group.
ACLs are a great option when you want to grant permissions without creating entire user groups. They are also great when you need to allow your non-super-users the ability to set permissions. You still have to be the main owner of a file to modify its permissions, though.
Proceed with caution! ACLs can cause mysterious permission errors that are not immediately obvious to someone who isn't aware of them. For this very reason, ACLs are enabled but not used by default in the latest RHEL / CentOS.
To check if your ext3 filesystem has the proper default options, use tune2fs. Look for "Default mount options:" with acl set. Let's assume we have /dev/sdb1 mounted on /data1 and we want to enable the acl option.
give user bob read+write+execute on a file:
If you want to remove all ACLs, reverting back to the base unix permissions of owner, group and other:
ACLs are a great option when you want to grant permissions without creating entire user groups. They are also great when you need to allow your non-super-users the ability to set permissions. You still have to be the main owner of a file to modify its permissions, though.
Proceed with caution! ACLs can cause mysterious permission errors that are not immediately obvious to someone who isn't aware of them. For this very reason, ACLs are enabled but not used by default in the latest RHEL / CentOS.
To check if your ext3 filesystem has the proper default options, use tune2fs. Look for "Default mount options:" with acl set. Let's assume we have /dev/sdb1 mounted on /data1 and we want to enable the acl option.
[root@foobaz ~]# tune2fs -l /dev/sdb1To enable ACLs on a filesystem, we must set the fs default and remount:
[root@foobaz ~]# tune2fs -o acl /dev/sdb1 [root@foobaz ~]# mount -o remount,acl /data1Use getfacl to view ACLs:
[root@foobaz ~]# touch /data1/foo.txt [root@foobaz ~]# getfacl /data1/foo.txt getfacl: Removing leading '/' from absolute path names # file: data1/foo.txt # owner: root # group: root user::rw- group::r-- other::r--Use setfacl to set ACLs, with -m to modify and -x to remove a given ACL.
give user bob read+write+execute on a file:
[root@foobaz ~]# setfacl -m u:bob:rwx /data1/singh.txt
give group peeps read+write on a file:[root@foobaz ~]# setfacl -m g:peeps:rw /data1/singh.txt
remove bob's ACL permissions:[root@foobaz ~]# setfacl -x u:bob /data1/singh.txt
set the default ACL permissions on a directory:[root@foobaz ~]# setfacl -m d:g:peeps:rw /data1/stuff/
revoke write permission for everyone:[root@foobaz ~]# setfacl -m m::rx /data1/singh.txt
When ACLs are present, an ls -l will show a plus sign to notify you:[root@foobaz ~]# ls -l /data1/singh.txt
-rw-rwxr--+ 1 root root 0 Dec 3 14:54 /data1/foo.txt
Note that the mv and cp -p commands will preserve ACLs. If you have defaults set on a parent directory, new files in that directory will inherit those settings.If you want to remove all ACLs, reverting back to the base unix permissions of owner, group and other:
[root@foobaz ~]# setfacl --remove-all /data1/singh.txt
Comments
Post a Comment