ACL控制策略

1.定义ACL控制策略

问题

1)创建账户:mike、john、kaka
2)创建文件:/data/file1.txt
3)mike对文件有读写权限,john只有读权限。其他用户没有任何权限
4)kaka具有与john相同权限
5)创建lily用户,lily对file1.txt具有读执行权限,其他用户没有任何权限

方案

并不是所有的分区都支持ACL策略设置,后续会学习怎样让一个分区支持ACL。在安装系统时划分的分区默认是支持ACL策略的,而如果该分区是在安装系统之后创建的默认是不支持的。
ACL策略应用的情况是,当所有者、所属组、其他人三个归属关系,三种身份的权限都不能满足某个用户或组的权限设置。这个时候ACL可以为这个用户或组单独设置权限,使Linux权限划分设置更加灵活。

步骤

实现此案例需要按照如下步骤进行。
步骤一:创建账户:mike、john、kaka
命令操作如下所示:

[root@localhost ~]# useradd mike
[root@localhost ~]# useradd john
[root@localhost ~]# useradd kaka

步骤二:创建文件:/data/file1.txt
命令操作如下所示:

[root@localhost ~]# touch /data/file1.txt
[root@localhost ~]# ls -l /data/file1.txt
-rw-r--r--. 1 root root 0 2月  27 15:38 /data/file1.txt

步骤三:mike对文件有读写权限,john只有读权限。其他用户没有任何权限
分析: 此题涉及到三种不同的权限,我们可以这样来做,让mike来做所有者,让john属于此文件所属组成员,当然其他人就好说了直接设置即可。
命令操作如下所示:

 [root@localhost ~]# ls -l /data/file1.txt              //查看权限及归属关系
-rw-r--r--. 1 root root 0 2月  27 15:38 /data/file1.txt
[root@localhost ~]# chown mike:john /data/file1.txt    //更改所有者与所属组
[root@localhost ~]# ls -l /data/file1.txt               //查看更改结果
-rw-r--r--. 1 mike john 0 2月  27 15:38 /data/file1.txt
[root@localhost ~]# chmod o= /data/file1.txt            //设置权限,其他人无权限
[root@localhost ~]# ls -l /data/file1.txt               //查看呢设置结果
-rw-r-----. 1 mike john 0 2月  27 15:38 /data/file1.txt
[root@localhost ~]#

步骤四:kaka具有与john相同权限
分析: 我们可以把kaka加入到john组里面
命令操作如下所示:

[root@localhost ~]# id kaka                //查询kaka用户信息
uid=506(kaka) gid=507(kaka) 组=507(kaka)
[root@localhost ~]# gpasswd -a kaka john  //将kaka用户加入到john组
Adding user kaka to group john
[root@localhost ~]# id kaka                //查询kaka用户信息
uid=506(kaka) gid=507(kaka) 组=507(kaka),506(john)
[root@localhost ~]#

步骤五:创建lily,lily对file1.txt具有读执行权限,其他用户没有任何权限
分析: 这个时候就出现基本权限及归属关系不能解决,首先所有者已确定是mike,所属组权限rw所以也不行,最后其他人上面题有要求无任何权限。所以ACL策略就派上用场了。
命令操作如下所示:

[root@localhost ~]# echo 123456 > /data/file1.txt  //写入测试文字
[root@localhost ~]# cat /data/file1.txt             //管理员测试
123456
[root@localhost ~]# id lily                          //查询是否存在lily用户
id: lily:无此用户
[root@localhost ~]# useradd lily                     //创建lily用户
[root@localhost ~]# su – lily                        //切换用户身份
[lily@localhost ~]$ cat /data/file1.txt       //测试在没有设置ACL前lily能否查看
cat: /data/file1.txt: 权限不够
[lily@localhost ~]$ exit                              //退到root用户身份
logout
[root@localhost ~]# getfacl /data/file1.txt         //查看文件ACL策略
getfacl: Removing leading '/' from absolute path names

# file: data/file1.txt
# owner: mike
# group: john
user::rw-
group::r--
other::---

[root@localhost ~]# setfacl -m u:lily:r /data/file1.txt   //设置ACL策略
[root@localhost ~]# getfacl /data/file1.txt                //查看ACL策略
getfacl: Removing leading '/' from absolute path names
# file: data/file1.txt
# owner: mike
# group: john
user::rw-
user:lily:r--
group::r--
mask::r--
other::---

[root@localhost ~]# su – lily             //切换用户
[lily@localhost ~]$ cat /data/file1.txt  //测试是否具有r权限
123456

2.定义默认ACL控制策略

问题

1)为目录 /public/ 设置ACL策略,使用户gelin01具有rwx权限
2)在 /public/ 下创建子目录gdir1、文件gfile1,分别查看其ACL策略
3)为目录 /public/ 设置可继承权限为“用户ht02具有rwx权限”
4)在 /public/ 下创建子目录gdir2、文件gfile2,分别查看其ACL策略
5)以用户ht02登入,做以下测试:
6)对/public/目录是否有写入权限
7)对/public/下的gdir2和gfile2是否有写入权限
8)对/public/下的gdir1和gfile1是否有写入权限

方案

ACL默认策略,是一个可以继承的ACL策略。但需注意的是默认策略对目录本身是没有生效的,对于子目录子文件才开始生效。

步骤

实现此案例需要按照如下步骤进行。
步骤一:为目录 /public/ 设置ACL策略,使用户gelin01具有rwx权限
命令操作如下所示:

[root@localhost ~]# id gelin01           //测试是否有gelin01用户
uid=501(gelin01) gid=501(gelin01) 组=501(gelin01),502(tarena)
[root@localhost ~]# mkdir /public        //创建目录
[root@localhost ~]# getfacl /public      //查看ACL策略
getfacl: Removing leading '/' from absolute path names

# file: public/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@localhost ~]# setfacl -m u:gelin01:rwx /public    //设置ACL策略
[root@localhost ~]# getfacl /public                       //查看ACL策略
getfacl: Removing leading '/' from absolute path names
# file: public/

# owner: root
# group: root
user::rwx
user:gelin01:rwx
group::r-x
mask::rwx
other::r-x
步骤二:在 /public/ 下创建子目录gdir1、文件gfile1,分别查看其ACL策略
命令操作如下所示:
[root@localhost ~]# mkdir /public/gdir1
[root@localhost ~]# touch /public/gfile1
[root@localhost ~]# getfacl /public/gdir1/
getfacl: Removing leading '/' from absolute path names
# file: public/gdir1/

# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@localhost ~]# getfacl /public/gfile1 
getfacl: Removing leading '/' from absolute path names
# file: public/gfile1

# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@localhost ~]#

步骤三:为目录 /public/ 设置可继承权限为“用户ht02具有rwx权限”
命令操作如下所示:

[root@localhost ~]# id ht02        //查看ht02用户是否存在
id: ht02:无此用户
[root@localhost ~]# useradd ht02   //创建ht02用户
[root@localhost ~]# getfacl /public/
getfacl: Removing leading '/' from absolute path names
# file: public/
# owner: root
# group: root
user::rwx
user:gelin01:rwx
group::r-x
mask::rwx
other::r-x
[root@localhost ~]# setfacl -dm u:ht02:rwx /public    //设置默认可继承ACL权限
[root@localhost ~]# getfacl /public/
getfacl: Removing leading '/' from absolute path names
# file: public/
# owner: root
# group: root
user::rwx
user:gelin01:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:ht02:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@localhost ~]#

步骤四:在 /public/ 下创建子目录gdir2、文件gfile2,分别查看其ACL策略
命令操作如下所示:

[root@localhost ~]# mkdir /public/gdir2
[root@localhost ~]# touch /public/gfile2
[root@localhost ~]# getfacl /public/gdir2
getfacl: Removing leading '/' from absolute path names
# file: public/gdir2
# owner: root
# group: root
user::rwx
user:ht02:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:ht02:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@localhost ~]# getfacl /public/gfile2
getfacl: Removing leading '/' from absolute path names
# file: public/gfile2
# owner: root
# group: root
user::rw-
user:ht02:rwx                   #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::r--

步骤五:以用户ht02登入,测试
切换目录身份,命令操作如下所示:

[root@localhost ~]# su - ht02
[ht02@localhost ~]$

对/public/目录是否有写入权限,命令操作如下所示:

[ht02@localhost ~]$ mkdir /public/htdir
mkdir: 无法创建目录"/public/htdir": 权限不够
[ht02@localhost ~]$ getfacl /public/
getfacl: Removing leading '/' from absolute path names
# file: public/
# owner: root
# group: root
user::rwx
user:gelin01:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:ht02:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[ht02@localhost ~]$

分析: 从这可以看出默认权限对目录本身没有生效,对子目录才开始继承生效。
对/public/下的gdir2和gfile2是否有写入权限,命令操作如下所示:

[ht02@localhost ~]$ mkdir /public/gdir2/htdir
[ht02@localhost ~]$ getfacl /public/gdir2/
getfacl: Removing leading '/' from absolute path names
# file: public/gdir2/
# owner: root
# group: root
user::rwx
user:ht02:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:ht02:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[ht02@localhost ~]$ ls -ld /public/gdir2/htdir/      //创建成功
drwxrwxr-x+ 2 ht02 ht02 4096 2月  27 16:53 /public/gdir2/htdir/
[ht02@localhost ~]$ getfacl /public/gfile2
getfacl: Removing leading '/' from absolute path names
# file: public/gfile2
# owner: root
# group: root
user::rw-
user:ht02:rwx                   #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::r--

[ht02@localhost ~]$
[ht02@localhost ~]$ echo 123456 > /public/gfile2     //测试写入
[ht02@localhost ~]$ cat /public/gfile2                
123456
对/public/下的gdir1和gfile1是否有写入权限,命令操作如下所示:
[ht02@localhost ~]$ getfacl /public/gdir1      //可以看到ht02没有呢ACL权限
getfacl: Removing leading '/' from absolute path names
# file: public/gdir1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[ht02@localhost ~]$ mkdir /public/gdir1/htdir
mkdir: 无法创建目录"/public/gdir1/htdir": 权限不够
[ht02@localhost ~]$ getfacl /public/gfile1      //可以看到ht02没有呢ACL权限
getfacl: Removing leading '/' from absolute path names
# file: public/gfile1
# owner: root
# group: root
user::rw-
group::r--
other::r--

[ht02@localhost ~]$ echo 123456 > /public/gfile1
-bash: /public/gfile1: 权限不够
[ht02@localhost ~]$

你可能感兴趣的:(ACL控制策略)