zoukankan      html  css  js  c++  java
  • Linux下文件的权限

    一、Linux下查看文件属性

    命令为:

    [root@localhost ~]# ls -al
    结果:

    ls是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有的文件详细的权限与属性 (包含隐藏档,就是文件名第一个字符为『 . 』的文件)。

    total 224
    dr-xr-x---. 27 root root  4096 Dec 16 20:31 .
    dr-xr-xr-x. 22 root root  4096 Dec 16 20:30 ..
    -rw-------.  1 root root  2688 Dec 15 12:23 anaconda-ks.cfg
    -rw-------.  1 root root  1678 Dec 16 20:29 .bash_history
    -rw-r--r--.  1 root root    18 May 20  2009 .bash_logout
    -rw-r--r--.  1 root root   176 May 20  2009 .bash_profile
    -rw-r--r--.  1 root root   176 Sep 22  2004 .bashrc
    drwxr-xr-x.  4 root root  4096 Dec 16 01:01 .cache
    drwxr-xr-x.  6 root root  4096 Dec 16 20:31 .config
    -rw-r--r--.  1 root root   100 Sep 22  2004 .cshrc
    drwx------.  3 root root  4096 Dec 15 20:55 .dbus
    -rw-------.  1 root root    16 Dec 15 20:55 .esd_auth
    drwx------.  4 root root  4096 Dec 16 20:31 .gconf
    drwx------.  2 root root  4096 Dec 16 22:32 .gconfd
    drwx------.  8 root root  4096 Dec 16 04:16 .gnome2
    drwx------.  2 root root  4096 Dec 16 00:51 .gnome2_private
    drwxr-xr-x.  3 root root  4096 Dec 16 01:03 .gnote
    drwx------.  2 root root  4096 Dec 16 20:31 .gnupg
    drwxr-xr-x.  2 root root  4096 Dec 16 01:02 .gstreamer-0.10
    -rw-r--r--.  1 root root   160 Dec 16 20:31 .gtk-bookmarks
    dr-x------.  2 root root     0 Dec 16 20:31 .gvfs
    -rw-------.  1 root root  2480 Dec 16 20:31 .ICEauthority
    -rw-r--r--.  1 root root   642 Dec 16 20:31 .imsettings.log
    -rw-r--r--.  1 root root 41364 Dec 15 12:23 install.log
    -rw-r--r--.  1 root root  9154 Dec 15 12:21 install.log.syslog
    -rw-------.  1 root root    35 Dec 16 02:07 .lesshst
    drwxr-xr-x.  3 root root  4096 Dec 15 20:55 .local
    drwxr-xr-x.  4 root root  4096 Dec 16 00:51 .mozilla
    drwxr-xr-x.  2 root root  4096 Dec 15 20:55 .nautilus
    drwx------.  2 root root  4096 Dec 15 20:55 .pulse
    -rw-------.  1 root root   256 Dec 15 20:55 .pulse-cookie
    -rw-------.  1 root root  6166 Dec 16 04:49 .recently-used.xbel
    drwx------.  2 root root  4096 Dec 15 21:00 .ssh
    -rw-r--r--.  1 root root   129 Dec  3  2004 .tcshrc
    drwx------.  3 root root  4096 Dec 16 04:34 .thumbnails
    lrwxrwxrwx.  1 root root    33 Dec 16 01:01 .xinputrc -> /etc/X11/xinit/xinput.d/ibus.conf
    drwxr-xr-x.  2 root root  4096 Dec 16 00:53 涓杞?
    drwxr-xr-x.  2 root root  4096 Dec 16 20:31 ?
    drwxr-xr-x.  2 root root  4096 Dec 16 20:31 彗
    drwxr-xr-x.  2 root root  4096 Dec 16 20:31 骀。
    drwxr-xr-x.  2 root root  4096 Dec 16 20:31 妗?
    drwxr-xr-x.  2 root root  4096 Dec 16 20:31 妯℃
    drwxr-xr-x.  2 root root  4096 Dec 16 20:31 瑙棰
    drwxr-xr-x.  2 root root  4096 Dec 16 20:31 槌涔[0m
    
    可以看到文件属性从左往右分为7列来显示:

    比如:

    drwxr-xr-x.【1】   4【2】     root【3】     root【4】       4096【5】        Dec 16 00:51【6】     .mozilla【7】
    上述7列分别代表的意思如下:

    ①  第一列代表这个文件的类型与权限(permission):

    仔细看会发现这一列有10个字符:

    比如:上述示例文件中的:

    drwxr-xr-x
    I、第一个字符代表的是文件类型(目录或文件等),取值有如下几种:

    • 当为[ d ]则是目录;
    • 当为[ - ]则是文件;
    • 若是[ l ]则表示为连结档(link file);
    • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
    II、接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
    • 第一组为『文件拥有者的权限』,以『install.log』那个文件为例, 该文件的拥有者可以读写,但不可执行;
    • 第二组为『同群组的权限』;
    • 第三组为『其他非本群组的权限』。
    例:

    若有一个文件的类型与权限数据为『-rwxr-xr--』,请说明其意义为何?

    答:

    先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示:
     [-] [rwx] [r-x] [r--]
     1   234  567   890
     1 为:代表这个文件名为目录或文件,本例中为文件(-);
    234为:拥有者的权限,本例中为可读、可写、可执行(rwx);
    567为:同群组用户权力,本例中为可读可执行(rx);
    890为:其他用户权力,本例中为可读(r)

    同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了。

    ②  第二列表示有多少文件或文件夹连结到此节点(i-node):

    每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码。

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

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

    ⑤ 第五列为这个文件的容量大小,默认单位为bytes。

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

    ⑦ 第七列为这个文件的文件名

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

    例题:
    假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限为何?
    -rw-r--r--  1 root     root          238 Jun 18 17:22 test.txt 
    
    -rwxr-xr--  1 test1    testgroup    5238 Jun 19 10:25 ping_tsai
    答:
    • 文件test.txt的拥有者为root,所属群组为root。至于权限方面则只有root这个账号可以存取此文件,其他人则仅能读此文件;

    • 另一个文件ping_tsai的拥有者为test1,而所属群组为testgroup。其中:
      • test1 可以针对此文件具有可读可写可执行的权力;
      • 而同群组的test2, test3两个人与test1同样是testgroup的群组账号,则仅可读可执行但不能写(亦即不能修改);
      • 至于非testgoup这一个群组的人则仅可以读,不能写也不能执行!

    二、 Linux下文件权限的重要性:

    与Windows系统不一样的是,在Linux系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在『数据安全性』上面的。

    • 系统保护的功能:
      举个简单的例子,在你的系统中,关于系统服务的文件通常只有root才能读写或者是执行,例如/etc/shadow这一个账号管理的文件,由于该文件记录了你系统中所有账号的数据, 因此是很重要的一个配置文件,当然不能让任何人读取(否则密码会被窃取啊),只有root才能够来读取啰!所以该文件的权限就会成为[ -rw------- ]啰!

    • 团队开发软件或数据共享的功能:
      此外,如果你有一个软件开发团队,在你的团队中,你希望每个人都可以使用某一些目录下的文件, 而非你的团队的其他人则不予以开放呢?以上面的例子来说,testgroup的团队共有三个人,分别是test1, test2, test3,那么我就可以将团队所需的文件权限订为[ -rwxrwx--- ]来提供给testgroup的工作团队使用啰!

    • 未将权限设定妥当的危害:
      再举个例子来说,如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞啰! 例如本来只有root才能做的开关机、ADSL的拨接程序、新增或删除用户等等的指令,若被你改成任何人都可以执行的话, 那么如果使用者不小心给你重新启动啦!重新拨接啦!等等的!那么你的系统不就会常常莫名其妙的挂掉啰! 而且万一你的用户的密码被其他不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些root的工作!

    可怕吧!因此,在你修改你的linux文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变的!千万注意啰!接下来我们来处理一下文件属性与权限的变更吧!

    三、Linux下文件属性与权限的修改

    我们现在知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于使用者与群组的相关性, 那么如何修改一个文件的属性与权限呢?又!有多少文件的权限我们可以修改呢? 其实一个文件的属性与权限有很多!我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:

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

    改变一个文件的群组,使用 chgrp 命令 (即change group的缩写),不过要注意一点,要被改变的组名必须要在 /etc/group 文件内存在才可以,否则会显示错误。

    例:

    [root@localhost softwore]# ls -al
    total 134856
    drwxr-xr-x.  2 root root      4096 Dec 16 20:16 .
    drwxr-xr-x. 16 root root      4096 Dec 16 20:41 ..
    -rw-r--r--.  1 root root 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
    
    [root@localhost softwore]# chgrp elgin jdk-7u79-linux-x64.rpm
    [root@localhost softwore]# ls -al
    total 134856
    drwxr-xr-x.  2 root root       4096 Dec 16 20:16 .
    drwxr-xr-x. 16 root root       4096 Dec 16 20:41 ..
    -rw-r--r--.  1 root elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
    

    对于 softwore文件夹下的 jdk-7u79-linux-x64.rpm 文件 

    开始他的文件属性中,群组为 root ,使用chgrp 命令之后 ,群组变为了 elgin

    ② 改变文件拥有者: chown 命令

    使用此命令,需要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有记录的用户名称才能改变。

    例:

    [root@localhost softwore]# chown elgin jdk-7u79-linux-x64.rpm
    [root@localhost softwore]# ls -al
    total 134856
    drwxr-xr-x.  2 root  root       4096 Dec 16 20:16 .
    drwxr-xr-x. 16 root  root       4096 Dec 16 20:41 ..
    -rw-r--r--.  1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
    
    使用此命令后,上述文件的拥有者 变为了 elgin

    注意:如果要改变整个目录的群组或者拥有者,可以在change命令后面加上 -R 作为参数(表示进行递归的变更) ,如: chgrp -R elgin softwore 

    ③  改变文件权限: chmod命令

    文件权限的改变使用的是chmod这个指令,但是,权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。下面分别进行说明:

    A 、数字类型改变文件权限

    • 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的语法是这样的:chmod 770 filename;
    例:
    [root@localhost softwore]# ls -al *.rpm
    -rw-r--r--. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
    [root@localhost softwore]# chmod 777 *.rpm
    [root@localhost softwore]# ls -al *.rpm
    -rwxrwxrwx. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
    [root@localhost softwore]# chmod 644 *.rpm
    [root@localhost softwore]# ls -al *.rpm
    -rw-r--r--. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm<span style="color:#ff0000;">
    </span>
    将jdk的文件权限修改为 777 ,即 -rwxrwxrwx 再修改回原来的权限644 ,即 -rw-r--r--

    B、符号类型改变文件权限 

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

      chmod u
      g
      o
      a
      +(加入)
      -(除去)
      =(设定)
      r
      w
      x
      文件或目录

    例:
    [root@localhost softwore]# chmod ugo=rwx *.rpm
    [root@localhost softwore]# ls -al
    total 134856
    drwxr-xr-x.  2 root  elgin      4096 Dec 16 20:16 .
    drwxr-xr-x. 16 root  root       4096 Dec 16 20:41 ..
    -rwxrwxrwx.  1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
    [root@localhost softwore]# chmod u=rw-,g=r--,o=r-- *.rpm
    [root@localhost softwore]# ls -al
    total 134856
    drwxr-xr-x.  2 root  elgin      4096 Dec 16 20:16 .
    drwxr-xr-x. 16 root  root       4096 Dec 16 20:41 ..
    -rw-r--r--.  1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
    
    同样,将jdk文件的权限修改为 -rwxrwxrwx ,再修改回原来的权限 -rw-r--r--

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

    ①  权限对文件的重要性

    文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:

    • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
    • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
    • x (execute):该文件具有可以被系统执行的权限。

    那个可读(r)代表读取文件内容是还好了解,那么可执行(x)呢?这里你就必须要小心啦! 因为在Windows底下一个文件是否具有执行的能力是藉由『 扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的

    至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对『文件的内容』而言,与文件档名的存在与否没有关系喔!因为文件记录的是实际的数据嘛!
    ②  权限对目录的重要性

    文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?

    • r (read contents in directory)

      表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

    • w (modify contents of directory)

      这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:

      • 建立新的文件与目录;
      • 删除已经存在的文件与目录(不论该文件的权限为何!)
      • 将已存在的文件或目录进行更名;
      • 搬移该目录内的文件、目录位置。

      总之,目录的w权限就与该目录底下的文件名异动有关就对了啦!

    • x (access directory)

      目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰!





  • 相关阅读:
    python之Queue
    rebase after merge
    Heroku使用note
    Adapter, Proxy, Decrator, and AOP
    How rackup works
    sonar插件实战
    2012rubyconfchina小记
    Sonar安装使用篇
    sonar原理扩展篇
    javascript 实现拖动效果
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293734.html
Copyright © 2011-2022 走看看