Linux——目录与文件的权限意义

时间:2024-04-11 10:12:25

权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(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)这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:
    (1)建立新的文件与目录;(2)搬移该目录内的文件、目录位置。
    (3)将已存在的文件或目录进行更名;(4)删除已经存在的文件与目录(不论该文件的权限为何!)
    总之,目录的w 权限就与该目录底下的文件名异动有关就对了啦!
  • x (access directory)目录不可以被执行,目录的 x 代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入 Linux 时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd(change directory)啰!

 现在假设『文件是一堆文件文件夹』,所以你可能可以在上面写/改一些资料。而『目录是一堆抽屉』,因此你可以将文件夹分类放置到不同的抽屉去。 因此抽屉最大的目的是拿出/放入文件夹喔!现在让我们汇整一下数据:

Linux——目录与文件的权限意义

根据上述的分析,你可以看到,对一般文件来说,rwx 主要是针对『文件的内容』来设计权限,对目录来说,rwx 则是针对『目录内的文件名列表』来设计权限。 其中最有趣的大概就属目录的 x 权限了!『档名怎么执行』?没道理嘛!其实,这个 x 权限设计,就相当于『该目录,也就是该抽屉的 " 钥匙" 』啦! 没有钥匙你怎么能够打开抽屉呢?对吧!

大致的目录权限概念是这样,底下我们来看几个范例,让你了解一下啥是目录的权限啰!

例题:

有个目录的权限如下所示:

drwxr--r--  3  root  root  4096   Jun 25 08:35   .ssh

系统有个账号名称为 vbird,这个账号并没有支持 root 群组,请问 vbird 对这个目录有何权限?是否可切换到此目录中?

答:

vbird 对此目录仅具有 r 的权限,因此 vbird 可以查询此目录下的文件名列表。因为 vbird 不具有x 的权限,亦即 vbird

没有这个抽屉的钥匙啦! 因此vbird 并不能切换到此目录内!(相当重要的概念!)

上面这个例题中因为 vbird 具有 r 的权限,因为是 r 乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的 x 权限有关啦!此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有 x 的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的 r w 的权限。

很多朋友在架设网站的时候都会卡在一些权限的设定上,他们开放目录数据给因特网的任何人来浏览, 却只开放 r 的权限,如上面的范例所示那样,那样的结果就是导致网站服务器软件无法到该目录下读取文件(最多只能看到文件名), 最终用户总是无法正确的查阅到文件的内容(显示权限不足啊!)。要注意:要开放目录给任何人浏览时,应该至少也要给予 r 及 x 的权限,但 w 权限不可随便给! 为什么 w 不能随便给,我们来看下一个例子:

例题:

假设有个账号名称为 dmtsai,他的家目录在/home/dmtsai/,dmtsai 对此目录具有[rwx]的权限。 若在此目录下有个名为 the_root.data 的文件,该文件的权限如下:

-rwx------ 1 root  root  4365 Sep 19 23:20  the_root.data

请问 dmtsai 对此文件的权限为何?可否删除此文件? 答:

如上所示,由于 dmtsai 对此文件来说是『others』的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个文件的内容就是了。但是由于这个文件在他的家目录下, 他在此目录下具有rwx 的完整权限,因此对于 the_root.data 这个『档名』来说,他是能够『删除』的! 结论就是,dmtsai 这个用户能够删除 the_root.data 这个文件!

注意:上述的例子解释是这样的,假设有个莫名其妙的人,拿着一个完全密封的文件夹放到你的办公室抽屉中,因为完全密封你也打不开、看不到这个文件夹的内部数据(对文件来说,你没有权限)。 但是因为这个文件夹是放在你的抽屉中,你当然可以拿出/放入任何数据在这个抽屉中(对目录来说,你具有所有权限)。 所以,情况就是:你打开抽屉、拿出这个没办法看到的文件夹、将他丢到走廊上的垃圾桶!搞定了 (顺利删除!)

还是看不太懂?有听没有懂喔!没关系~我们底下就来设计一个练习, 让你实际玩玩看,应该就能够比较近入状况啦!不过,由于很多指令我们还没有教, 所以底下的指令有的先了解即可,详细的指令用法我们会在后面继续介绍的。

1、先用 root 的身份建立所需要的文件与目录环境

我们用 root 的身份在所有人都可以工作的/tmp 目录中建立一个名为 testing 的目录, 该目录的权限为744 且目录拥有者为 root。另外,在 testing 目录下在建立一个空的文件, 档名亦为 testing。建立目录可用 mkdir(make directory),建立空文件可用touch来处理。 所以过程如下所示:

Linux——目录与文件的权限意义

2、一般用户的读写权限为何?观察中

在上面的例子中,虽然目录是 744 的权限设定,一般用户应该能有 r 的权限, 但这样的权限使用者能做啥事呢?由于鸟哥的系统中含有一个账号名为 dmtsai 的,请再开另外一个终端机,使用 dmtsai 登入来操作底下的任务!

Linux——目录与文件的权限意义

3、如果该目录属于用户本身,会有什么状况?

上面的练习知道了只有 r 确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到的, 同时也不能将该目录变成工作目录(cd  进入该目录之意)。那如果我们让该目录变成用户的, 那么用户在这个目录底下是否能够删除文件呢?底下的练习做看看:

Linux——目录与文件的权限意义

透过上面这个简单的步骤,你就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建文件或目录, 是个很重要的参数啊!这样可以理解了吗?! ^_^

4、用户操作功能与权限

刚刚讲这样如果你还是搞不懂~没关系,我们来处理个特殊的案例!假设两个档名,分别是底下这样:

  • /dir1/file1
  • /dir2

假设你现在在系统使用 dmtsai 这个账号,那么这个账号针对 /dir1, /dir1/file1, /dir2  这三个档名来说, 分别需要『哪些最小的权限』才能达成各项任务? 汇整如下:

Linux——目录与文件的权限意义

你可能会问,上面的表格当中,很多时候 /dir1 都不必有 r 耶!为啥?我们知道 /dir1 是个目录, 也是个抽屉!那个抽屉的 r 代表『这个抽屉里面有灯光』, 所以你能看到的抽屉内的所有文件夹名(非内容)。但你已经知道里面的文件夹放在哪个地方,那,有没有灯光有差嘛?你还是可以摸黑拿到该文件夹的!对吧! 因此,上面很多动作中,你只要具有 即可!r  是非必备的!只是,没有r 的话,使用 [tab] 时,他就无法自动帮你补齐档名了!这样理解乎?

注意:看了上面这个表格,你应该会觉得很可怕喔!因为,要读一个文件时,你得要具有『这个文件所在目录的 x 权限』才行!所以,通常要开放的目录, 至少会具备 rx 这两个权限!现在你知道为啥了吧?