标签: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表示)
-: 表示文件对应的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
标签:linux文件权限管理 suid和sgid 文件acl 文件隐藏属性
原文地址:http://lgq258.blog.51cto.com/9766325/1757296