zoukankan      html  css  js  c++  java
  • Linux 的文件/目录权限

    Linux 的文件权限

     

     

    在 Linux 里面,任何一个文件都具有『User, Group 及 Others』 

    默认的情况下:

    所有的系统上的账号与一般身份使用者,还有那个 root 的相关信息,都是记录在/etc/passwd 这个文件内

    个人的密码则是记录在/etc/shadow 这个文件下

    Linux 所有的组名都纪录在/etc/group 内! 

    文件权限:r w x

    r (read):可读取此一文件的实际内容,如读取文本文件的文字内容

    w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件)

    x (eXecute):该文件具有可以被系统执行的权限 

     

    文件属性:

     

    ls -al (缩写ll)是查看当前位置下的『所有隐藏档与相关的文件属性』 例如:

     

    [root@rfjmy7h77vmu src]# ll
    total 4
    -rw-r--r--   1       root      root            442          Jun 14 14:40     socket_client1.py

     

    [ 权限 ]      [连结]  [拥有者]   [群组]     [文件容量]    [ 修改日期 ]        [ 文件名 ] 

    1, 第一栏:

     

    -rw-r--r-- 代表这个文件的类型与权限(permission) 

     

    第一个字符代表这个文件类型 例如:目录、文件或链接文件等等:

    o 当为[ d ]则是目录,例如上表档名为『.config』的那一行;
    o 当为[ - ]则是文件,例如上表档名为『initial-setup-ks.cfg』那一行;
    o 若是[ l ]则表示为连结档(link file);
    o 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置)例如:硬盘,软盘
    o 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置) 

    o 若是[ s]则表示为数据接口文件(sockets)

    • 这种类型的文件通常被用在网络上的数据承接了。我们可以启动一 个程序来监听客户端的要求, 而客户端就可以透过这个 socket 来进行数据的沟通了 ,最常在/run 或/tmp 这些个目录中看到这种文件类型了。 

    o  若是[ p ]则表示为数据输送文件(FIFO, pipe)

    • FIFO 也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题 

     

     

    接下来的字符中以三个为一组且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)[ w ]代表 可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出 现减号[ - ]而已。

    第一组为『文件拥有者可具备的权限』即:user,以-rw-r--r--为例, 该文件的拥有者 可以读写,但不可执行;

    第二组为『加入此群组之账号的权限』即:group;-rw-r--r--为例, 该group 权限是只可读

    第三组为『非本人且没有加入本群组之其他账号的权限』即:others-rw-r--r--为例, 该others 权限是只可读

     

    2,第二栏:

     

    第二栏表示有多少档名连结到此节点(i-node) 

     

    3,第三栏:

     

    第三栏表示这个文件(或目录)的『拥有者账号』 

     

    4,第四栏

     

    第四栏表示这个文件的所属群组 

     

    5,第五栏

     

    第五栏为这个文件的容量大小,默认单位为bytes;

     

    6,第六栏

     

    第六栏为这个文件的建档日期或者是最近的修改日期 

    显示出完整的时间格式代码:ls -l --full-time 例如:

    [root@rfjmy7h77vmu src]# ls -l --full-time
    total 12
    -rw-r--r-- 1 root root 442 2021-06-14 14:40:10.215033603 +0800 socket_client1.py

    7,第七栏

    第七栏为这个文件的档名 

    比较特殊的是:如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』 

     

    Linux文件权限的用途:

    -系统保护的功能

    -团队开发软件或数据共享的功能:

    -未将权限设定妥当的危害 

     

    如何改变文件属性与权限 

    chgrp :改变文件所属群组

    代码:chgrp 需要修改成的组名 文件名

    注意:此方法修改组名是要求/etc/group 下要有你所修改的组名,否则会修改失败

    [root@rfjmy7h77vmu src]# ll
    total 12
    -rw-r--r-- 1 root users 442 Jun 14 14:40 socket_client1.py

    ******************************************

    [root@rfjmy7h77vmu src]# chgrp root socket_client1.py
    [root@rfjmy7h77vmu src]# ll
    total 12
    -rw-r--r-- 1 root root 442 Jun 14 14:40 socket_client1.py

     

    chown :改变文件拥有者

    代码:chown 需要修改成的账号名称 文件或目录

          chown 需要修改成的账号名称:组名 文件或目录

    注意:/etc/passwd 这个文件中有纪录的用户名称才能改变 

    l例如:

    [root@rfjmy7h77vmu src]# chown bin socket_client1.py
    [root@rfjmy7h77vmu src]# ll
    total 12
    -rw-r--r-- 1 bin root 442 Jun 14 14:40 socket_client1.py

    ******************************************

    [root@rfjmy7h77vmu src]# chown root:root socket_client1.py
    [root@rfjmy7h77vmu src]# ll
    total 12
    -rw-r--r-- 1 root root 442 Jun 14 14:40 socket_client1.py

     -改变文件的权限

    chmod :改变文件的权限, SUID, SGID, SBIT 等等的特性   

     

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

    -数字类型改变文件权限  代码: chmod 需要修改成的权限数字 文件名

    文件的权限字符为:『-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

     

    例如:

     

    socket_client.py 文件原权限是:-rw-r--r-- 

     

    [root@rfjmy7h77vmu src]# chmod 770 socket_client1.py
    [root@rfjmy7h77vmu src]# ll
    total 12
    -rwxrwx--- 1 root root 442 Jun 14 14:40 socket_client1.py

     

    -符号类型改变文件权限 

     

    chmod 身份=修改后权限 文件名

     

    chmod 身份+需要加上的权限 文件名

     

    linux权限分别是(1)user (2)group (3)others 三种身份啦!那么我们就可以藉由 u, g, o 来代表三种身份的权限! 

    a 则代表 all 亦即全部 的身份! 那么读写的权限就可以写成 r, w, x  ,也就是可以使用底下的方式来看 

     

     

     

     

    原来的:-rw-r--r-- 1 root root 442 Jun 14 14:40 socket_client1.py

     

    给user 加上可执行权限 代码如下:

     

    -------------------------------------------

     

    [root@rfjmy7h77vmu src]# chmod u=rwx socket_client1.py
    [root@rfjmy7h77vmu src]# ll
    total 12
    -rwxr--r-- 1 root root 442 Jun 14 14:40 socket_client1.py

     

    --------------------------------

     

    [root@rfjmy7h77vmu src]# chmod u+x socket_client1.py

     

    [root@rfjmy7h77vmu src]# ll

     

    total 12
    -rwxr--r-- 1 root root 442 Jun 14 14:40 socket_client1.py

     

    ----------------------------

     

    给所有身份都加上可执行权限

     

    [root@rfjmy7h77vmu src]# chmod a+x socket_client1.py

     

    [root@rfjmy7h77vmu src]# ll

     

    total 12
    -rwxr-xr-x 1 root root 442 Jun 14 14:40 socket_client1.py

     

    权限对文件/目录的作用如下图:

     

     

     

     

     文件的权限预设:umask

     

    umask 就是指定 『目前用户在建立文件或目录时候的权限默认值』
    查阅的方式有两种:
    1,一种可以直接输入 umask ,就可以看到数字型态的权限设定分数,
    分数一共4组,第一组是特殊权限用的,我们先不要理他,只需看后3位
    因此,linux预设的文件/目录情况如下:
    •   若使用者建立为『文件』则预设『没有可执行( x )权限』,亦即只有 rw 这两个项目,也就是最大为 666 分, 预设权限如下:
      -rw-rw-rw-

    •   若用户建立为『目录』,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分, 预设权限如下:
      drwxrwxrwx

    要注意的是,umask 的分数指的是『该预设默认值需要减掉的权限!』

     若umask 为022,即:owner 权限不变,group 减去w,others 减去 w

    • 建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--

    • 建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

    2,一种则是 加入 -S (Symbolic) 这个选项,就会以符号类型的方式来显示出权限了

     如下:

    [root@rfjmy7h77vmu ~]# umask
    0022
    [root@rfjmy7h77vmu ~]# umask -S
    u=rwx,g=rx,o=rx

     文件的特殊权限:SUID, SGID, SBIT

     SUID: 在拥有者权限中用s来表示

    当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限 状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。 基本上 SUID 有这样的限制与功能:

     - SUID 权限仅对二进制程序(binary program)有效;

     -执行者对于该程序需要具有 x 的可执行权限;

    -本权限仅在执行该程序的过程中有效 (run-time);

    -执行者将具有该程序拥有者 (owner) 的权限。如下图:

     

    SetGID 简称:SGID ,在群组权限中用s表示

     当s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID 。

     与 SUID 不同的是,SGID 可以针对文件或目录来设定!

    如果是对文件来说,SGID 有如下的功能: 

     -SGID 对二进制程序有用; 

    -程序执行者对于该程序来说,需具备 x 的权限 

    -执行者在执行的过程中将会获得该程序群组的支持! 

    当一个目录设定了 SGID 的权限后,他将具有如下的功能: 

    •   用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;

    •   用户在此目录下的有效群组(effective group)将会变成该目录的群组;

    •   用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此

      目录的群组相同。 

     

    StickyBit简称:SBIT,在权限中用t来表示

    目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是: 

    -当用户对于此目录具有 w, x 权限,亦即具有写入的权限时; 

    -当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件 

     

    SUID/SGID/SBIT 权限设定 

    用数字更改权限:

    SUID: 4

    SGID: 2
    SBIT: 1

     

    假设要将一个文件权限改为『-rwsr-xr-x』时,由于 s 在用户权力中,所以是 SUID ,因此, 在原 先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来设定! 

    例如:

    [root@study ~]# cd /tmp
    [root@study tmp]# touch test <==建立一个测试用空档 [root@study tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的权限 -rwsr-xr-x 1 root root 0 Jun 16 02:53 test 

     

    用符号来修改权限

    其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t  

     例如:

    # 设定权限成为 -rws--x--x 的模样:
    [root@study tmp]# chmod u=rwxs,go=x test; ls -l test -rws--x--x 1 root root 0 Jun 16 02:53 test

    # 承上,加上 SGID 与 SBIT 在上述的文件权限中! [root@study tmp]# chmod g+s,o+t test; ls -l test -rws--s--t 1 root root 0 Jun 16 02:53 test 

     

     

     

    权限与指令间的关系

     

    一、让用户能进入某目录成为『可工作目录』的基本权限为何:
      可使用的指令:例如 cd 等变换工作目录的指令;
    •   目录所需权限:用户对这个目录至少需要具有 x 的权限

    •   额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。

     
    二、用户在某个目录内读取一个文件的基本权限为何?
    •   目录所需权限:用户对这个目录至少需要具有 x 权限;

    •   文件所需权限:使用者对文件至少需要具有 r 的权限才行!

    •   可使用的指令:例如之前学到的到的 cat, more, less 等等 

    三、让使用者可以修改一个文件的基本权限为何?
    •   目录所需权限:用户在该文件所在的目录至少要有 x 权限;

    •      目录所需权限:用户在该文件所在的目录至少要有 x 权限;
    •   可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等; 

     

    四、让一个使用者可以建立一个文件的基本权限为何?

    目录所需权限: w, x 重点在w权限

    五、让用户进入某目录并执行该目录下的某个指令之基本权限为何?

    •   目录所需权限:用户在该文件所在的目录至少要有 x 权限;

    •   文件所需权限:使用者在该文件至少需要有 x 的权限

    例题1:
    让一个使用者 dmtsai 能够进行『cp /dir1/file1 /dir2』的指令时,请说明 dir1, file1, dir2 的最小所需权限为何?
    答:
    执行 cp 时, dmtsai 要『能够读取来源文件,并且写入目标文件!』所以应参考上述第二点与第四点的说明! 因此各 文件/目录的最小权限应该是:

    •   dir1 :至少需要有 x 权限;

    •   file1:至少需要有 r 权限;

    •   dir2 :至少需要有 w, x 权限。

     

    例题2:
    有一个文件全名为 /home/student/www/index.html ,各相关文件/目录的权限如下:

    drwxr-xr-x 23 root root 4096 Sep 22 12:09 /
    drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home

    drwx------ 6 student  student 4096 Sep 29 02:23 /home/student


    drwxr-xr-x 6 student  student 4096 Sep 29 02:24 /home/student/www


    -rwxr--r-- 6 student  student 369 Sep 29 02:27 /home/student/www/index.html


    请问 vbird 这个账号(不属于 student 群组)能否读取 index.html 这个文件呢? 答:

     

    虽然 www 与 index.html 是可以让 vbird 读取的权限,但是因为目录结构是由根目录一层一层读取的,因此 vbird 可 进入 /home 但是却不可进入 /home/student/ ,既然连进入 /home/student 都不许了,当然就读不到 index.html 了! 所以答案是『vbird 不会读取到 index.html 的内容』喔!

    那要如何修改权限呢?其实只要将 /home/student 的权限修改为最小 711 ,或者直接给予 755 就可以啰!这可是很 重要的概念喔!

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    “#ifdef __cplusplus extern "C" { #endif”的定义
    【原创】分布式之redis复习精讲
    python爬虫入门(六) Scrapy框架之原理介绍
    PYTHON面试
    14.Ubuntu基本命令
    python爬虫入门(五)Selenium模拟用户操作
    python爬虫入门(四)利用多线程爬虫
    python爬虫入门(三)XPATH和BeautifulSoup4
    python爬虫入门(一)urllib和urllib2
    7.Ajax
  • 原文地址:https://www.cnblogs.com/wode110/p/14884403.html
Copyright © 2011-2022 走看看