linux权限案例,Linux下的权限体系

Linux 下的权限是一个很常用也很有用的东西, 细分开来是分为文件权限和访问控制。文件权限就是表示文件所属用户、用户所在组、其它用户的读写和执行权限;访问控制列表又称为 ACL,主要目的是提供传统的文件权限之外的具体权限设置,可以针对单一用户或组来设置特定的权限。

文件权限

文件读写权限

文件属性字段总共有 10 个字母组成,第一个字母表示文件类型,如果这个字母是一个减号,则说明该文件是一个普通文件。字母 d 表示该文件是一个目录。后面的 9 个字母为该文件的权限标识,3 个为一组,分别表示文件所属用户、用户所在组、其它用户的读写和执行权限;例如:

vagrant@homestead:~/code$ ll -a

drwxrw-r-- 1 vagrant vagrant 4096 Dec 8 09:09 blog/

表示这是一个文件夹,该文件夹对拥有者 vagrant 这个用户可读写可执行;对 vagrant 所在的组 vagrant 可读可写;对其它用户只可读;可以通过这张图加深理解:

更改读写权限

更改权限的方法是使用 chmod 命令,更改读写权限有两种方法,一种是字母方式,一种是数字方式。

字母方式

chmod userMark (+|-) PermissionsMark

其中 userMark 表示是给文件所有者、所有者组还是其他添加权限,取值如下:

u: 用户(user)

g: 组(group)

o: 其它用户(other)

a: 所有用户(all)

其中 permissionMark 表示是添加什么权限,取值如下:

r: 读

w: 写

x: 执行

例如:

chmod a+x main 对所有用户给文件 main 增加可执行权限

chmod g+w blogs 对组用户给文件 blogs 增加可写权限

数字方式

数字方式直接设置所有权限,相比字母方式,更加简洁方便;使用三位数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如 6(4+2) 代表有读写权,7(4+2+1) 有读、写和执行的权限。其实就是二进制转换为十进制的表示,比如我们要把一个文件权限改为 rwx rw- r--的话,那么其对位过来的二进制就是 111 110 100,每三位一组转换成十进制就是 764 :

rwx rw- r--

111 110 100

7 6 4

那么操作命令就是:

chmod 764 main 将 main 的权限设置为 rwx rw- r--

用户与组操作

附上一些常用的用户与组的操作:

groups 查看当前用户组

usermod -G sunny docker 将用户sunny加入docker组

usermod -g sunny docker 将用户sunny加入到docker组,并从原有的组中除去

more /etc/group 查看所有的用户组及权限

more /etc/passwd 查看所有用户及权限

访问控制列表(ACL)

要使用 ACL 必须要有文件系统支持才行,目前绝大多数的文件系统都会支持,EXT3 文件系统默认启动 ACL 的,ACL 就是可以设置特定用户或者用户组对于一个文件/文件夹的操作权限。

使用场景

假设我们当前有这样的一个文件:

[sunny@localhost ~]$ ls -l

-rw-rw---- 1 sunny admin 0 Jul 5 08:45 test.txt

test.txt 这个文件的所有者(user)是 sunny 拥有读和写的

权限。 他所属组 admin 组的用户(group)拥有读和写权限。其他任何用户(other)

对于文件没有任何的权限。

如果我们现在希望 john 这个用户也可以对 test.txt 文件进行读写操作。那么大概会想到

以下几种办法 (假设 john 不属于 admin 组)

给文件的 other 类别增加读和写的权限,这样由于 john 会被归为 other 类别,那么

他也将拥有读写的权限

将 john 加入到 admin 组,那么 john 会被归为 group 类别,那么他将拥有读写的权限

第一种做法的问题在于所有用户都将对 test.txt 拥有读写操作,显然这种做法不可取。第二种做法的问题在于john被赋予了过多的权限,所有属于 admin 组的文件,john 都可以拥有其等同的权限了。

看来好像都没有一个很好的解决方案,其实问题就出在 Linux 文件权限里面,对于 other 的定义过于广泛,以至于很难把权限限定于一个用户身上,那么 ACL 就是用来帮助我们解决这个问题的。

命令操作

ACL 的操作总共有这几个命令:getfacl setfacl,先来看看命令语法:

setfacl [-bkRd] [-m|-x acl参数] 目标文件名

命令的参数含义:

-b 表明有两个 ACL 需要修改,前一个 ACL 是文件的 ACL,后一个是目录的默认 ACL

-d 设定目录的默认 ACL,这个选项是比较有用,如果指定了目录的默认 ACL,在这个目录下新建的文件或目录都会继承目录的 ACL

-R 删除文件的acl

-D 删除目录的默认 ACL,是 `-d` 的反向操作

-B 删除文件和目录默认的 ACL,是 `-b` 的反向操作

-r 递归地修改文件和目录的 ACL 权限

-l 列出文件和目录的 ACL 权限

-m 设置目标文件的 ACL 参数,不可与 `-x` 一起使用

-x 删除目标文件的 ACL 参数,不可与 `-m` 一起使用

其中 acl参数 格式是这样的:

tag:name:permission

tag 可以是下面形式的一种:

user|u 表示用户的 ACL 条目

group|g 表示用户组的 ACL 条目

other|o 表示其它的 ACL 条目,即没有在 ACL 指定的用户和组的 ACL 条目

mask|m 表示掩码的 ACL 条目,在指定其它非用户属主的 ACL 权限时,这个掩码条目必须被指定,否则命令会出错

name 可以是用户名或组名。不指定默认是给文件或目录的属主或用户组指定 ACL 权限,当然 name 也可以是用户的 uid 或者组的 gid

permission 是指该用户或组所具有的权限,它是由 rwx 组成的一个字符串

命令实例

setfacl -m u:sunny:rwx ./wwwdir

给用户 sunny 添加一个当前下 wwwdir 这个文件夹 rwx 的权限

setfacl -m g:sunny:rwx ./wwwdir

给 sunny 组添加一个当前下 wwwdir 这个文件夹 rwx 的权限

setfacl -x g:sunny:rwx ./wwwdir

删除 sunny 组下 wwwdir 这个文件夹 rwx 的权限

不难,很简单。

欢迎关我的个人公众号:左手代码

1460000012794444?w=640&h=320

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值