Linux之ACL功能


 

  Linux中的ACL功能是体现在对文件和目录的权限上,而且对于权限设置的精细度上有了非常大的提高;比如一个文件或者目录的所有者和所有者都是tangsir,权限为755,那么也就是说root用户和tangsir可以写入外,其余的人是没有权限的。但是如果我们配置了ACL功能的话,我们完全可以使另一个用户对此文件或者目录有写入的权限。

如何使文件或者目录具有ACL功能呢?我们可以通过配置分区来支持ACL功能。首先,我们要明白,是不是所有的分区都支持ACL功能呢?在RHEL5.X版本中,安装操作系统时所建立的分区是支持ACl功能的,安装操作系统任务完成后所建立的分区默认是不支持ACL功能的,那么如何实现这种分区支持ACL功能呢?我们可以使用三种方式来实现操作系统安装成功后所建立的分区支持ACL功能;

(1)    使用mount命令,此命令使一个分区临时生效,重启后ACL会失效。

mount –o remount,acl 分区

mount –o acl 分区 挂载点

     以上两种语法的区别:上面的表示的是此分区已经建立且在使用了或者说已经被挂载了,但是还不支持ACL功能,我们通过此命令来实现不影响分区使用的情况下来支持ACL功能;下面表示的是在挂载分区的同时使其具备ACL功能。

例子:第一种情况:

       [root@tangsir ~]# mount -o remount,acl /dev/sdb1

      第二种情况:

       [root@tangsir ~]# mount -o acl /dev/sdb2 /test2

    用mount命令来查看信息:

     [root@tangsir ~]# mount

/dev/sda3 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/sda1 on /boot type ext3 (rw)

tmpfs on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

none on /proc/fs/vmblock/mountPoint type vmblock (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

/dev/sdb1 on /test1 type ext3 (rw,acl)

/dev/sdb2 on /test2 type ext3 (rw,acl)

从挂载的信息中,我们得知了此分区支持ACL功能

 

(2)    使用tune2fs命令,此命令可以使分区永久支持ACL功能

例子:

[root@tangsir ~]# tune2fs -o acl /dev/sdb5

使用-l选项来查看分区配置的情况:

[root@tangsir ~]# tune2fs -l /dev/sdb5

tune2fs 1.39 (29-May-2006)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          7e4472be-3a69-4060-b781-4184149d06ad

Filesystem magic number: 0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal resize_inode dir_index filetype sparse_super large_file

Default mount options:    acl è说明了该分区支持ACL功能

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

注意:使用tune2fs命令配置分区,用mount命令是查看不到的,只有通过修改/etc/fstab来支持分区ACL功能后才可以看到

 

(3)    通过修改/etc/fstab来实现分区支持ACl 功能

       [root@tangsir ~]# cat /etc/fstab

LABEL=/                 /                       ext3    defaults        1 1

LABEL=/boot             /boot                   ext3    defaults        1 2

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts gid=5,mode=620 0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

LABEL=SWAP-sda2         swap                    swap    defaults        0 0

/dev/sdb5               /test3                  ext3    defaults,acl    0 0

为了使配置生效要重启计算机或者使用mount –o remount PT 命令。

 

分区支持ACL功能后,我们要对文件或者目录具体设置ACL功能以及查看具体的ACL配置,这里要使用两个命令字:setfacel and getfacl 。为了更好的理解命令的用法和设置,我们通过具体的实例来分析。首先,我们来看看setfacl命令常用的选项;

-m:修改文件或目录的ACL rules

-x:删除文件或者目录指定的ACLrules

-d:指定文件或者目录默认的ACLrules

-k:删除文件或者目录默认的ACL rules

-b:删除文件或者目录所有的ACL rules

-R:递归渲染,对具体目录下所有的文件和目录全部渲染

 具体实例:目录系统中的/dev/sdb1分区支持ACL功能,分区的挂载目录是/test1,目录中包含了h3cte和ccie两个目录,我们使用户tangsir对目录ccie有可读,可写,可执行的权限,并且配置用户tangsir对目录ccie有默认的可读,可写,可执行权限,也就是说用户tangsir在目录ccie中建立的目录或者文件时会自动继承ACL权限;

  信息查看:

     [root@tangsir ~]# df -H

文件系统               容量   已用 可用 已用% 挂载点

/dev/sda3               21G   4.9G    15G 26% /

/dev/sda1              104M    12M    87M 12% /boot

tmpfs                  246M      0   246M   0% /dev/shm

/dev/sdb1              2.5G    71M   2.3G   4% /test1

/dev/sdb2              1.7G    37M   1.6G   3% /test2

[root@tangsir ~]# ll /test1

总计32

drwxr-xr-x 2 root root 4096 07-29 11:27 ccie

drwxr-xr-x 2 root root 4096 07-29 11:27 h3cte

规则配置:

[root@tangsir test1]# setfacl -m u:tangsir:rwx ccie/

命令分析:-m 表示修改文件或者目录的ACL rules;u表示针对用户;tangsir是用户名;rwx是对目录的权限,字母和数字都可以表示;ccie/是具体的目录。

查看并用户测试:

[root@tangsir test1]# ll

总计32

drwxrwxr-x+ 2 root root 4096 07-29 11:27 ccie 目录权限的最后一位是一个“+”表示目录配置了ACL功能

drwxr-xr-x 2 root root 4096 07-29 11:27 h3cte

切换用户tangsir:

        [root@tangsir ~]# su - tangsir

[tangsir@tangsir ~]$ mkdir /test1/ccie/ccm --可以创建目录,成功!!

[tangsir@tangsir ~]$ ll /test1/ccie/

总计8

drwxrwxr-x 2 tangsir tangsir 4096 07-29 11:38 ccm -- one

 用户的默认的ACL配置:

         [root@tangsir test1]# setfacl -m d:u:tangsir:rwx ccie/

 

 创建目录或者文件并查看:

         [root@tangsir test1]# su - tangsir

[tangsir@tangsir ~]$ mkdir /test1/ccie/ccm1

[tangsir@tangsir ~]$ ll /test1/ccie/

总计16

drwxrwxr-x 2 tangsir tangsir 4096 07-29 11:38 ccm

drwxrwxr-x+ 2 tangsir tangsir 4096 07-29 11:43 ccm1   ---two(自动继承了ACL功能)

注意比较one ,two ,看出两者的区别~~

 

具体实例:具体实例:目录系统中的/dev/sdb2分区支持ACL功能,分区的挂载目录是/test2,目录中包含了mvp和cca两个目录,建立用户组zu1,zu2,建立用户liugong ,xugong.

liugong属于组zu1,xugong属于zu2.配置zu1对mvp有执行的权限,zu2对cca有所有的权限。并实现zu2对cca目录有默认的ACl功能。(可读,可写,可执行)

组,用户的建立:

            [root@tangsir ~]# groupadd zu1

[root@tangsir ~]# groupadd zu2

[root@tangsir ~]# usermod -G zu1 liugong

[root@tangsir ~]# gpasswd -a xugong zu2

正在将用户“xugong”加入到“zu2”组中

               [root@tangsir ~]# ll /test2/

总计32

drwxr-xr-x 2 root root 4096 07-29 11:52 cca

drwx------ 2 root root 16384 07-29 10:33 lost+found

drwxr-xr-x 2 root root 4096 07-29 11:52 mvp

 

配置zu1对mvp有执行的权限:

                [root@tangsir test2]# setfacl -m g:zu1:x mvp/

zu2对cca有所有的权限:

                [root@tangsir test2]# setfacl -m g:zu2:7 cca/

                            root@tangsir test2]# setfacl -m d:g:zu2:7 cca/

ACL功能查看:

                [root@tangsir test2]# ll

总计32

drwxrwxr-x+ 2 root root 4096 07-29 11:52 cca

drwx------ 2 root root 16384 07-29 10:33 lost+found

drwxr-xr-x+ 2 root root 4096 07-29 11:52 mvp

用户测试:

                  [root@tangsir ~]# su - liugong

[liugong@tangsir ~]$ cd /test2/mvp/

[liugong@tangsir mvp]$ touch jilu.txt

touch: 无法触碰 “jilu.txt”: 权限不够

liugong对mvp目录只有执行权限,效果正确~

 

               [xugong@tangsir ~]$ cd /test2/cca/

[xugong@tangsir cca]$ mkdir keke && touch diligence

[xugong@tangsir cca]$ ll

总计12

-rw-rw-r--+ 1 xugong xugong    0 07-29 12:14 diligence

drwxrwxr-x+ 2 xugong xugong 4096 07-29 12:14 keke

 

getfacl 命令来查看文件或者目录的ACL;

[root@tangsir test1]# ll

总计32

drwxrwxr-x+ 4 root root 4096 07-29 11:43 ccie

drwxr-xr-x 2 root root 4096 07-29 11:27 h3cte

drwx------ 2 root root 16384 07-29 10:31 lost+found

 

[root@tangsir test1]# getfacl ccie

# file: ccie 文件或者目录的名称

# owner: root 文件或者目录的属主

# group: root 文件或者目录属组

user::rwx   属主的权限

user:tangsir:rwx 用户tangsir的权限

group::r-x 属组的权限

mask::rwx 文件或者目录最大权限

other::r-x 其他人的权限

default:user::rwx

default:user:tangsir:rwx 用户tangsir对目录或者文件的默认权限

default:group::r-x

default:mask::rwx

 

                  

文件或者目录ACL的删除:

                   [root@tangsir test1]# getfacl ccie

# file: ccie

# owner: root

# group: root

user::rwx

user:tangsir:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:tangsir:rwx

default:group::r-x

default:mask::rwx

              [root@tangsir test1]# setfacl -x u:tangsir ccie—删除指定的ACL

              [root@tangsir test1]# setfacl -b ccie --删除全部的ACl

[root@tangsir test1]# getfacl ccie

# file: ccie

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

 

注意:文件或者目录配置了ACL以后,由于系统管理的需要要将配置了ACL的目录进行复制操作,那么cp命令后必要加上“-P”选项,如果是剪切的话,就不需要了,因为默认mv命令会保留原ACL。当然前提必须是目标目录必须也要支持ACL功能才行~~

相关内容

    暂无相关文章