首页 > 代码库 > 文件的权限

文件的权限

1.文件与目录属性

# ls -l filename###文件属性查看

-rwxr-xr-x. 2 root root     6 Oct  2 09:42    file

第一列:文件类型文件权限

如果这一位上有点,那只能证明系统开启过SELinux,或者该文件在开启SELinux之前

就已经存在;如果这一位上面是+号那么可以证明是该文件具有acl权限控制。

第二列:文件副本个数(硬链接数)

第三列:文件所有人

第四列:文件所有组

第五列:大小

第六列:文件最后的访问时间

第七列:文件

# ls -ld directory###目录属性查看

drwxr-xr-x    3       kiosk kiosk    33      Aug 27 09:47 Documents

第一列:类型权限

第二列:子目录个数(包括隐藏目录)

第三列:目录所有人

第四列:目录所有组

第五列:目录中的文件大小

第六列:目录中最后一次内容变化时间

第七列:目录名字

 

关于文件的权限:

强制位与冒险位(suidsgidstickty

1suid  数字为4

说明:任何用户在执行拥有suid权限的命令时都会以命令用者的身份拥有

添加与去除的方法同添加去除普通选项 

      chmod  u+s  添加suid权限(往命令上添加)

           chmod  u-s  删除suid权限

注:suid作用到可执行文件上,作用到目录上没有意义        

2sgid   数字为2

说明:任何用户在拥有sgid权限的目录下创建的文件都要继承该目录的组

添加与删除方法:

      chmod g+s  添加sgid权限

            chmod g-s  删除suid权限

  注:sgid作用到目录上,作用到文件上没有意义,cp过去的文件也会被作用        

 

3sticky t  数字为1

说明:任何用户在拥有t权限的目录下创建的文件,只能该用户删除,其他人无权删除

      添加与去除:

           chmod o+t 添加t权限

           chmod o-t 添加t权限

       注:sticky作用到目录上,作用在文件上没有意义

强制位与冒险位同样可以使用数字模式添加或去除;添加和去除的方法为在普通数字权限前加上强制位与冒险位的数字权限。 例如:chmod  4777 cat

 

 

关于文件的类型

-:普通文件

d:文件目录

b:块设备文件

[root@orser ~]# ls -l /dev/sda1

brw-rw----. 1 root disk 8, 1 Apr 25 19:41 /dev/sda1

c:字符设备文件

[root@orser ~]# ls -l /dev/console 

crw-------. 1 root root 5, 1 Apr 25 19:41 /dev/console

l:连接文件(软连接)

[root@orser ~]# ls -l /dev/fd

lrwxrwxrwx. 1 root root 13 Apr 25 19:41 /dev/fd -> /proc/self/fd

p:管道文件:确切的说是FIFO(先进先出),也可以说是有名管道,跟管道稍有区别
s:套接字文件

注:

1)块设备与字符设备:

其最大的区别在于是否可以被随机访问,块设备可以被随机访问,字符设备不可以被随机访问。

2)管道:

管道是一种特殊文件,也可以说是一种特殊的虚拟文件,因为他只是在内存中开辟了一块区域。通过对两个进程的索引节点inode进行关联,使得两个进程间传输。不过管道属于半双工,也就是数据只能流向一个方向。

3硬链接与软链接区别

1)一个文件分别做硬链接和软链接,当删除原文件时,软链接失效而硬链接依然可用。

2)软链接与原文件的inode号不同,而硬链接与原文件的inode号相同

3)硬链接不能跨设备做,而软链接可以

测试软链接和硬链接的区别

[root@orser orser]# touch link  //创建源文件

[root@orser orser]# ln -s link links  //创建软链接

[root@orser orser]# ln link linkh  //创建硬链接

[root@orser orser]#ls -li  //查看inode号和详细信息

137901 -rw-r--r--. 2 root root 11 Apr 25 23:13 link

138760 lrwxrwxrwx. 1 root root  4 Apr 25 23:14 links -> link

137901 -rw-r--r--. 2 root root 11 Apr 25 23:13 linkh

以上可以看出软链接的inode号与原文件不同,硬链接的inode号与原文件相同

 

[root@orser orser]# cat link

kkkskdadsf

[root@orser orser]# cat links

kkkskdadsf

[root@orser orser]# cat linkh

kkkskdadsf

[root@orser orser]# rm -f link

[root@orser orser]# cat links

cat: links: No such file or directory

[root@orser orser]# cat linkh

kkkskdadsf

以上可以得出当原文件被删除时,软链接不可用,硬连接可用。

 

[root@orser orser]# ln -s /home/text linkss

[root@orser orser]# ls -l

lrwxrwxrwx. 1 root root    10 Apr 26 15:17 linkss -> /home/text

[root@orser orser]# ln /home/text linkhh

ln: creating hard link `linkhh‘ => `/home/text‘: Invalid cross-device link

以上可以看出软链接可以跨设备,而硬链接不能跨设备

 

umask默认权限反掩码:

当我们在创建文件或者目录的时候都会有一个默认权限,那么这个默认权限是怎么来的,就是通过umask计算得来的,一般root用户的umask值为022,普通用户的umask值为002。那么系统是怎么通过umask计算出创建文件或目录的权限的呢?
1)创建目录

取得777中每一位的二进制码(111 111 111

取得umask中每一位的二进制码(000 010 010

umask中每一位的二进制码取反(111 101 101

777中每一位的二进制码和取反后的umask中每一位的二进制码做与运算(111 101 101)即755.

如果上面的国语繁琐,可以直接使用下列步骤

777=rwxrwxrwx

022=----w--w-

两者相减就是了。

2)创建文件

和创建目录的算法相同,只不过创建文件是用666umask做运算。

因为文件默认是不考虑执行权限的,linux系统认为这很危险

 

测试与SELinux的关系
[root@orser orser]# sestatus
SELinux status:                 disabled

[root@orser orser]# touch se

[root@orser orser]# ls -l se

-rw-r--r-- 1 root root 0 Apr 26 17:58 se

[root@orser orser]# sestatus

SELinux status:                 enabled

[root@orser orser]# ls -l se

-rw-r--r--. 1 root root 0 Apr 26 17:58 se
经过测试发现当SELinux开启时创建文件此位会有点出现;当SELinux关闭时创建文件此位不会出现点,但是当再次开启SELinux时该文件此位置又会出现点。

 

测试与ACL的关系

[root@orser orser]# touch aclt

[root@orser orser]# ls -l aclt 

-rw-r--r--. 1 root root 0 Apr 26 18:33 aclt

[root@orser orser]# setfacl -m user:oracle:--x aclt

[root@orser orser]# ls -l aclt 
-rw-r-xr--+ 1 root root 0 Apr 26 18:33 aclt

经过测试我们发现当此文件设置了acl权限的时候这一位上变成了+号。

 

2.文件用户组更改

chown用户名称文件###更改文件所有人

chgrp组名称文件###更改文件所有组

chown -R 用户目录###更改目录本身以及目录中子文件的所有人

chgrp -R 组名目录###更改目录本身以及目录中子文件的所有组

 

3.权限的识别

<1>#ls -l2-10字符为文件权限

 rwxr-xr-x

 用户权限组成员权限其他用户权限

<2>权限种类

r:

   r权限针对文件,表示可以查看文件内容

   r权限针对目录,表示可以ls查看目录中存在的文件

w:

   w权限针对文件,表示可以更改文件的内容

   w权限针对目录,表示是否可以删除目录中的子文件或子目录

x:

   x权限针对文件,表示是否可以开启文件当中记录的程序

   x权限针对目录,表示是否可以进入目录中

 

# chmod u|g|o+-r|w|x###改权限

u=rwx=7 | g=rwx=7 | o=rwx=7

  421

u=rw-=6 | g=r--=4 | o=r--=4###644

r=4,w=2,x=1,-=0

rwx=7,rw-=6,r-x=5,r--=4,-wx=3,-w-=2,--r=1,---=0

 

练习:

<1>新建用户组:shengchan,caiwu,jishu

<2>新建用户要求如下:

tomshengchan组的附加用户

harrycaiwu组的附加用户

leojishu组的附加用户

新建admin用户,此用户不属于以上提到的三个部门

<3>新建目录要求如下:

/pub目录为公共存储目录对所有用户可以读,写,执行

/sc目录为生产部存储目录只能对生产部人员可以写入

/cw目录为财务部存储目录只能对财务部人员可以写入

# for i in shengchan caiwu jishu;do groupadd $i && echo $i is ok;done

# useradd -G shengchan tom

# useradd -G caiwu harry

# useradd -G jishu leo

# useradd admin

# chmod 777 /pub/

# chgrp shengchan /sc/

# chgrp caiwu /cw/

# chmod 770 cw/

# chmod 770 sc/

# ll -d pub/ sc/ cw/

 

4.文件默认权限

umask:显示系统预留权限值

# vim /etc/bashrc###71行是普通用户更改,73是超级用户更改

# vim /etc/profile###60行是普通用户更改,62是超级用户更改

# source /etc/bashrc /etc/profile#让更改立即生效

 

5.特殊权限

stickyid:强制位

   o+t:只针对目录,当一个目录上有t权限时,此目录中的文件只能被文件拥有者删除

   chmod o+t directory (t=1) <===> chmod 1(777) directory

sgid:粘制位

   g+s:针对目录时,在目录中创建的文件都自动归属到目录所在组;针对二进制文件时,文件记录的程序在执行时与执行者的组身份没关系,而是以二进制文件的所有组身份执行的

   chmod g+s file | directory <===> chmod 2(777) directory

suid:冒险位

   u+s:针对文件,文件记录动作在执行时是以文件所有人身份执行的,与谁发起无关

   chmod u+s file <===> chmod 4(777) file

 

练习:

<1>新建用户组:shengchan,caiwu,jishu

<2>新建用户要求如下:

tomshengchan组的附加用户;

harrycaiwu组的附加用户;

leojishu组的附加用户;

新建admin用户,此用户不属于以上提到的三个部门;

<3>新建目录要求如下:

/pub目录为公共存储目录对所有用户可以读,写,执行,但用户只能删除属于自己的文件;

/sc目录为生产部存储目录只能对生产部人员可以写入,且生产部人员所建立的文件都自动归属到shengchan组中;

/cw目录为财务部存储目录只能对财务部人员可以写入,且财务部人员所建立的文件都自动归属到caiwu组中;

<4>admin用户能用/mnt/touch工具在/sc目录和/cw目录中任意建立文件,但不能删除文件

 

# for i in shengchan caiwu jishu;do groupadd $i && echo $i is ok;done

# useradd -G shengchan tom

# useradd -G caiwu harry

# useradd -G jishu leo

# useradd admin

# mkdir /pub /sc /cw

# chmod 1777 /pub

# chgrp caiwu /cw/

# chmod 770 /cw/

# chgrp shengchan /sc/

# chmod 770 /sc/

# cp /bin/touch /mnt

# chmod 711 /mnt/touch

# chmod u+s /mnt/touch

[root@localhost ~]# su - admin

[admin@localhost ~]$ /mnt/touch /sc/h1

[admin@localhost ~]$ /mnt/touch /cw/h2

[admin@localhost ~]$ logout

[root@localhost ~]# ls /sc/

h1

[root@localhost ~]# ls /cw/

h2

umask  推算一下建立的目录的默认权限,和创建文件默认权限,学413 被这个一下搞混了,今天彻底觉悟了,以下是个人解决方法,希望对各位有帮助

 

如果umask 121 我们怎样算知道创建默认目录的权限呢? 创建 文件的默认权限的?

目录为: 777

文件为: 666

目录权限为: 777 - 121  

rwx  rwx  rwx       

   |相减|

--x   -w-  --x   

  |等于|

rw-  r-x  rw

==============================================================================================

文件权限为: 666 - 121

rw-  rw-  rw-          #个人总结:比如: x 权限:相减,上面没x下面有x,消掉 ,上面有x,下面有x 消掉,上面有x下面没有x,继承

    |相减|

--x   -w-  --x   

   | 等于|

rw-   r--  rw 


参考博客:http://blog.itpub.net/29621173/viewspace-1150127/

本文出自 “腹有诗书气自华” 博客,请务必保留此出处http://11451283.blog.51cto.com/11441283/1846494

文件的权限