码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2016-03-28 07:19:28      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:linux文件权限管理   suid和sgid   文件acl   文件隐藏属性   

一、 查看文件权限

使用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   

 [root@localhost 桌面]#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的所有者增加执行权限

[root@localhost 桌面]#chmod u+x /tmp/aa

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

[root@localhost 桌面]#chmod g-x /tmp/aa

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

[root@localhost 桌面]#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权限

 [root@localhost 桌面]#chmod u+s /tmp/aa

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

 [root@localhost 桌面]#chmod g+s /tmp/aa

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

  [root@localhost 桌面]#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权限)

[root@localhost 桌面]#chmod 7775 a 

查看目录a修改后的权限

[root@localhost 桌面]#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改为只读权限

[root@localhost tmp]#setfacl -m u:zhangsan:rwx aaa

[root@localhost tmp]#setfacl -m g:caiwu:r-x aaa

[root@localhost tmp]#setfacl -m mask::r aaa

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

[root@localhost 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中所有用户和用户组的访问权限

[root@localhost tmp]#setfacl -x u:zhangsan aaa

[root@localhost 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属性,然后 查看配置结果:

 [root@localhost tmp]#chattr +a dir1

 [root@localhost tmp]#chattr +a file1

 [root@localhost tmp]#lsattr

 技术分享


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


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

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

标签:linux文件权限管理   suid和sgid   文件acl   文件隐藏属性   

原文地址:http://lgq258.blog.51cto.com/9766325/1757296

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!