💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 6.8 本章习题: ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) * * * 情境仿真题一:假设系统中有两个帐号,分别是 alex 与 arod ,这两个人除了自己群组之外还共同支持一个名为 project 的群组。假设这两个用户需要共同拥有 /srv/ahome/ 目录的开发权,且该目录不许其他人进入查阅。 请问该目录的权限设置应为何?请先以传统权限说明,再以 SGID 的功能解析。 * 目标:了解到为何专案开发时,目录最好需要设置 SGID 的权限! * 前提:多个帐号支持同一群组,且共同拥有目录的使用权! * 需求:需要使用 root 的身份来进行 chmod, chgrp 等帮用户设置好他们的开发环境才行! 这也是管理员的重要任务之一! 首先我们得要先制作出这两个帐号的相关数据,帐号/群组的管理在后续我们会介绍, 您这里先照着下面的指令来制作即可: ``` [root@study ~]# groupadd project <==增加新的群组 [root@study ~]# useradd -G project alex <==创建 alex 帐号,且支持 project [root@study ~]# useradd -G project arod <==创建 arod 帐号,且支持 project [root@study ~]# id alex <==查阅 alex 帐号的属性 uid=1001(alex) gid=1002(alex) groups=1002(alex),1001(project) <==确实有支持! [root@study ~]# id arod uid=1002(arod) gid=1003(arod) groups=1003(arod),1001(project) <==确实有支持! ``` 然后开始来解决我们所需要的环境吧! 1. 首先创建所需要开发的专案目录: ``` [root@study ~]# mkdir /srv/ahome [root@study ~]# ll -d /srv/ahome drwxr-xr-x. 2 root root 6 Jun 17 00:22 /srv/ahome ``` 2. 从上面的输出结果可发现 alex 与 arod 都不能在该目录内创建文件,因此需要进行权限与属性的修改。 由于其他人均不可进入此目录,因此该目录的群组应为project,权限应为770才合理。 ``` [root@study ~]# chgrp project /srv/ahome [root@study ~]# chmod 770 /srv/ahome [root@study ~]# ll -d /srv/ahome drwxrwx---. 2 root project 6 Jun 17 00:22 /srv/ahome # 从上面的权限结果来看,由于 alex/arod 均支持 project,因此似乎没问题了! ``` 3. 实际分别以两个使用者来测试看看,情况会是如何?先用 alex 创建文件,然后用 arod 去处理看看。 ``` [root@study ~]# su - alex <==先切换身份成为 alex 来处理 [alex@www ~]$ cd /srv/ahome <==切换到群组的工作目录去 [alex@www ahome]$ touch abcd <==创建一个空的文件出来! [alex@www ahome]$ exit <==离开 alex 的身份 [root@study ~]# su - arod [arod@www ~]$ cd /srv/ahome [arod@www ahome]$ ll abcd -rw-rw-r--. 1 alex alex 0 Jun 17 00:23 abcd # 仔细看一下上面的文件,由于群组是 alex ,arod并不支持! # 因此对于 abcd 这个文件来说, arod 应该只是其他人,只有 r 的权限而已啊! [arod@www ahome]$ exit ``` 由上面的结果我们可以知道,若单纯使用传统的 rwx 而已,则对刚刚 alex 创建的 abcd 这个文件来说, arod 可以删除他,但是却不能编辑他!这不是我们要的样子啊!赶紧来重新规划一下。 4. 加入 SGID 的权限在里面,并进行测试看看: ``` [root@study ~]# chmod 2770 /srv/ahome [root@study ~]# ll -d /srv/ahome drwxrws---. 2 root project 17 Jun 17 00:23 /srv/ahome 测试:使用 alex 去创建一个文件,并且查阅文件权限看看: [root@study ~]# su - alex [alex@www ~]$ cd /srv/ahome [alex@www ahome]$ touch 1234 [alex@www ahome]$ ll 1234 -rw-rw-r--. 1 alex project 0 Jun 17 00:25 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)文件的隐藏属性,可以使用什么指令来查询?ls -al file lsattr * 尝试用 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) 的意思啰!