Linux下的权限是一个很常见也很有用的东西,细分为文件权限和访问控制。文件权限表示文件所属用户、用户所属组和其他用户的读、写和执行权限;访问控制列表也称为ACL,其主要目的是提供传统文件权限以外的特定权限设置,可以针对单个用户或组设置特定的权限。文件权限文件读写权限文件属性字段,共10个字母。第一个字母表示文件类型。如果字母是减号,则表示该文件是普通文件。字母d表示该文件是一个目录。后面9个字母是文件的权限标识,3个是组,分别表示文件所属用户、用户所属组、其他用户的读、写、执行权限;例如:vagrant@homestead:~/code$ll-adrwxrw-r--1vagrantvagrant4096Dec809:09blog/表示这是一个文件夹,对所有者vagrant用户可读可写可执行;对vagrant所在的组vagrant可读可写;对其他用户只能阅读;通过这张图可以加深理解:改变读写权限的方法是使用chmod命令。更改读写权限有两种方式,一种是字母方式,一种是数字方式。按字母顺序chmoduserMark(+|-)PermissionsMark其中userMark表示是否为文件所有者、所有者组或其他人添加权限,取值如下:u:用户(用户)g:组(组)o:其他users(other)a:所有用户(all)其中permissionMark表示添加什么权限,取值如下:r:readw:writex:execute例如:chmoda+xmain添加可执行权限所有用户的主文件chmodg+wblogs对于组用户,给文件blogs添加可写权限。数字方式直接设置所有权限,比字母方式更简洁方便。使用三位数字表示权限。第一位指定所有者的权限,第二位指定组权限,第三位指定其他用户的权限。每个位由三个值的总和决定权限:4(读取)、2(写入)和1(执行)。例如6(4+2)表示读写权,7(4+2+1)表示读写权和执行权。其实就是二进制转十进制的表示。比如我们要修改一个文件的权限为rwxrw-r--,那么对应的二进制就是111110100,每三位换算成十进制就是764:rwxrw-r--111110100764然后运行命令为:chmod764main设置main的权限为rwxrw-r--用户和组操作附加一些常用的用户和组操作:groups查看当前用户组usermod-Gsunnydocker添加用户sunny到docker组usermod-gsunnydocker将用户sunny加入docker组并从原组中移除more/etc/group查看所有用户组及权限more/etc/passwd查看所有用户及权限访问控制列表(ACL)要使用ACL,您必须具有文件系统支持。目前大部分文件系统都会支持。EXT3文件系统默认启动ACL。ACL可以设置特定用户或用户组对于文件/文件夹的操作权限。使用场景假设我们当前有这样一个文件:[sunny@localhost~]$ls-l-rw-rw----1sunnyadmin0Jul508:45test.txttest.txt这个文件的所有者(用户)有读写权限的sunny。他所属的admin组的用户(组)有读写权限。任何其他用户(other)对该文件没有任何权限。如果我们现在希望john用户也能够读写test.txt文件。那么你可能会想到下面的方法(假设john不属于admin组)给文件的other类添加读写权限,这样既然john会被归类为other,那么他也有读写权限写权限。将john添加到admin组,那么john会被归为一个组类别,他将拥有读写权限。第一种方式的问题是所有用户都会对test.txt进行读写操作,这显然不可取。第二种方法的问题是给john的权限太多了,所有属于admin组的文件,john都可以拥有相同的权限。好像没有什么好的解决办法。其实问题出在Linux的文件权限上。other的定义过于宽泛,以至于很难将权限限制在一个用户身上。那么ACL就是用来帮助我们解决这个问题的。可疑的。命令操作ACL操作一共有几个命令:getfaclsetfacl先来看看命令语法:setfacl[-bkRd][-m|-xaclparameter]目标文件名命令的参数含义:-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:permissiontag可以是以下形式之一:user|u表示用户组的ACL条目|g表示用户组other|o的ACL表项表示其他ACL表项,即ACL中没有指定用户或组的ACL表项。mask|m表示掩码的ACL表项。在指定其他非用户属主的ACL权限时,必须指定此掩码项,否则命令会出错。name可以是用户名或组名。如果不指定,默认为文件或目录的属主或用户组分配ACL权限。当然name也可以是用户的uid或者组的gidpermission。Permission是指用户或组的权限,是由rwx组成的字符串命令示例setfacl-mu:sunny:rwx./wwwdir给用户sunny添加一个当前wwwdir文件夹的rwx权限setfacl-mg:sunny:rwx./wwwdir将当前wwwdir文件夹rwx的一个rwx权限添加到sunny组setfacl-xg:sunny:rwx./wwwdir要删除sunny组下文件夹wwwdir的rwx权限并不难,很简单。欢迎关闭我的个人公众号:左手码
