文件和目录权限

1、Linux权限介绍
2、Linux文件属性
3、如何改变Linux文件属性权限
4、新建文件默认权限

1、Linux权限介绍

Linux是个多人多任务系统。而为了让各个用户具有较保密的文件数据,因此文件的权限管理就比较重要了。
  Linux一般将文件存储的身份分为三个类别,分别是owner/group/other,而且三种身份各有read/write/excude等权限。

Linux系统中,默认情况下:
  用户相关信息存放在/etc/passwd;密码存放在/etc/shadow;组名都存放在/etc/group。

文件权限:
  r:可使用文件查看类工具获取其内容
  w:可修改其内容
  x:可以把此文件提请内核启动为一个进程

目录权限:
  r:可以使用ls查看此目录中文件列表
  w:可在此目录中创建文件,也可删除此目录中的文件
  x:可以cd进入此目录,也可以执行目录里面的文件。执行是基础权限。

目录的执行权限是基础权限:
  - ls命令需要r和x权限,否则看不了文件的元数据,只能看到文件明名,也无法读目录里面的文件
  - 创建和删除目录的文件必须同时有目录的w和x权限

X(x权限特殊形式)
  对于目录,给目录执行权限。
  对于文件如果文件任意一种角色有执行权限,那么文件会被加上执行权限;如果文件三种角色都没有执行权限,那么X不会给该文件执行权限

我们想给某个目录下所有子目录执行权限,而不给目录下的文件执行权限,就用到X。
  例子:chmod -R o+X /app

注意:判断一个用户能否删除文件,是看该用户对于文件所在的目录的权限,而不是用户对于文件的权限。因为删除某个文件,本质上是删除文件所在目录上的文件名数据。

2、Linux文件属性

 [root@CentOS7 ~]#ls -al                  
          dr-xr-x---. 14 root root 4096 May 18 10:18 .
          dr-xr-xr-x. 18 root root  244 May 17 14:50 ..
          -rw-------.  1 root root 1758 May 17 14:51 anaconda-ks.cfg
          -rw-------.  1 root root  962 May 18 10:18 .bash_history
          -rw-r--r--.  1 root root   18 Dec 29  2013 .bash_logout
          -rw-r--r--.  1 root root  176 Dec 29  2013 .bash_profile
          -rw-r--r--.  1 root root  176 Dec 29  2013 .bashrc
          drwx------. 11 root root  222 May 17 15:05 .cache
          drwx------. 17 root root 4096 May 17 16:34 .config

文件的属性有七个字段,其中第一个字段分别代表文件的类型以及owner/group/other三种身份的read/write/execude权限。

系统判断某个用户的权限时,匹配的顺序是:是否文件所有者>是否属于文件所属组>other。
  假如用户已经匹配上某种身份,不会再去看其他身份的权限。
  例如这个文件
  ----r--r--. 1 luo luo 176 Dec 29 2013 lizi
  这个文件中,luo用户没有任何读写执行权限。 因为luo用户是文件的owner,权限是---,因此系统不会看组的权限,也不会看other的权限。

root帐号有所有文件的读写权限。
  一个文件如果所有角色都没有执行权限,那么root也没有执行权限。
  一个文件如果某个角色有执行权限,那么root也有执行权限。(root可以蹭权限)

3、如何改变Linux文件属性权限

chgrp
  改变文件所属群组(普通用可以把属于自己的文件改成自己所在的组)
  chgrp [OPTION]... GROUP FILE...
  chgrp [OPTION]... --reference=RFILE FILE...
  -R 递归

chown
  改变文件拥有者(普通用户无权限把属于自己的文件权限改成他人的)
  chown [OPTION]... [OWNER][:[GROUP]] FILE...
  用法:
  OWNER
  OWNER:GROUP
  :GROUP
  命令中的冒号可用.替换
  -R: 递归
  chown [OPTION]... --reference=RFILE FILE...

chmod
  改变文件的权限
  改变文件权限的方法有两种:分别可以用数字或者符号进行权限的变更。

   (1)数字类型改变文件权限
       权限分数对照如下:
       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
       例子:chmod 777 .config   
      //把.config文件的owner/group/other的权限改为rwxrwxrwx

   (2) 符号类型改变文件权限
    u、g、o分别代表user、group、other,此外a代表all即全部身份而    
    rwx分别带表读写执行权限。-表示去除,+表示增加,=表示赋予。
    例子:chmod g-wr .config      //e.config的group增加w和r权限

4、新建文件默认权限

我们创建一个文件,系统会默认设置文件的权限值,umask就是用来设置新文件权限的掩码命令。
umask [选项] [掩码]
  当新目录或者文件被创建时,其最初的权限由umask决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。

umask:从777(目录)或者666(文件)中,将文件对应的权限位去掉,得到默认权限。
  算法:将umask取二进制反码,和777或者666进行与运算。

例子:umask为021的时候,系统创建新文件的权限计算如下:
  021---->000010001
  反码--->111101110
  666---->110110110
  权限--->110100110--->646--->rw-r--wr

umask: 查看
  umask #: 设定
  umask 002
  umask –S 模式方式显示
  umask –p 输出可被调用
  全局设置: /etc/bashrc 用户设置: ~/.bashrc

5、linux文件的特殊权限SUID、SGID、Sticky

(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
  (2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
  (3) 进程访问文件时的权限,取决于进程的发起者
   - 进程的发起者,同文件的属主:则应用文件属主权限
   - 进程的发起者,属于文件属组;则应用文件属组权限
   - 应用文件“其它”权限

SUID和GUID作用在可执行的二进制程序文件上

SUID:让本来没有执行该文件的用户运行这个程序时,继承了程序所有者的权限,从而可以访问没有权限访问的资源。
权限设定:
  chmod u+s FILE
  chmod u-s FILE
  例如普通用户是没有对shadow的读写权限的,但当普通用户使用passwd时,继承了passwd这个程序的所有者root的权限,从而有了对shadow文件修改的权限。(当然,普通用户只能修改自己的密码)

GUID:让本来没有执行该文件的用户运行这个程序时,继承了程序所属组的权限,从而可以访问没有权限访问的资源。

当SUID作用在目录下的作用另有含义:新建文件的所属组自动继承父目录所属组。

Sticky:作用在目录下,只有文件所有者和root才能删除该文件。
sticky 设置在文件上无意义
权限设定:
chmod o+t DIR
chmod o-t DIR

推荐阅读更多精彩内容