众所周知,linux是多用户多任务的操作系统,linux有很多用户和用户组,这就决定某些文件不想让某个用户读取或者写入,所以呢我们要建立文件权限的概念。
1.查看文件属性:
以第一列数据为例我们来分析一下:
- rw-r--r-- 1 root root 2229 Jan 20 2015 anaconda-ks.cfg
文件类型文件权限 连接数文件所属用户 文件所属组 文件大小 最后一次修改日期文件名称
第一个字符是文件类型 - 表示文件 ,d 表示目录 , l 表示连接文件 , b 表示设备文件里边可供存储的接口块设备, c 表示设备文件里的串口设备(如键盘,鼠标等)
第二列为文件权限分user、group、others3种身份,我们用u, g,o来代表三种身份,每个用户有读取(r),写入(w),执行(x)三种权限
第三列为连接数,当是文件时,表示文件的连接数(一般为硬链接)至于为什么是硬链接不是软连接这里暂不做介绍,明白软硬链接的区别就懂了。当是目录时表示该目录下文件的个数
2.修改文件属性与权限:
chown username filename # 修改文件所有人
chgrp username filename # 修改文件所属组
chmod ugo+-=rwx filename #修改文件权限
改变文件所有者:
<strong>[root@burgess ~]# chown bin test #将文件所有者改为bin
[root@burgess ~]# ll test
-rw-r--r-- 1 bin root 0 Aug 2 15:30 test
[root@burgess ~]# chown root:root test #将文件所有人和所属组改为root
[root@burgess ~]# ll test
-rw-r--r-- 1 root root 0 Aug 2 15:30 test</strong>
改变文件所属组:
<span style="color:#666666"><strong>[root@burgess ~]# chgrp -R dirname/filename
参数:-R 表示递归,连同子目录下的文件目录
[root@burgess ~]# ll test
-rw-r--r-- 1 root users 0 Aug 2 15:30 test</strong></span>
改变文件权限:
文件的权限数值表示为 r :4 , w: 2 , x:1
每种身份的权限分数是要累加的,例如当某个文件权限是【-rwxrw-r--】则相应的分数为:
owner = rwx = 4+2+1 = 7
group = rw- = 4+2+0 = 6
others = r-- = 4+0+0 = 4
既可以使用数字也可以用符号进行权限的修改
<strong>[root@burgess ~]# ll tcps.c
-rw-r--r-- 1 root root 1018 May 1 14:31 tcps.c
[root@burgess ~]# chmod u=rwx,go=rx tcps.c #修改文件权限
[root@burgess ~]# ll tcps.c
-rwxr-xr-x 1 root root 1018 May 1 14:31 tcps.c
[root@burgess ~]# chmod a-x tcps.c
[root@burgess ~]# ll tcps.c
-rw-r--r-- 1 root root 1018 May 1 14:31 tcps.c
[root@burgess ~]# chmod 644 tcps.c
[root@burgess ~]# ll tcps.c
-rw-r--r-- 1 root root 1018 May 1 14:31 tcps.c</strong>
3.文件默认权限umask:
umask是指目前用户在创建新文件或者目录时的默认权限值
[root@burgess ~]# umask
0022
[root@burgess ~]# umask -S
u=rwx,g=rx,o=rx
umask的后三位与一般权限有关。第一位与特殊权限有关暂时不考虑
用户创建“文件”时,则默认没有可执行权限(x),即只有r、w,也就是最大为666 【-rw-rw-rw-】
若用户新建“目录”,则由于x与是否可以进入目录有关,因此默认所有权限开放777【drwxrwxrwx】
umask值是“默认值要减掉的权限”,r、w、x分别是4、2、1也就是说要拿掉读权限就是4,拿掉写权限就是2
默认root用户umask值为022,也就是说所属用户并没有被拿掉任何权限,group和others被拿掉了2(也就是写权限)
新建文件时:(-rw-rw-rw-)- ( -----w--w- ) ==>-rw-r--r--
新建目录时:(drwxrwxrwx)- (d----w--w-)==>drwxr-xr-x
umask对新建文件与目录的默认权限有很大关系,在计算时尽量遵照上面的按符号计算的方式来算,不可直接用数值进行计算
假设umask为003,去掉的权限应该是-------wx,因此
新建文件:(-rw-rw-rw-)-(-------wx)= -rw-rw-r--
新建目录:(drwxrwxrwx)-(--------wx) = drwxrwxr--
但是要用文件默认属性666与目录默认属性777来与umask进行想减运算这个时候就会有问题
文件:666 - 003 = 663就变成了-rw-rw-wx显然不对,原本文件就已经去除x的默认属性了,这里又突然冒出来了
所以在进行运算是最好采用符号计算。
修改umask值
<strong>vim /etc/bashrc #71行是普通用户的更改,73是超级用户的更改
vim /etc/profile #60行是普通用户的更改,62是超级用户的更改
source /etc/bashrc /etc/profile ##让更改立即生效</strong>
4.文件隐藏属性:
chattr 和 lsattr
chattr设置文件隐藏属性用法:
chattr 【+-=】 【ASacdistu】 filename/dirname
a 属性设置之后,这个文件只能增加数据,不能删除也不能修改数据
i 属性可以使文件不能删除改名
[root@burgess ~]# chattr +i attrtest
[root@burgess ~]# rm -f attrtest
rm: cannot remove 'attrtest': Operation not permitted #加上i属性后文件不可删除
[root@burgess ~]# lsattr attrtest #查看隐藏属性
----i----------- attrtest
注意:chattr命令只能在Ext2/Ext3的文件系统上面生效
5.文件特殊权限:
<1> SUID
u+s###针对文件,文件记录动作在执行时是以文件所有人身份执行的,与是谁发起的无关
chmod u+s file
chmod 4777 file
<2> SGID
g+s##对于目录,在目录中创建的文件都自动归属到目录所在组,
##对于二进制文件,文件内记录的程序在执行时和执行者的组身份没有关系,而是以二进制文件的所有组的身份执行的
chmod g+s file|directory
chmod 2777 file|directory
<3>sticky bit
o+t###只针对目录有效,当一个目录上有t权限时,这个目录中的文件只能被文件拥有者删除
t=1
chmod o+t directroy
chmod 1777 directory