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)啰!





原文地址:https://www.cnblogs.com/elgin-seth/p/5293734.html