文件系统权限管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件系统权限管理相关的知识,希望对你有一定的参考价值。

参考技术A 权限就是对文件或目录“加锁”,有不同权限的人才能进去不同的入口……

其中rw-r--r--.就是这个文件的权限了,而后边的root root代表文件的属主和数组。

我们先来看一下权限用什么代表:

所属:

rw-r--r--9个位,分为三段,每段三个位,依次为r,w,x权限,三段分别为属主,属组,其他人三种类别的权限。
属主具有读写权限,属组有读权限,其他人有读权限,如果显示为-,则代表该类人没有此权限。那么root用户对此文件有读和写的权限,但是没有执行权限,什么是执行权限呢,比如说我们的Windows中的exe文件,能双击执行的就为可执行的,那么linux中,x则代表可执行,一般为脚本文件,或者是二进制文件(比如说ls命令)。
root组的用户对这个文件有只读权限,也就是不能更改和执行了,。对于不是root用户,和不属于root组的用户,则也是只有只读权限。

那么如何才能有自己想有的权限呢,就要所属用户或者root用户来设置了。

权限设置有两种方法:
1.2.1模式法
对象+-=权限
对象:ugoa——a相当于ugo三种类别的人
权限:rwx

还可以复制其他文件的权限

1.2.2数字法
数字也可以代表权限,r使用4表示,w使用2表示,x使用1表示,1、2、4看着有规律啊,不错,的确rwx使用二进制表示的话,有权限使用1表示,没有使用0,那么如下图:

具体只要在相应位上有权限,则二进制为1,则三个位组合起来,再从二进制转化为十进制则数字可计算出来权限。

umask值用来消除创建文件时的相应位上的权限(从二进制方面理解);
新建文件: 666 - umask值就是新建文件的默认权限,因为新建文件默认没有执行权限的(没有1权限,所以只要有奇数权限则代表有执行权限),所以得到的权限必定是偶数,如果umask为奇数,则用666减去将得到奇数权限,如果所得结果某位存在奇数权限,则将其权限+1(因为从二进制方面理解,如果相应位没有权限,则多减了1,故要加上1来弥补这个权限);

新建目录: 777 - umask值就是新建目录的默认权限;
管理员的umask 是 022
普通用户的umask是 002

X的作用(x权限特殊形式)
针对目录增加x权限
对文件
1 无执行的文件,不会增加x权限
2 任意三种人有执行权限,也会增加x权限
目录

文件:

对目录的权限意义:
只有读:只能查看目录文件列表,不能访问文件,也不能cd目录(查看,删除)
只有执行:可以cd进去,不能ls,可以访问目录中的文件。执行是基础权限
写权取:配合x权限才生效

SUID权限代表不管是谁执行此程序,将继承此程序所有者的权限
比如修改密码命令passwd,因此每个用户都可以用此命令修改自己的密码,由于其继承的是属主root用户的权限。

创建一个文件,赋予s权限

SGID作用于目录或可执行程序,作用于目录代表在此目录创建的文件或目录,默认的属组继承此目录的属组

粘贴位权限,只能作用于目录上,只有自己才能删除自己创建的文件.使用t来表示,同样需要执行权限x,否则表现为T
有这样的需求,如果多人合作,希望整个团队的人都能更改这个目录的文件,但是这个目录的文件 不能被其他人删除,比如说系统的/tmp目录,这个目录每个用户都可以在里面创建文件,但是不能删除其他用户创建的文件,除了root

特殊权限:
SUID:4
SGID:2
Sticky:1

SUID只能作用于二进制可执行程序,不能作用于目录,因为其对应的是程序,程序需要能执行
为什么对于一个文件有读写执行权限,依然不能删除呢,因为删除文件要看其父目录是否有权限。删除的是目录项中的文件名(详细请看我的inode博客)

因为文件权限管理职能对三类人有效,在生产中远远不能满足要求,ACL则应运而生

举例:

Linux文件系统管理之一(文件权限管理)

声明

    系统版本:CentOS6.3


一、 查看文件权限

使用ls -l 命令可以查看到文件的访问权限

例如:在目录/etc/下执行命令ls -l 抽取其中的一行

技术分享 

相关概念:

① 文件类型:下面列举Linux中七种文件类型,每种文件类型  都有一个字符来表示。

d表示目录文件

-表示普通文件

b表示块设备文件比如内存,磁盘等设备

c表示字符型设备文件 比如显示器,猫等串口设备

s表示网络编程文件(socket文件)

p表示管道文件,用于防止多个程序同时访问一个文件引

   起错误

l表示链接文件

② 访问权限

  如 rwx-wxr-x 各字符含义如下:

  前3个字符表示文件所有者(u)对文件的访问权限

  中间3个字符表示文件组用户(g)对文件的访问权限

  后三个字符表示其它人对(o)对文件的访问权限

 

  r: 表示可读权限(或用4表示)

  w: 表示可写权限(或用2表示)

  x: 表示可执行权限(或用1表示)

  -: 表示文件对应的ugo没有该权限(或用0表示)

  

  补充:关于可执行权限,对于普通文件而言表示是否可以在内存中运行(如 脚本文件、二进制可执行文件);对于目录而言表示是否可以进入到该目录下(即使用cd命令)

③ 普通文件和目录文件的默认权限

       普通文件的默认权限是644,目录文件的默认权限是755其中74+2+1(r+w

         +x)5表示4+1(r+x)。这样目录文件的默认权限就是所有者具有读写执行的权     限有组用户和其它人具有读和执行的权限。

  计算法则:普通文件 666-umask=644 (默认umask=022)

目录文件 777-umask=755 (默认umask=022)

  自定义umask(例如自定义为222)

临时修改: 

    命令格式 umask value   

 [[email protected] 桌面]#umask 222

 

永久修改:分两种情况,第一种情况是永久修改所有用  户的umask值;第二种情况是只永久修改用户自己的umask值。

情况一:编辑文件/etc/profile(只在登录shell下有效),分别在第62行和第64行把umask值修改为222即可(修改完成后需要重启才会有效果);另外编辑文件/etc/bashrc(只在登录shell下有效),分别在第66行和第68行把umask值改为222即可。如下图所示:

    技术分享

      技术分享

    情况二:编辑文件~/bash_profile,在末尾追加一

  umask 222;另外编辑文件~/bashrc,在末尾追加一行    umask 222



二、 使用chmod修改文件的访问权限

① 方式一:使用符号参数,命令格式

  技术分享

     各符号含义:被授予权限者 u代表文件的所有者,g代表文件的所有组用户,o代表不是所有者和所有组用户的其他人,a代表所有的用户即包含u、g、o三者。

  操作符号:+表示给被授予权限者增加指定权限,-表示给被授予权限者减掉指定的权限,=表示对被授予权限者取消所有的权限后再指定新的指定的权限。

  被授予的权限:其中rwx分别表示用户对文件的读写和执行的权限。s表示用户的SUID和SGID权限,后边会详细介绍,ugo分别表示复制文件的所有者、所有组用户和其他人的权限给被授予权限者。

例子:给文件/tmp/aa的所有者增加执行权限

[[email protected] 桌面]#chmod u+x /tmp/aa

把文件/tmp/aa的所有组用户的执行权限去掉

[[email protected] 桌面]#chmod g-x /tmp/aa

把文件/tmp/aa的其它人用户的权限修改为只读

[[email protected] 桌面]#chmod o=r /tmp/aa

② 方式二:使用数字参数,命令格式

 chmod [权限] filename

  权限字段说明:该字段由4位数字组成,其中第一位表示文 件的SUID和SGID权限而且可以省略这一位只使用后三位数字;第二位数字表示文件的所有者的权限;第三位表示文件的所有组用户的权限;第四位表示文件的其它人的权限。其中在后三位数字中,每一位数字都在0-7之间,不同的数字表示不同的权限,可参见1)中的访问权限和默认权限两小节



三、 配置文件SUID和SGID权限

Linux中内核判断一个进程对资源的访问权限是通过这个进程的ID号来判断的包括uid和gid。当执行具有SUID权限的文件时,用户将以文件的所有者身份(即所有者uid)执行文件;当执行具有SGID权限的文件时,用户将以文件的组用户身份(即gid)执行文件。SUID的优先级大于SGID,即同时设置了两者,已SUID为准。命令执行如下:

① 方式一:使用符号参数,命令格式:

技术分享 

各符号含义:被授予权限者 u代表文件的所有者,g代表文件的所有组用户。

操作符号 +表示给被授予者增加权限,-表示给被授予者取消权限。

权限 s就表示SUID或SGID权限

 例子:给文件/tmp/aa增加SUID权限

 [[email protected] 桌面]#chmod u+s /tmp/aa

  给文件/tmp/aa增加SGID权限

 [[email protected] 桌面]#chmod g+s /tmp/aa

 查看效果,使用ll命令可以看到文件所有者和组用户的执行位置有s标志,其中小s表示文件所有者和组用户之前拥有x权限,相反大S表示之前没有x权限。

  [[email protected] 桌面]#ll /tmp/aa

             技术分享

② 方式二:使用数字参数,命令格式

     chmod [权限] filename 

这里权限字段的含义及内容和2)中方式二的情况完全一样,我们现在补充说明4位数字中的第1位数字。第一位数字的取值范围也是在0-7之间,其中SUID的权限用数字4表示,SGID的权限用数字2表示,sticky的权限用数字1表示,其他数字(3、5、6、7)是这三种数字的组合,例如5=4+1(即拥有SUID权限和sticky权限),另外数字0表示没有前面的三种权限。Sticky权限只对目录有效,当一个目录有sticky权限时,在该目录下创建的文件或目录只有文件或目录的所有者才能删除掉。

例子:把桌面上的目录a的权限改为7775(第一个数字7表示a同时拥有SUID、SGID和sticky权限)

[[email protected] 桌面]#chmod 7775 a 

查看目录a修改后的权限

[[email protected] 桌面]#ll

         技术分享

可以看到目录a的权限位中在所有者、所有组和其它人权限的执行位置分别是s、s、t,其中s就表示SUID和SGID权限,t就表示sticky权限。

SGID还有一个特点是当一个目录具备SGID权限时,在该目录下创建的子目录和文件将会自动继承父目录的所属组,而且子目录也会继承SGID权限。



四、 配置文件的ACL

相比于上面的访问权限控制,ACL(Access Control Lists)可以精确地控制哪位用户或哪个用户组访问哪个目录或文件的权限。

① 修改用户和用户组对目录或文件的ACL权限,命令格式:

  setfacl -m [u|g|mask]:[username|groupname]:权限 filename

② 查看用户和用户组对目录或文件的ACL权限,命令格式:

  getfacl [options] filename

③ 删除用户和用户组对目录或文件的ACL权限,命令格式:

  清空所有用户和用户组对某个目录或文件的ACL配置 

  setfacl -b filename

  删除指定用户或用户组对某个目录或文件的ACL配置 

 setfacl -x [u|g]:[username|groupnamefilename

例子:以/tmp/aaa目录为例

技术分享 

任务一:分别给用户zhangsan和用户组caiwu分配读写执行和读执行的权限,然后把mask改为只读权限

[[email protected] tmp]#setfacl -m u:zhangsan:rwx aaa

[[email protected] tmp]#setfacl -m g:caiwu:r-x aaa

[[email protected] tmp]#setfacl -m mask::r aaa

任务二:查看目录/tmp/aaa/的ACL

[[email protected] tmp]#getfacl aaa

技术分享 

结果注解:第1-3行分别是目录aaa的名称、所有者、所属组; 第4行是目录的SUID、SGID和sticky标志;

 第5、7、10行分别是目录的所有者、所属组、other用户所拥有的权限;

第6、8行分别是我们给用户zhangsan和用户组caiwu分配的对目录/tmp/aaa/的权限;

第9行mask对目录的权限表示用户和用户组对目录所拥有的最大权限,注意mask的限制只对指定了ACL规则的一般用户和用户组有效。

由于用户zhangsan和目录的所属组以及用户组caiwu对目录aaa的权限值都超过了mask权限,所以在第6、7、9行右侧会有#effective:r--,表示他们尽管有很大的权限,但受mask的限制,他们的有效权限只能是r(即只读)。

任务三:先删除目录/tmp/aaa/的ACL中用户zhangsan的访问权限,再删除目录/tmp/aaa的ACL中所有用户和用户组的访问权限

[[email protected] tmp]#setfacl -x u:zhangsan aaa

[[email protected] tmp]#setfacl -b aaa



五、 配置文件的隐藏属性

在Linux中为了防止关键文件或目录被修改可以设置一些隐藏的属性,所谓隐藏是指我们用上边查看权限的命令是看不到这些特殊权限的。

① 给普通文件或目录文件设置隐藏属性,命令格式:

  chattr [+|-|=][options] filename

+,-,=分别是实效、激活、指定属性

部分选项对应的属性如下:

a 当普通文件有a属性时,只允许向该文件的后面追加内容,而不允许任何进程对文件进行修改删除;当目录文件有a属性时,只允许在该目录下创建文件和修改文件内容,而不允许任何进程在该目录文件下删除文件。

 c 当文件有c属性时,文件会被系统自动压缩存放到磁盘上,在用户读取文件之前,数据会先被解压缩,然后呈现给用户;在用户修改文件之后,内容先被压缩,然后再存放到磁盘。

 d 用dump进行文件系统备份时,忽略这个文件。

 i 当普通文件有i属性时,不允许对该文件有任何修改;当目录文件有i属性时,只允许在该目录下创建文件和修改文件内容,而不允许任何进程在该目录文件下创建和删除文件。

 s 当文件有s属性时,在该文件被删除时,存储文件的块区域会被0填充。

 u 当文件有u属性时,在该文件被删除时,存储文件的块区 域会被系统保留,以便日后恢复。

 A 当文件有属性A时,该文件的最后访问时间不会被系统修 改。

 S 当文件有属性S时,当应用程序对这个文件作出修改时, 修改会被立刻同步到磁盘中。

② 查看文件或目录的隐藏属性

  使用lsattr命令可以查看文件或目录的隐藏属性

 例子:给目录/tmp/下的子目录dir1和file1添加a属性,然后 查看配置结果:

 [[email protected] tmp]#chattr +a dir1

 [[email protected] tmp]#chattr +a file1

 [[email protected] tmp]#lsattr

 技术分享


本品博文所写内容如有不正确或不合理之处,还请各位博友指正,感激不尽


本文出自 “李高全” 博客,请务必保留此出处http://lgq258.blog.51cto.com/9766325/1757298

以上是关于文件系统权限管理的主要内容,如果未能解决你的问题,请参考以下文章

关于文件系统权限的管理

管理员权限删除文件

Linux文件系统管理之一(文件权限管理)

Linux文件系统管理之一(文件权限管理)

ubuntu12.04系统用户权限管理

Linux系统下用户以及权限管理