zoukankan      html  css  js  c++  java
  • linux下面权限的含义以及修改

    linux中的权限

    前言

    最近使用ansible搭建了mongo的replica set。发现很多次的失败都是文件权限不对造成的。那么就总结下吧。

    数字权限

    数字权限,我们常见的是三位的数字表示的权限,当然四位的我们也难免会遇到,接下我们看下他们直接的区别。

    三位数字权限

    linux中的文件权限分为读、写、执行.对应的字母就是r、w、x.

    读(r)

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

    写(w)

    Write对文件而言,具有修改文件内容的权限;对于目录来说,具有删除移动目录内文件的权限。

    执行(x)

    Execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。

    无权限(-)

    -表示不具有该项选项

    linux下的权限粒度有 拥有者群组其他组三种。每个文件都可以针对这三个粒度,设置不同的(r,w,x)读写执行权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。

    Linux上通常使用chmod命令对文件的权限进行设置和更改。

    我们规定数字4、2、1表示读、写、执行的权限。即r=4,w=2,x=1。

    栗如:

    rwx = 4 + 2 + 1 = 7
    rw = 4 + 2 = 6
    rx = 4 +1 = 5
    

    若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7

    若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6

    若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5

    三位数字权限的转换

    读,写,执行对应的权限二进制表示为

    r-- = 100
    -w- = 010
    --x = 001
    --- = 000
    

    将二进制转换成十进制就是

    r-- = 100 4
    -w- = 010 2
    --x = 001 1
    --- = 000 0
    

    rwx 权限就是 4 + 2 + 1 = 7  
    rw- 权限就是 4 + 2 = 6 
    ...
    
    如何设置权限

    每个文件都有拥有者群组其他组三种权限的粒度。我们在设置权限的时候也是针对这几个粒度进行配置的。即我们可以使用三个数字来配置这三个权限粒度的权限。

    chmod file...

    其中
    a,b,c各为一个数字,分别代表User、Group、及Other的权限。
    相当于简化版的
    chmod u=权限,g=权限,o=权限 file...
    而此处的权限将用8进制的数字来表示User、Group、及Other的读、写、执行权限
    

    栗子:

    设置所有人可以读写及执行

    chmod 777 file  (等价于  chmod u=rwx,g=rwx,o=rwx file 或  chmod a=rwx file)
    

    设置拥有者可读写,其他人不可读写执行

    chmod 600 file (等价于  chmod u=rw,g=---,o=--- file 或 chmod u=rw,go-rwx file )
    

    一些常见的权限

    -rw------- (600)      只有拥有者有读写权限。
    -rw-r--r-- (644)      只有拥有者有读写权限;而属组用户和其他用户只有读权限。
    -rwx------ (700)     只有拥有者有读、写、执行权限。
    -rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
    -rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
    -rw-rw-rw- (666)   所有用户都有文件读、写权限。
    -rwxrwxrwx (777)  所有用户都有读、写、执行权限
    
    最高位的含义

    关于第一位最高位的解释: 上面我们说到了权限表示中后九位的含义,剩下的第一位代表的是文件的类型,类型可以是下面几个中的一个:

    d代表的是目录(directroy)
    -代表的是文件(regular file)
    s代表的是套字文件(socket)
    p代表的管道文件(pipe)或命名管道文件(named pipe)
    l代表的是符号链接文件(symbolic link)
    b代表的是该文件是面向块的设备文件(block-oriented device file)
    

    四位数字权限

    linux除了设置正常的读写操作权限外,还有关于一类设置也是涉及到权限,叫做Linxu附加权限。包括 SET位权限(suid,sgid)和粘滞位权限(sticky)。

    SUID

    让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。

    1、SUID权限仅对二进制程序有效。
    2、执行者对于该程序需要具有x的可执行权限。
    3、本权限仅在执行该程序的过程中有效。
    4、执行者将具有该程序拥有者的权限。
    

    栗子:

    $ ls -la /bin/su
    -rwsr-xr-x 1 root root 63568 7月  16 06:52 /bin/su
    

    对于su这个命令,拥有者是root,但是实际上是无论任何人,都可以执行,并且拥有的执行权限和root一样。因为这个设置了SUID,并且设置了拥有者有可执行权限。从上面可以看到,不管是文件拥有者,文件拥有者所属组,还是其他人,都是具有x权限的,所以都可以执行该程序,执行之后就将具有该程序拥有者的权限,即root的权限,这也就是su命令能够切换用户权限的实现原理。

    SGID

    和SUID类似,不过SGID是针对所属用户组权限的。

    1、SGID对二进制程序有用;
    2、程序执行者对于该程序来说需具备x的权限;
    3、SGID主要用在目录上;
    

    SET位权限表示形式:

    如果一个文件被设置了suid或sgid位,会分别表现在所有者或同组用户的权限的可执行位上;如果文件设置了suid还设置了x(执行)位,则相应的执行位表示为s(小写)。但是,如果没有设置x位,它将表示为S(大写)。如:

    1、-rwsr-xr-x 表示设置了suid,且拥有者有可执行权限
    2、-rwSr--r-- 表示suid被设置,但拥有者没有可执行权限
    3、-rwxr-sr-x 表示sgid被设置,且群组用户有可执行权限
    4、-rw-r-Sr-- 表示sgid被设置,但群组用户没有可执行权限
    

    设置方式:

    SET位权限可以可以使用chmod命令设置,栗子:

    chmod u+s filename 	设置suid位
    chmod u-s filename 	去掉suid设置
    chmod g+s filename 	设置sgid位
    chmod g-s filename 	去掉sgid设置
    
    SBIT

    目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。

    栗子:

    最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件

    注:SBIT对文件不起作用。

    粘滞位权限表示形式:

    一个文件或目录被设置了粘滞位权限,会表现在其他组用户的权限的可执行位上。如果文件设置了sticky还设置了x(执行)位,其他组用户的权限的可执行位为t(小写)。但是,如果没有设置x位,它将表示为T(大写)。如:

    1、-rwsr-xr-t 表示设置了粘滞位且其他用户组有可执行权限
    2、-rwSr--r-T 表示设置了粘滞位但其他用户组没有可执行权限
    
    四位数字权限的转换

    同样使用二进制表示下:

    SGT分别表示SUID权限、SGID权限、和 粘滞位权限

    S-- = 100
    -G- = 010
    --T = 001
    --- = 000
    

    和前面的rwx的转换一样,转换成是十进制就是

    S-- = 100 4
    -G- = 010 2
    --T = 001 1
    --- = 000 0
    
    • suid 位代表数字是 4
    • sgid 位代表数字是 2
    • sticky 位代表数字是 1
    如何设置权限

    使用chmod进行权限的设置

    chmod <abcd> file
    

    栗子:

    使用一个栗子对比下吧

    设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行

    chmod 755 netlogin
    

    设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行,并且设置SUID

    chmod 4755 netlogin
    

    chmod 4755与chmod 755对比多了附加权限值4,这个4表示其他用户执行文件时,具有与所有者同样的权限(设置了SUID)。

    为什么要设置4755 而不是 755?

    假设netlogin是root用户创建的一个上网认证程序,如果其他用户要上网也要用到这个程序,那就需要root用户运行chmod 755 netlogin命令使其他用户也能运行netlogin。但假如netlogin执行时需要访问一些只有root用户才有权访问的文件,那么其他用户执行netlogin时可能因为权限不够还是不能上网。这种情况下,就可以用 chmod 4755 netlogin 设置其他用户在执行netlogin也有root用户的权限,从而顺利上网。

    如何改变文件属性

    我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:

    chgrp :改变文件所属群组
    chown :改变文件拥有者
    chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

    改变所属群组, chgrp

    改变一个文件的群组真是很简单的,直接以chgrp来改变即可。chgrp的拼写也是有点意思的,这个指令就是change group的缩写。

    不过需要注意的是,我们要改变的用户组,必须在在/etc/group文件内存在才行。

    假设你是以root的身份登入Linux系统的,那么在你的家目录内有一个install.log的文件, 如何将该文件的群组改变一下呢?假设你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?

    发现了吗?文件的群组被改成users了,但是要改成testing的时候, 就会发生错误

    改变文件拥有者, chown

    chown的拼写也是change owner的拼写。同样用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。

    chown同时也可以修改所属群组

    同时chown也可以简单的修改用户的组

    chown .sshd install.log
    

    其中的sshd代表的就是用户的群组

    改变权限, chmod

    文章开头已经描述的很清楚了

    参考

    【第六章、Linux 的文件权限与目录配置】http://cn.linux.vbird.org/linux_basic/0210filepermission.php
    【Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)】https://blog.csdn.net/u013197629/article/details/73608613
    【深入Linux文件权限 SUID/SGID/SBIT】https://blog.csdn.net/imkelt/article/details/53054309?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
    【第六章、Linux 的文件权限与目录配置】http://cn.linux.vbird.org/linux_basic/0210filepermission.php#filepermission_ch

  • 相关阅读:
    再次尝试windows下msys+MinGW编译ffmpeg
    iOS设备的硬件适配 (关于armv6, armv7, armv7s ) <转>
    vmware虚拟机下ubuntu 13.04使用zeranoe脚本交叉编译ffmpeg
    vmware 8下ubuntu 13.04安装vmware tools
    ubuntu下使用脚本交叉编译windows下使用的ffmpeg + X264
    网上看来的
    ffmpeg关于aac解码
    iOS阶段学习第15天笔记(NSDate操作)
    iOS阶段学习第15天笔记(NSDictionary与NSMutableDictionary 字典)
    iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)
  • 原文地址:https://www.cnblogs.com/ricklz/p/13575893.html
Copyright © 2011-2022 走看看