> Linux教程 > Linux学习 >

linux 文件权限问题

共显示了七列信息,从左至右依次为:权限、文件数、归属用户、归属群组、文件大小、创建日期、文件名称
d :第一位表示文件类型
  d 文件夹
  - 普通文件
  l 链接
  b 块设备文件
  p 管道文件
  c 字符设备文件
  s 套接口文件
 
rwx :第2-4位表示这个文件的属主拥有的权限。r是读、w是写、x是执行
 
r-x :第5-7位表示和这个文件属主所在同一个组的用户所具有的权限
 
r-x :第8-10位表示其他用户所具有的权限

常用的linux文件权限:

444 r--r--r--
600 drw-------
644 drw-r--r--
666 drw-rw-rw-
700 drwx------
744 drwxr--r--
755 drwxr-xr-x
777 drwxrwxrwx

1、从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限。

 一共有10位数,其中:最前面那个 - 代表的是类型

  中间那三个 rw- 代表的是所有者(user)

  然后那三个 rw- 代表的是组群(group)

  最后那三个 r-- 代表的是其他人(other)

而具体的权限是由数字来表示的,读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示;

 

2、通过4、2、1的组合,得到以下几种权限:

0(没有权限);4(读取权限);5(4+1 | 读取+执行);6(4+2 | 读取+写入);7(4+2+1 | 读取+写入+执行)

以755为例:
1-3位7等于4+2+1,rwx,所有者具有读取、写入、执行权限;
4-6位5等于4+1+0,r-x,同组用户具有读取、执行权限但没有写入权限;
7-9位5,同上,也是r-x,其他用户具有读取、执行权限但没有写入权限。


3. 改变权限, chmod

权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

3.1 数字类型改变档案权限

Linux档案的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限

举例:档案的权限字符为 -rwxrwxrwx  这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

r:4   w:2   x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:

owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1 = 7

others= --- = 0+0+0 = 0

所以我们设定权限的变更时,该档案的权限数字就是770啦!变更权限的指令chmod的语法是这样的:

[root@www ~]# chmod [-R] xyz 档案或目录 
选项与参数: 
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。 
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更

举例来说,如果要将.bashrc这个档案所有的权限都设定启用,那么就下达:

[root@www ~]# ls -al .bashrc 
-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc 
[root@www ~]# chmod 777 .bashrc 
[root@www ~]# ls -al .bashrc 
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

那如果要将权限变成 -rwxr-xr-- 呢?那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下达:

[root@www ~]# chmod 754 filename

3.2 符号类型改变档案权限

还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x啰!也就是可以使用底下的方式来看:

来实验一下吧!假如我们要设定一个档案的权限成为『-rwxr-xr-x』时,基本上就是:
o user (u):具有可读、可写、可执行的权限;
o group 与 others (g/o):具有可读不执行的权限。

所以就是:

[root@www ~]# chmod u=rwx,go=rx .bashrc 
# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格符! 
[root@www ~]# ls -al .bashrc 
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc

那么假如是『 -rwxr-xr-- 』这样的权限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』来设定。此外,如果我们知道原先的文件属性,而我只想要增加.bashrc这个档案的每个人均可写入的权限, 那么我就可以使用:

[root@www ~]# ls -al .bashrc 
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc 
[root@www ~]# chmod a+w .bashrc 
[root@www ~]# ls -al .bashrc 
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:

[root@www ~]# chmod a-x .bashrc 
[root@www ~]# ls -al .bashrc 
-rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc

====================================以下是扩展============================

-特殊权限
        a. SUID(s/4)
         应用在可执行文件上(二进制的文件),任何用户执行文件时都以文件拥有者的身份执行
        b. SGID(s/2)
         应用在可执行文件上(二进制的文件),任何用户执行文件时都以文件拥有组成员身份执行
        c. SBIT(t/1)
        应用在目录文件上,在目录中删除对象时,只能删除用户自己拥有的对象

exp:

 

[html] view plain copy
 
 
 
  1. drwxr--r-- 2 wmj wmj       4096 12月 13 17:13 2016.12.13-17.13.48  
  2. -rwxr--r-- 1 wmj wmj         57 11月  3 18:47 5h.sh  
  3. -rwxr--r-- 1 wmj wmj        271 12月 13 12:15 ado.sh  
设置属性值 :chmod u+s,g+s,o+t 2016.12.13-17.13.48 5h.sh ado.sh

 

 

[html] view plain copy
 
 
 
  1. drwsr-Sr-T 2 wmj wmj       4096 12月 13 17:13 2016.12.13-17.13.48  
  2. -rwsr-Sr-T 1 wmj wmj         57 11月  3 18:47 5h.sh  
  3. -rwsr-Sr-T 1 wmj wmj        271 12月 13 12:15 ado.sh  

====================================以下是扩展============================

 

    文件的粘滞位(sticky)位是作什么用的?
    普通文件的sticky位会被linux内核忽略,目录的sticky位表示这个目录里的文件只能被owner和root删除

    粘着位(Sticky bit)
    如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后,其它用户就不可以删除不属于他的文件和目录。但是该目录下的目录不继承该权限,要再设置才可使用。

[objc] view plain copy
 
 
 
  1. # chmod 1770 xxx  
    举一个linux下的常见目录来做例子,也就是 /tmp 目录来说一下粘连位的作用。
[objc] view plain copy
 
 
 
  1. #ls -dl /tmp  
  2. drwxrwxrwt 4 root    root  .........  
    注意other位置的t,这便是粘连位。
    我们都知道,/tmp常被我们用来存放临时文件,是所有用户。但是我们不希望别的用户随随便便的就删除了自己的文件,于是便有了粘连位,它的作用便是让用户只能删除属于自己的文件。

    那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 假如本来在该位上有x, 则这些特别标志 (suid, sgid, sticky) 显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T) 。
[objc] view plain copy
 
 
 
  1. 3)粘着位(sticky)  
  2.   
  3. eg:  
  4.   
  5. chmod 777 abc  
  6.   
  7. chmod +t abc  
  8.   
  9. 等价于  
  10.   
  11. chmod 1777 abc  
    在以前旧的系统当中,如果一个程序文件一旦设置了粘着位,
    那么当该程序中止的时候他的所有指令段将被保存到系统的交换分区当中,
    再次运行时可以更快的调入系统.

    不过现在的操作系统已经不再使用这种功能了.
    但这并不表示这一功能已经完全被废弃.
    当一个目录设置为粘着位时,它将发挥特殊的作用,

    即当一个目录被设置为"粘着位"(用chmod a+t),则该目录下的文件只能由
    一、超级管理员删除
    二、该目录的所有者删除
    三、该文件的所有者删除
    也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。

exp:

drwxrwsrwt+  21 root root 12288 4月   1 14:37 share


(责任编辑:IT)