您的位置:首页 > 运维架构 > Linux

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

2016-03-27 20:54 357 查看
声明系统版本: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表示) -: 表示文件对应的u或g或o没有该权限(或用0表示) 补充:关于可执行权限,对于普通文件而言表示是否可以在内存中运行(如 脚本文件、二进制可执行文件);对于目录而言表示是否可以进入到该目录下(即使用cd命令)。③ 普通文件和目录文件的默认权限 普通文件的默认权限是644,目录文件的默认权限是755。其中7表示4+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|groupname] filename例子:以/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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: