鸟哥:Linux 的文件权限
Linux 最优秀的地方之一就在于他的多人多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。 Linux 一般将文件可存取的身份分为三个
5.1 使用者与群组 Linux 最优秀的地方之一就在于他的多人多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。 Linux 一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有read/write/execute 等权限。 文件拥有者 当你将你的e-mail 情书转存成文件之后,放在你自己的目录,你总不希望被其他人看见自己的情书吧? 这个时候,你可疑把该文件设定成『只有文件拥有者才能看与修改这个文件的内容』。 群组概念 群组最有用的功能之一,就是当你在团队开发资源的时候啦! 举例来说,假设有两组专题在我的主机里面,第一个专题组别为projecta,里面的成员有class1, class2, class3 三个;第二个专题组别为projectb,里面的成员有class4, class5, class6。每组的组员之间必须要能够互相修改对方的数据, 但是其他组的组员则不能看到本组的文件内容。 另外,如果teacher 这个账号是projecta 与projectb 这两个专题的老师, 他想要同时观察两者的进度,因此需要能够进入这两个群组的权限时,你可以设定teacher 这个账号, 『同时支持projecta 与projectb 这两个群组!』,也就是说:每个账号都可以有多个群组的支持! Linux 用户身份与群组记录的文件 在我们 Linux 系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root 的相关信息,都是记录在/etc/passwd 这个文件内的。至于个人的密码则是记录在/etc/shadow 这个文件下。此外,Linux 所有的组名都纪录在/etc/group 内! 5.2 Linux 文件权限概念 5.2.1 Linux 文件属性 在你以dmtsai 登入系统,然后使用su - 切换身份成为 root后, 下达『 ls -al 』:
ls 是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有的文件详细的权限与属性(包含隐藏文件,就是文件名第一个字符为『. 』的文件)。 第一栏代表这个文件的类型与权限(permission): 第一个字符代表这个文件是『目录、文件或链接文件等等』: 接下来的字符中,以三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。如果没有权限,就为减号[ - ]。 第二栏表示有多少档名连结到此节点(i-node): 每个文件都会将他的权限与属性记录到文件系统的i-node 中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个 i-node 啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node 号码去就是了。关于 i-node 的相关资料我们会在第七章谈到文件系统时再加强介绍的。 第三栏表示这个文件(或目录)的『拥有者账号』 第四栏表示这个文件的所属群组 在 Linux 系统下,你的账号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta 这个群组,假设某个文件所属的群组为projecta,且该文件的权限(-rwxrwx---),则 class1, class2, class3 三人对于该文件都具有可读、可写、可执行的权限。但如果是不属于 projecta 的其他账号,对于此文件就不具有任何权限了。 第五栏为这个文件的容量大小,默认单位为bytes; 第六栏为这个文件的建档日期或者是最近的修改日期 第七栏为这个文件的档名 这个字段就是档名了。比较特殊的是:如果档名之前多一个『. 』,则代表这个文件为『隐藏档』,例如上表中的.config 那一行,该文件就是隐藏档。你可以使用『ls』及『ls -a』这两个指令去感受一下什么是隐藏档! 5.2.3 目录与文件之权限意义: 权限对文件的重要性 文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。权限对于文件来说,他的意义是这样的: 在Windows 底下一个文件是否具有执行的能力是藉由『扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在Linux 底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的! 权限对目录的重要性 目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! r (read contents in directory): 表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。你可以利用ls 这个指令将该目录的内容列表显示出来! w (modify contents of directory): 这个可写入的权限对目录来说, 他表示你具有异动该目录结构列表的权限,也就是: 总之,目录的w 权限就与该目录底下的文件名异动有关就对啦! x (access directory): 目录的执行权限有啥用途?目录的x 代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux 时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰! 能不能进入某一个目录,只与该目录的x 权限有关! 此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x 的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r 或w 的权限。 很多朋友在架设网站的时候都会卡在一些权限的设定上,他们开放目录数据给因特网的任何人来浏览,却只开放 r 的权限,那样的结果就是导致网站服务器软件无法到该目录下读取文件(最多只能看到文件名), 最终用户总是无法正确的查阅到文件的内容(显示权限不足啊!)。要注意:要开放目录给任何人浏览时,应该至少也要给予r 及x 的权限,但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 这个账号,那么这个账号针对/dir1, /dir1/file1, /dir2 这三个档名来说,分别需要『哪些最小的权限』才能达成各项任务? 上面的表格当中,很多时候/dir1 都不必有r 。只是,没有r 的话,使用[tab] 时,他就无法自动帮你补齐档名了! 要读一个文件时,你得要具有『这个文件所在目录的x 权限』才行!所以,通常要开放的目录, 至少会具备rx 这两个权限! 5.2.2 如何改变文件属性与权限 chgrp :改变文件所属群组 这个指令就是change group 的缩写!不过,请记得,改变后的组名必须要在/etc/group 文件内存在才行,否则会显示错误!
改变文件拥有者, chown 改变拥有者就是change owner,那就是chown 这个指令的用途,要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。 chown 还可以顺便直接修改群组的名称!
什么时候要使用chown 或chgrp 呢?最常见的例子就是在复制文件给你之外的其他人时: 假设你今天要将.bashrc 这个文件拷贝成为.bashrc_test 档名,且是要给bin 这个人:
由于复制行为(cp)会复制执行者的属性与权限。.bashrc_test 还是属于root 所拥有, 如此一来,即使你将文件拿给bin 这个使用者了,那他仍然无法修改的。 改变权限, chmod 权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。 数字类型改变文件权限 Linux 文件的基本权限就有九个,分别是owner/group/others 三种身份各有自己的read/write/execute 权限,我们可以使用数字来代表各个权限,各权限的分数对照表如下: r:4,w:2,x:1 当权限为: [-rwxrwx---] 分数则是: 所以等一下我们设定权限的变更时,该文件的权限数字就是770 啦!变更权限的指令chmod 的语法是这样的:
符号类型改变文件权限 假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时:
5.2.4 Linux 文件种类与扩展名 文件种类 普通文件(regular file ): 在由ls -al 所显示出来的属性方面,第一个字符为[ - ],例如[-rwxrwxrwx ]。依照文件的内容,又大略可以分为: 目录(directory): 第一个属性为[ d ],例如[drwxrwxrwx]。 连接文件(link): 就是类似Windows 系统底下的快捷方式啦! 第一个属性为[ l ](英文L 的小写),例如[lrwxrwxrwx] 设备与装置文件(device): 与系统外设及储存等相关的一些文件linux权限, 通常都集中在/dev 这个目录之下!通常又分为两种: 套接字(sockets): 这种类型的文件通常被用在网络上的数据连接。我们可以启动一个程序来监听客户端的请求, 而客户端就可以透过这个socket 来进行数据的通信。其第一个属性为[ s ]。 管道(FIFO, pipe): FIFO 也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO是first-in-first-out 的缩写。第一个属性为[p] 。 Linux 文件扩展名: 基本上,Linux 的文件是没有所谓的『扩展名』的。在Linux 底下,只要你的权限当中具有x 的话,例如[ -rwxr-xr-x ] 即代表这个文件可以被执行! 不过,可以被执行跟可以执行成功是不一样的。举例来说,在root 家目录下的initial-setup-ks.cfg 是一个纯文本档,如果经由修改权限成为-rwxrwxrwx 后,这个文件能够真的执行成功吗? 当然不行,因为他的内容根本就没有可以执行的数据。 虽然如此,不过我们仍然希望可以藉由扩展名来了解该文件是什么东西。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |