权限管理

权限管理

在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

我们先来看看文件的属性:

zz.png

权限:

r:可获取文件数据(读取文件)

w:可修改文件的数据(写入数据)

x:可以把此文件提请内核启动为一个进程 (执行)

文件的权限主要针对三类对象进行定义: 

owner: 属主, u 

group: 属组, g 

other: 其他, o 

通过设定权限可以从以下三种访问方式限制访问权限:

  只允许用户自己访问;

  允许一个预先指定的用户组中的用户访问;

  允许系统中的任何用户访问。

一个文件或目录可能有读、写及执行权限。当创建一个文件时,系统会自动地赋予文件所有者读和写的权限,这样可以允许所有者能够显示文件内容和修改文件。文件所有者可以将这些权限改变为任何他想指定的权限。

三种不同的用户类型能够访问一个目录或者文件:所有者、用户组或其他用户。

所有者就是创建文件的用户,用户是所有用户所创建的文件的所有者,用户可以允许所在的用户组能访问用户的文件。

例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。

每一个用户都有它自身的读、写和执行权限。

-rw-r--r--. 1 root root 103 Jul 25 09:47 /etc/issue

第一位-:表示文件类型

第二到第四位:属主的权限

第五道第七位:属组的权限

第八到第十位:系统里其他(other)用户的权限

我们可以把它分成三组:第一组(第二到第四位),第二组(第五道第七位),第三组(第八到第十位)

权限对于文件:

第一组权限控制访问自己的文件权限,即所有者权限。

第二组权限控制用户组访问其中一个用户的文件的权限。

第三组权限控制其他所有用户访问一个用户的文件的权限。

权限的表示法:

可以用字符表示,也可以用八进制数字表示

r:4         w:2          x: 1   

rw: 6        rx: 5         wx:3  

rwx:7       0:代表没有权限

— 000 0 无权限      –x 001 1 执行    -w- 010 2 写

-wx 011 3 写和执行     r– 100 4 只读     r-x 101 5 读和执行

rw- 110 6 读写        rwx 111 7 读写执行

例如:640: rw-r—–  

    755:rwxr-xr-x

权限对于文件和目录的意义:

读 (r):Read     对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

写 (w):Write    对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

执行(x):execute  对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限,可以使用ls -l查看此目录中文件列表   

“—”表示不具有该项权限

目录 X:只给目录x权限,不给文件x权限

权限管理相关的命令:

修改文件的属主和属组

修改文件的属主:chown 

chown [OPTION]… [OWNER][:[GROUP]] FILE… 

    用法: 

      OWNER 

      OWNER:GROUP 

      :GROUP 

      [root@localhost zzz]# ll 
      total 0
      -rw-r--r-- 1 root  root  0 Aug  4 16:10 a
      -rw-r--r-- 1 user1 user1 0 Aug  4 16:13 abc
      命令中的冒号可用.替换;  
      -R: 递归 
      chown [OPTION]... --reference=RFILE FILE...
     
      [root@localhost zzz]# ll
      total 0
      -rw-r--r-- 1 root root 0 Aug  4 16:10 a
      -rw-r--r-- 1 zzz  zzz  0 Aug  4 16:13 abc
      [root@localhost zzz]# chown --reference=a abc
      [root@localhost zzz]# ll
      total 0
      -rw-r--r-- 1 root root 0 Aug  4 16:10 a
      -rw-r--r-- 1 root root 0 Aug  4 16:13 abc

 

修改文件的属组:chgrp 

    chgrp [OPTION]… GROUP FILE… 

    chgrp [OPTION]… –reference=RFILE FILE… 

    [root@localhost zzz]# ll
    total 0
    -rw-r--r-- 1 root root 0 Aug  4 16:10 a
    -rw-r--r-- 1 root root 0 Aug  4 16:13 abc
    [root@localhost zzz]# chgrp zzz a
    [root@localhost zzz]# ll
    total 0
    -rw-r--r-- 1 root zzz  0 Aug  4 16:10 a
    -rw-r--r-- 1 root root 0 Aug  4 16:13 abc
    [root@localhost zzz]# chgrp --reference=a abc
    [root@localhost zzz]# ll
    total 0
    -rw-r--r-- 1 root zzz 0 Aug  4 16:10 a
    -rw-r--r-- 1 root zzz 0 Aug  4 16:13 abc

    -R 递归

文件权限操作命令:chmod

     chmod [OPTION]… OCTAL-MODE FILE… 

        -R: 递归修改权限 

     chmod [OPTION]… MODE[,MODE]… FILE… 

        MODE: 

        修改一类用户的所有权限: 

        u=  g= o= 

        a=     (所有权限all) 

        ug=   

        u=,g= 

        [root@localhost zzz]# ll a
        -rw-r--r-- 1 root zzz 0 Aug  4 16:10 a
        [root@localhost zzz]# chmod u=rwx,g=rw,o=rw a
        [root@localhost zzz]# ll a
        -rwxrw-rw- 1 root zzz 0 Aug  4 16:10 a

        修改一类用户某位或某些位权限 

         u+  u- g+ g- o+ o- a+ a- +

        [root@localhost zzz]# ll a
        -rwxrw-rw- 1 root zzz 0 Aug  4 16:10 a
        [root@localhost zzz]# chmod u-x,o-w a
        [root@localhost zzz]# ll a
        -rw-rw-r-- 1 root zzz 0 Aug  4 16:10 a

 

     chmod [OPTION]… –reference=RFILE FILE… 

     参考RFILE文件的权限,将FILE的修改为同RFILE;

        [root@localhost zzz]# ll
        total 0
        -rw-rw-r-- 1 root user1 0 Aug  4 16:10 a
        -rw-r--r-- 1 root zzz   0 Aug  4 16:13 abc
        [root@localhost zzz]# chmod --reference=a abc
        [root@localhost zzz]# ll
        total 0
        -rw-rw-r-- 1 root user1 0 Aug  4 16:10 a
        -rw-rw-r-- 1 root zzz   0 Aug  4 16:13 abc

新建文件和目录的默认权限

umask值 可以用来保留在创建文件权限  

    新建FILE权限: 666-umask 

        如果所得结果某位存在执行(奇数)权限,则将其权限+1  

        新建DIR权限: 777-umask  

    非特权用户umask是 002 

    root的umask 是 022 

    umask: 查看 

    [root@localhost zzz]# umask
    0022

    umask #: 设定 (设定支队当前shell有效)

    [root@localhost zzz]# umask 026
    [root@localhost zzz]# umask
    0026

    umask –S 模式方式显示 

    [root@localhost zzz]# umask -S
    u=rwx,g=rx,o=x

    umask –p 输出可被调用  

    全局设置: /etc/bashrc 

    用户设置:~/.bashrc

Linux文件系统上的特殊权限:

    SUID, SGID, Sticky

    SUID 4 

    SGID 2 

    Sticky 1 

安全上下文  

前提:进程有属主和属组;文件有属主和属组 

(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 

(2) 启动为进程之后,其进程的属主为发起者;进程的属组为 发起者所属的组 

(3) 进程访问文件时的权限,取决于进程的发起者 

    (a) 进程的发起者,同文件的属主:则应用文件属主权限 

    (b) 进程的发起者,属于文件属组;则应用文件属组权限 

    (c) 应用文件“其它”权限

来看看他们的作用:

SUID:当用户执行具有x权限的二进制文件时拥有此文件所有者的权限

SGID:当用户执行具有x权限的二进制文件时拥有此文件所在组的权限,另外也可以对目录设置此权限

Sticky:当用户对某个目录具有w和x权限时,常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权。在该目录设置Sticky位,目录下建立的文件和目录只有该用户和root用户才可以删除

        

setuid与setgid:

先用ls -l命令看一下下面几个文件或目录的信息:

    [root@localhost ~]# ll -d /tmp /usr/bin/passwd
    drwxrwxrwt. 3 root root  4096 Aug  4 16:50 /tmp
    -rwsr-xr-x. 1 root root 30768 Nov 24  2015 /usr/bin/passwd

这里发现在文件或目录的拥有者,所属组,其他用户的权限x的位置上被s或者t取代。

举个例子说:

比如普通用户用passwd命令去修改密码,而密码是存在/etc/shadow文件中,而普通用户是无法修改这个文件的,也就无法把新密码保存进来。

但事实的结果是普通用户是可以修改密码,并且保存到/etc/shadow这个文件中的。

[root@localhost ~]# ll /etc/shadow
---------- 1 root root 1205 Aug  4 16:11 /etc/shadow

它的流程是这样的:

先看下/usr/bin/passwd这个文件,也就是命令passwd。

[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 30768 Nov 24  2015 /usr/bin/passwd

发现这个文件的拥有者是root,并且other的权限为r-x,也就说普通用户对其具有r和x的权限

普通用户对其具有执行权限,因此当普通用户执行这条命令时,由于s这个权限的存在,那么在执行过程中会暂时获取root的权限 

只有root才可以修改/etc/shadow文件,而在执行过程中使用了root用户的权限密码顺利得写入到这个文件中

可执行文件上SUID权限:

任何一个可执行程序文件能不能启动为进程:取决发起者对 程序文件是否拥有执行权限  

启动为进程之后,其进程的属主为原程序文件的属主 

SUID只对二进制可执行程序有效 

SUID设置在目录上无意义  

    权限设定: 

        chmod u+s FILE… 

        chmod u-s FILE…

    [root@localhost ~]# ll
    total 68
    -rwxrwxrwx  1 root root     0 Jul 25 11:26 zzzzzzz
    [root@localhost ~]# chmod u+s zzzzzzz 
    [root@localhost ~]# ll
    total 68
    -rwsrwxrwx  1 root root     0 Jul 25 11:26 zzzzzzz

可执行文件上SGID权限:

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限  

启动为进程之后,其进程的属主为原程序文件的属组 

    权限设定: 

        chmod g+s FILE… 

        chmod g-s FILE…

    [root@localhost ~]# ll
    total 68
    -rwsrwxrwx  1 root root     0 Jul 25 11:26 zzzzzzz
    [root@localhost ~]# chmod u-s,g+s zzzzzzz 
    [root@localhost ~]# ll
    total 68
    -rwxrwsrwx  1 root root     0 Jul 25 11:26 zzzzzzz

目录上的SGID权限:

默认情况下,用户创建文件时,其属组为此用户所属的主组  

一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组 

通常用于创建一个协作目录 

   

另外,还有可能出现大写的情况rwSrwSrwT,出现这种情况是因为用户不具备文件的x权限。

权限位映射:

SUID: user,占据属主的执行权限位 

    s: 属主拥有x权限 

    S:属主没有x权限 

SGID: group,占据属组的执行权限位 

    s: group拥有x权限 

    S:group没有x权限 

Sticky: other,占据other的执行权限位 

    t: other拥有x权限 

    T:other没有x权限

设定文件特定属性:

    chattr +i 不能删除,改名,更改(包括root用户)

    [root@localhost ~]# chattr +i zzzzzzz 
    [root@localhost ~]# rm -f zzzzzzz 
    rm: cannot remove `zzzzzzz': Operation not permitted

    chattr -i 解锁

    [root@localhost ~]# chattr -i zzzzzzz 
    [root@localhost ~]# rm -f zzzzzzz 
    [root@localhost ~]# ll 
    total 68
    -rw-------. 1 root root  2429 Jul 25 09:47 anaconda-ks.cfg
    -rw-r--r--. 1 root root 45324 Jul 25 09:46 install.log
    -rw-r--r--. 1 root root  9963 Jul 25 09:44 install.log.syslog

    chattr +A 锁定文件的读时间  -A 解锁

    chattr +a 可以查看、写入数据,不能删除

    [root@localhost ~]# chattr +a zz
    [root@localhost ~]# ll zz
    -rw-r----- 1 root root 0 Aug  4 21:48 zz
    [root@localhost ~]# echo very hard
    very hard
    [root@localhost ~]# echo very hard >> zz
    [root@localhost ~]# cat zz
    very hard
    [root@localhost ~]# rm -f zz
    rm: cannot remove `zz': Operation not permitted

    lsattr 显示特定属性

    [root@localhost ~]# lsattr zz
    -------------e- zz

原创文章,作者:zanghonglei,如若转载,请注明出处:http://www.178linux.com/29193

(0)
zanghongleizanghonglei
上一篇 2016-08-05
下一篇 2016-08-05

相关推荐

  • Centos7上安装Ansible和基础应用

    Ansible 简介 ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交互;自动化的(AWS)云服务管理。所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。通俗的说…

    Linux干货 2016-04-15
  • 网络知识及写脚本,一个又一个

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 集线器是属于物理层的设备,可以理解为一根网线中间串接出了多个接口,这么多接口共享这一根网线的带宽, 因此这些接口上的设备在使得网络时就会出现冲突,或者‘道路’挤占的情况。(所有的设备在一个广播域,冲突域中),集线器现在很少使用了。 交换机、网桥都是数据链路层的设备,网桥的出现就是…

    2017-02-10
  • find命令归纳

    首先,find可以实现以下方式查找 文件名:-name -iname -regex 文件类型:-type TYPE:(f,d,l,s,b,c,p) 文件大小:-size [+|-]#UNIT #UNIT(k,M,G)范围(由小到大):[0,#-1](#-1,#](+#,oo) 时间戳:-{a|m|c}time -{a|m|c}min  范围(现在到…

    Linux干货 2016-04-19
  • bash编程初体验(二)

    bash编程初体验(二) read if case 概述 在本篇文章中,我们将介绍bash编程中有关if语句的简单用法,if语句的基本思路是判断给定的条件是否满足,即结果是真还是假,从而选择执行哪种操作。如此,如果条件为真,if会执行一种指令,如果条件为假,if会选择执行另一种指令,这种执行就是所谓的选择结构,它能够改变命令的基本顺序流结构,以选择流的形式运…

    Linux干货 2016-08-19
  • 字符串处理

      一.字符串处理 v bash 的字符串处理工具: (一)字符串切片: ${#var}: 返回字符串变量var 的长度 例: [root@lxc ~]# a="     " [root@lxc ~]# echo ${#a} 5 [root@lxc ~]# ${var:offse…

    Linux干货 2016-11-24
  • N21沉舟17周作业

    1、结合图形描述LVS的工作原理; NAT模型 NAT模型其实就是通过网络地址转换来实现负载均衡的,它的工作方式几乎跟iptables 中的DNAT一模一样的,NAT模型的工作方式: 1.用户请求VIP(也就是是CIP请求VIP) 2,Director Server 收到用户的请求后,发现源地址为CIP请求的目标地址为VIP,那么Dorector Serve…

    Linux干货 2016-11-14