我们知道权限对於使用者帐号来说是非常重要的,因为他可以限制使用者能不能读取/创建/删除/修改文件或目录! 在这一章我们介绍了很多文件系统的管理命令,第六章则介绍了很多文件权限的意义。在这个小节当中, 我们就将这两者结合起来,说明一下什么命令在什么样的权限下才能够运行吧!^_^
一、让使用者能进入某目录成为『可工作目录』的基本权限为何:
- 可使用的命令:例如 cd 等变换工作目录的命令;
- 目录所需权限:使用者对这个目录至少需要具有 x 的权限
- 额外需求:如果使用者想要在这个目录内利用 ls 查阅档名,则使用者对此目录还需要 r 的权限。
二、使用者在某个目录内读取一个文件的基本权限为何?
- 可使用的命令:例如本章谈到的 cat, more, less等等
- 目录所需权限:使用者对这个目录至少需要具有 x 权限;
- 文件所需权限:使用者对文件至少需要具有 r 的权限才行!
三、让使用者可以修改一个文件的基本权限为何?
- 可使用的命令:例如 nano 或未来要介绍的 vi 编辑器等;
- 目录所需权限:使用者在该文件所在的目录至少要有 x 权限;
- 文件所需权限:使用者对该文件至少要有 r, w 权限
四、让一个使用者可以创建一个文件的基本权限为何?
- 目录所需权限:使用者在该目录要具有 w,x 的权限,重点在 w 啦!
五、让使用者进入某目录并运行该目录下的某个命令之基本权限为何?
- 目录所需权限:使用者在该目录至少要有 x 的权限;
- 文件所需权限:使用者在该文件至少需要有 x 的权限
例题:让一个使用者 vbird 能够进行『cp /dir1/file1 /dir2』的命令时,请说明 dir1, file1, dir2 的最小所需权限为何?
答:运行 cp 时, vbird 要『能够读取来源档,并且写入目标档!』所以应参考上述第二点与第四点的说明! 因此各文件/目录的最小权限应该是:
- dir1 :至少需要有 x 权限;
- file1:至少需要有 r 权限;
- dir2 :至少需要有 w, x 权限。
例题:有一个文件全名为 /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 就可以罗! 这可是很重要的概念喔!
重点回顾
- 绝对路径:『一定由根目录 / 写起』;相对路径:『不是由 / 写起』
- 特殊目录有:., .., -, ~, ~account需要注意;
- 与目录相关的命令有:cd, mkdir, rmdir, pwd 等重要命令;
- rmdir 仅能删除空目录,要删除非空目录需使用『 rm -r 』命令;
- 使用者能使用的命令是依据 PATH 变量所规定的目录去搜寻的;
- 不同的身份(root 与一般用户)系统默认的 PATH 并不相同。差异较大的地方在於 /sbin, /usr/sbin ;
- ls 可以检视文件的属性,尤其 -d, -a, -l 等选项特别重要!
- 文件的复制、删除、移动可以分别使用:cp, rm , mv等命令来操作;
- 检查文件的内容(读档)可使用的命令包括有:cat, tac, nl, more, less, head, tail, od 等
- cat -n 与 nl 均可显示行号,但默认的情况下,空白行会不会编号并不相同;
- touch 的目的在修改文件的时间参数,但亦可用来创建空文件;
- 一个文件记录的时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime),ls 默认显示的是 mtime。
- 除了传统的rwx权限之外,在Ext2/Ext3文件系统中,还可以使用chattr与lsattr配置及观察隐藏属性。 常见的包括只能新增数据的 +a 与完全不能更动文件的 +i 属性。
- 新建文件/目录时,新文件的默认权限使用 umask 来规范。默认目录完全权限为drwxrwxrwx, 文件则为-rw-rw-rw-。
- 文件具有SUID的特殊权限时,代表当使用者运行此一binary程序时,在运行过程中使用者会暂时具有程序拥有者的权限
- 目录具有SGID的特殊权限时,代表使用者在这个目录底下新建的文件之群组都会与该目录的群组名称相同。
- 目录具有SBIT的特殊权限时,代表在该目录下使用者创建的文件只有自己与root能够删除!
- 观察文件的类型可以使用 file 命令来观察;
- 搜寻命令的完整档名可用 which 或 type ,这两个命令都是透过 PATH 变量来搜寻档名;
- 搜寻文件的完整档名可以使用 whereis 或 locate 到数据库文件去搜寻,而不实际搜寻文件系统;
- 利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的档名。
本章习题
( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )
情境模拟题一:假设系统中有两个帐号,分别是 alex 与 arod ,这两个人除了自己群组之外还共同支持一个名为 project 的群组。假设这两个用户需要共同拥有 /srv/ahome/ 目录的开发权,且该目录不许其他人进入查阅。 请问该目录的权限配置应为何?请先以传统权限说明,再以 SGID 的功能解析。
- 目标:了解到为何专案开发时,目录最好需要配置 SGID 的权限!
- 前提:多个帐号支持同一群组,且共同拥有目录的使用权!
- 需求:需要使用 root 的身份来进行 chmod, chgrp 等帮用户配置好他们的开发环境才行! 这也是管理员的重要任务之一!
首先我们得要先制作出这两个帐号的相关数据,帐号/群组的管理在后续我们会介绍, 您这里先照著底下的命令来制作即可:
[AppleScript] ı鿴 ƴ [root@www ~]# groupadd project <==添加新的群组
[root@www ~]# useradd -G project alex <==创建 alex 帐号,且支持 project
[root@www ~]# useradd -G project arod <==创建 arod 帐号,且支持 project
[root@www ~]# id alex <==查阅 alex 帐号的属性
uid=501(alex) gid=502(alex) groups=502(alex),501(project) <==确实有支持!
[root@www ~]# id arod
uid=502(arod) gid=503(arod) groups=503(arod),501(project)
然后开始来解决我们所需要的环境吧!
首先创建所需要开发的专案目录:
[AppleScript] ı鿴 ƴ [root@www ~]# mkdir /srv/ahome
[root@www ~]# ll -d /srv/ahome
drwxr-xr-x 2 root root 4096 Sep 29 22:36 /srv/ahome
从上面的输出结果可发现 alex 与 arod 都不能在该目录内创建文件,因此需要进行权限与属性的修改。 由於其他人均不可进入此目录,因此该目录的群组应为project,权限应为770才合理。
[AppleScript] ı鿴 ƴ [root@www ~]# chgrp project /srv/ahome
[root@www ~]# chmod 770 /srv/ahome
[root@www ~]# ll -d /srv/ahome
drwxrwx--- 2 root project 4096 Sep 29 22:36 /srv/ahome
# 从上面的权限结果来看,由於 alex/arod 均支持 project,因此似乎没问题了!
实际分别以两个使用者来测试看看,情况会是如何?先用 alex 创建文件,然后用 arod 去处理看看。
[AppleScript] ı鿴 ƴ [root@www ~]# su - alex <==先切换身份成为 alex 来处理
[alex@www ~]$ cd /srv/ahome <==切换到群组的工作目录去
[alex@www ahome]$ touch abcd <==创建一个空的文件出来!
[alex@www ahome]$ exit <==离开 alex 的身份
[root@www ~]# su - arod
[arod@www ~]$ cd /srv/ahome
[arod@www ahome]$ ll abcd
-rw-rw-r-- 1 alex alex 0 Sep 29 22:46 abcd
# 仔细看一下上面的文件,由於群组是 alex ,arod并不支持!
# 因此对於 abcd 这个文件来说, arod 应该只是其他人,只有 r 的权限而已啊!
[arod@www ahome]$ exit
由上面的结果我们可以知道,若单纯使用传统的 rwx 而已,则对刚刚 alex 创建的 abcd 这个文件来说, arod 可以删除他,但是却不能编辑他!这不是我们要的样子啊!赶紧来重新规划一下。
加入 SGID 的权限在里面,并进行测试看看:
[AppleScript] ı鿴 ƴ [root@www ~]# chmod 2770 /srv/ahome
[root@www ~]# ll -d /srv/ahome
drwxrws--- 2 root project 4096 Sep 29 22:46 /srv/ahome
测试:使用 alex 去创建一个文件,并且查阅文件权限看看:
[root@www ~]# su - alex
[alex@www ~]$ cd /srv/ahome
[alex@www ahome]$ touch 1234
[alex@www ahome]$ ll 1234
-rw-rw-r-- 1 alex project 0 Sep 29 22:53 1234
# 没错!这才是我们要的样子!现在 alex, arod 创建的新文件所属群组都是 project,
# 由於两人均属於此群组,加上 umask 都是 002,这样两人才可以互相修改对方的文件!
所以最终的结果显示,此目录的权限最好是『2770』,所属文件拥有者属於root即可,至於群组必须要为两人共同支持的project 这个群组才行!
简答题部分:
什么是绝对路径与相对路径?答案:绝对路径的写法为由 / 开始写,至於相对路径则不由 / 开始写!此外,相对路径为相对於目前工作目录的路径!
如何更改一个目录的名称?答案:例如由 /home/test 变为 /home/test2mv /home/test /home/test2
PATH 这个环境变量的意义?答案:这个是用来指定运行档运行的时候,命令搜寻的目录路径。
umask 有什么用处与优点?答案:umask 可以拿掉一些权限,因此,适当的定义 umask 有助於系统的安全, 因为他可以用来创建默认的目录或文件的权限。
当一个使用者的 umask 分别为 033 与 044 他所创建的文件与目录的权限为何?答案:在 umask 为 033 时,则默认是拿掉 group 与 other 的 w(2)x(1) 权限,因此权限就成为『文件 -rw-r--r-- , 目录 drwxr--r-- 』而当 umask 044 时,则拿掉 r 的属性,因此就成为『文件 -rw--w--w-,目录 drwx-wx-wx』
什么是 SUID ?答案:当一个命令具有 SUID 的功能时,则:SUID 权限仅对二进位程序(binary program)有效;
答案:运行者对於该程序需要具有 x 的可运行权限;本权限仅在运行该程序的过程中有效 (run-time);运行者将具有该程序拥有者 (owner) 的权限。
当我要查询 /usr/bin/passwd 这个文件的一些属性时(1)传统权限;(2)文件类型与(3)文件的隐藏属性,可以使用什么命令来查询?
尝试用 find 找出目前 linux 系统中,所有具有 SUID 的文件有哪些?答案:find / -perm +4000 -print
找出 /etc 底下,文件大小介於 50K 到 60K 之间的文件,并且将权限完整的列出 (ls -l):
- find /etc -size +50k -a -size -60k -exec ls -l {} \;
- 注意到 -a ,那个 -a 是 and 的意思,为符合两者才算成功
找出 /etc 底下,文件容量大於 50K 且文件所属人不是 root 的档名,且将权限完整的列出 (ls -l);
- find /etc -size +50k -a ! -user root -exec ls -ld {} \;
- find /etc -size +50k -a ! -user root -type f -exec ls -l {} \;
- 上面两式均可!注意到 ! ,那个 ! 代表的是反向选择,亦即『不是后面的项目』之意!
找出 /etc 底下,容量大於 1500K 以及容量等於 0 的文件:
find /etc -size +1500k -o -size 0
相对於 -a ,那个 -o 就是或 (or) 的意思罗!
参考数据与延伸阅读
小洲大大回答 SUID/SGID 的一篇讨论:http://phorum.vbird.org/viewtopic.php?t=20256
|