Linux 权限的目的是在'保护某些人的档案资料',因此,读者在认识'权限'的角度上,应该要思考的是'这个档案的权限设定后, 会造成哪个个人? 或某群人的读写开放或保护"。 所以,这些权限最终都是'应用在某个/某群帐号'上面! 而且,权限都是'设定在档案/目录'上, 不是设定在帐号上面的,这也要先厘清。
Linux 的文件权限在设置上,主要依据三种身份来决定,包括:
user / owner / 文件所有者 / 用户:就是文件所属人
group / 组:这个文件附属于那一个群组团队
others / 其他人:不是 user 也没加入 group 的帐号,就是其他人。
底下以一个小案例来说明这三种身份的用法。
假设读者还在学校当老师,你有一本书要让班上同学借阅,但你又不想管,此时你会如何决定'这本书 (档案)』的命运? 通常的作法是:
用户:让某个学生当小老师,这本书就归他管 (用户),同学要借得要透过这位小老师
群组:任何加入本班的同学 (一群帐号) 都是本班群组,这本书对本班群组的同学来说,大家都能借阅。
其他人:不是本班的同学,例如隔壁班的阿花与阿咪,对这本书来说,他们都是属于'其他人',其他人没有权限可以借阅这本书。
由上面这个简单的小案例,读者应该能够知道,Linux 上面的档案'都是针对账号'来进行管理的, 只是为了方便管理上的设定 (班级同学与非本班其他同学) ,因此又将非本人的所有帐号分为两类,一类是加入用户所设定的群组, 一个则是没有加入群组的其他人。
档案权限的观察
单纯的档案权限观察,可以使用 ls -l 或 ll 来查阅,底下为查询系统 /var/spool/mail 这个目录的权限方式:
[student@localhost ~]$ ls -ld /var/spool/maildrwxrwxr-x. 2 root mail 32 2月 26 09:10 /var/spool/mail [ A ][B][C ] [D ] [E ] [ F ] [ G ]
简单的分析,上述的数据共有七个字段,每个字段的意义为:
档案类型与权限,第1个字符为档案类型,后续9个字符每3个一组,共分3组,为三种身份的权限;
档案链接数,这与档案系统有关,读者可暂时略过;
该档案的所有者,本例当中,所有者身份为 root
该档案的所属群组,本例当中这个档案属于 mail 这个群组底下
这个档案的容量
该档案最后一次被修改/修订的日期时间
这个文件的文件名。
读者首先可以分析一下这个'档案'的'类型'。 之前读者应该看过第一个字符为 - 以及 d 的表示方式,事实上还有很多常见的档案类型, 底下仅为常见的类型介绍:
-: 代表后面的文件名为一般档案
d: 代表后面的文件名为目录文件
l: 代表后面的文件名为链接文件 (有点类似 windows 的快捷概念)
b: 代表后面的文件名为一个装置文件,该装置主要为区块装置,亦即储存媒体的设备较多
c: 代表后面的文件名为一个外围装置文件,例如鼠标、键盘等
所以读者可以知道 /var/spool/mail 为一个目录文件 (d 开头,为 directory 的缩写)。 确定了文件类型后,接下来的 9 个字符都是 rwx 与减号而已, 从这 9 个字符判断,读者大概可以猜出 rwx 的意义为:
r: read,可读的意思
w: write,可写入/编辑/修改的意思
x: eXecutable,可以执行的意思
只不过 rwx 该如何与 root, mail 这个使用者与群组套上关系? 我们可以使用下图来查阅第 1, 3, 4 个字段的相关性:
如上图所示,第一组为档案所有者的权限,第二组为档案拥有群组的权限,第三组为不是所有者也没有加入该群组的其他人权限。 所以上述的文件权限为:
所有者为 root,root 具有 rwx 的权限 (第一组权限)
组设置为 mail,则所有加入 mail 此组的账户可以具有 rwx 的权限 ( 第二组权限)
不是 root 也没有加入 mail 的其他人 (例如 student 这个帐号) 具有 rx 的权限 (第三组权限)
拆开权限位:先将整个类型与权限资料分开查阅,并将十个字符整理成为如下所示:
[-][rwx][r-x][r--] 0 123 456 789
理解各个位置的意义:
0 為:代表這個檔名為目錄或檔案,本例中為檔案(-); 123為:擁有者的權限,本例中為可讀、可寫、可執行(rwx); 456為:同群組使用者權限,本例中為可讀可執行(rx); 789為:其他使用者權限,本例中為可讀(r),就是唯讀之意
同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)。
帐号的前提假设情况:假设有账号数据如下:
帳號名稱 加入的群組 test1 test1, testgroup test2 test2, testgroup test3 test3, testgroup test4 test4
文件的状态:如果有下面两个档案,请分别说明 test1, test2, test3, test4 针对底下两个档案的权限各为何?
-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 文件权限与帐号间的关系 :
test.txt 为一般文件(-),所有者为root,所属组为root。
权限方面,只有root这个帐号可以访问此档案,其他人则仅能读此档案。
由于test1,test2,test3,test4既不是root本人,也没有加入root群组,因此四个人针对这个test.txt的档案来说,都属于其他人,仅有可读(r)的权限。
关于 ping_tsai 文件权限与帐号间的关系:
test1 就是这个 ping_tsai 的所有者,因此具有可读、可写、可执行的权力(rwx)
test2 与 test3 都不是 test1,但是两个都有加入 testgroup 群组,因此 test2 与 test3 参考的权限为群组权限,亦即可读与可执行 (rx),但不可修改 (没有 w 的权限)
test4 不是 test1 也没有加入 testgroup 群組,因此 test4 參考其他人的權限,亦即可讀 (r)
ping_tsai 为一般文件(-),所有者为test1,而所属组为testgroup。
权限方面,test1 本人具有可读可写可执行,加入testgroup的用户可读可执行,其他非testgroup账号成员的其他人,仅具有只读
上面这个练习还挺重要的! 因为,档案权限判断的重点,都是:'哪个用户可以对这个档案进行读、写、执行'这样的概念,而帐号是否加入这个档案所属组, 就是个需要考虑的重点!
观察帐号与权限的相关指令
如上面例题,读者可以知道 test1 属于 test1 及 testgroup 群组,所以可以理解帐号与权限的相关性。 不过在实际的系统操作中, 若想知道账号所属的群组,可以使用 id 这个指令来观察即可理解。
首先需要了解 student 的所属组,可使用 id 这个指令来查询即可:
[student@localhost ~]$ iduid=1000(student) gid=1000(student) groups=1000(student) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [student@localhost ~]$ id studentuid=1000(student) gid=1000(student) groups=1000(student)# 可以加上帳號在 id 後面喔!若是自己本身,則會列出 selinux 相關的資料!
上述的数据中, gid 为所谓的'原生群组 (primary group)', groups 则是所有支持的组。
由 id 的输出中,发现 student 并没有加入 testgroup 群组,因此 student 针对 ping_tsai 为'其他人'亦即仅有 r 的权限。
而除了id可以观察帐号与权限的相关性,在档案类型部份,可以使用前一堂课谈到的file来查询。
先以 ls -l 检查可能不能档案类型的 /etc/init.d /etc/passwd /dev/vda /dev/zero 等文件名: 根据前面第一个字符判断, /dev/vda 为区块装置档案、 /dev/zero 为外围装置档案、 /etc/init.d 为链接档案、/etc/passwd 为一般档案。
[student@localhost ~]$ ll /etc/init.d /etc/passwd /dev/vda /dev/zerobrw-rw----. 1 root disk 252, 0 3月 9 16:21 /dev/vdacrw-rw-rw-. 1 root root 1, 5 3月 9 16:21 /dev/zerolrwxrwxrwx. 1 root root 11 5月 11 2019 /etc/init.d -> rc.d/init.d-rw-r--r--. 1 root root 2433 3月 8 00:15 /etc/passwd
再使用 file 查询一下上述的文件名类型: 可以显示出更多的结果喔!
[student@localhost ~]$ file /etc/init.d /etc/passwd /dev/vda /dev/zero/etc/init.d: symbolic link to rc.d/init.d /etc/passwd: ASCII text /dev/vda: block special (252/0) /dev/zero: character special (1/5)
使用 ls -l 可以很快速的看到文件属性、权限的概观,不过,其实读者也能使用 getfacl 这个指令来了解文件的相关属性与权限。 如下所示,同样使用 /var/spool/mail 作为模板:
[student@localhost ~]$ getfacl /var/spool/mailgetfacl: Removing leading '/' from absolute path names # file: var/spool/mail <==檔名# owner: root <==檔案擁有者# group: mail <==檔案群組user::rwx <==使用者的權限group::rwx <==同群組帳號的權限other::r-x <==其他人的權限
透过 getfacl 可以更清楚的查询到档案的所有者与相关的权限设定,只不过就没有档案的类型、修改的时间等参数。
文件的权限与属性的修改,若以 ls -l 的输出来说,则每个部分可以修改的指令参照大致如下:
[student@localhost ~]$ cd /dev/shm/[student@localhost shm]$ touch checking[student@localhost shm]$ ls -l checking-rw-rw-r--. 1 student student 0 3月 14 21:45 checking [ chmod ] [chown] [chgrp] [ touch ] [ mv ]
由于一般账号仅能修改自己档案的文件名、时间与权限,无法随意切换用户与群组的设定。 因此底下的例题中, 读者应该使用 root 的身份来进行处理,方可顺利进行。 首先,切换身份成为 root,并且将工作目录切换到 /dev/shm。
[student@localhost shm]$ su -password: [root@localhost ~]# cd /dev/shm[root@localhost shm]# ll checking-rw-rw-r--. 1 student student 0 Mar 14 21:45 checking# 因為不同的帳號使用的語系不同,root 使用英文語系,因此可以發現日期格式不同。
使用 chown 修改文件所有者
查询系统中是否有名为 daemon 的帐号,如果存在该帐号,请将 checking 的用户改为 daemon 所拥有,而非 student 所拥有。
[root@localhost shm]# id daemonuid=2(daemon) gid=2(daemon) groups=2(daemon) [root@localhost shm]# chown daemon checking[root@localhost shm]# ll checking-rw-rw-r--. 1 daemon student 0 Mar 14 21:45 checking
其实 chown 的功能非常多,chown 也可以用来进行群组的修改,也能同时修改档案所有者与群组。 建议读者们应该man chown查询相关语法。
使用 chgrp 修改文件拥有的群组
系统的群组都纪录在 /etc/group 档案内,若想要了解系统是否存在某个群组,可以使用 grep 这个关键字撷取指令来查询。 举例来说,当系统内有 bin 这个群组时,就将 checking 的群组改为 bin 所有,否则就不予修改。
[root@localhost shm]# grep myname /etc/group# 不會出現任何資訊,因為沒有這個群組存在的意思。[root@localhost shm]# grep bin /etc/groupbin:x:1: <==代表確實有這個群組存在![root@localhost shm]# chgrp bin checking[root@localhost shm]# ll checking-rw-rw-r--. 1 daemon bin 0 Mar 14 21:45 checking
使用 chmod 搭配数字法修改权限
由于档案纪录了三种身份,每种身份都拥有 rwx 的最大权限与 --- 没权限的情况。 为了搭配性的方便,于是使用 2 位的方法来记忆! 亦即是 2 进制的情况:
r ==> read ==> 22 ==> 4
w ==> write ==> 21 ==> 2
x ==> eXecute ==> 20 ==> 1
于是每种身份最低为 0 分,最高则为 r+w+x --> 4+2+1 --> 7 分! 而因为有 3 种身份,因此用户,群件,其他人的身份, 最多为 777 最少为 000 。 以上述 checking (-rw-rw-r--)的分数来说,用户为 rw=6, 群组为 rw=6,其他人为 r=4,亦即该档案权限为 664。
先分析应该完成的权限设计,基本上,应该会是'rwxr-----』,因为:
daemon 为用户,可读可写可执行则为 rwx = 7
加入 bin 的群组为只读,亦即为 r-- = 4
其他人没权限,因此为--- = 0
最终可以使用' chmod 740 checking '修改权限
[root@localhost shm]# chmod 740 checking[root@localhost shm]# ll checking-rwxr-----. 1 daemon bin 0 Mar 14 21:45 checking
使用 chmod 搭配符号法修改权限
另外,读者也能够透过直观的方式来进行权限的设定,亦即使用 u,g,o 代表使用者、群组与其他人, 然后使用 +, -, = 来加入/减少/直接设定权限,使用表列方式说明如下:
chmod | u(user) g(group) o(other) a(all) | +(加入) -(减去 ) =(设定) | r w x | 档案或目录 |
举例来说,让 daemon 可读可写可执行 checking 档案,bin 群组的用户们为可读可写,其他人则为可读,使用符号法的处理方式:
[root@localhost shm]# chmod u=rwx,g=rw,o=r checking[root@localhost shm]# ll checking-rwxrw-r--. 1 daemon bin 0 Mar 14 21:45 checking
其他属性的修改
假如读者需要修改时间参数与文件名,就得要使用 touch 与 mv 这两个指令了。 举例来说, 让 checking 的修改日期改到 1 月 5 日的中午 12 点(年度不变),实验的方式如下:
[root@localhost shm]# touch -t 01051200 checking[root@localhost shm]# ll checking-rwxrw-r--. 1 daemon bin 0 Jan 5 12:00 checking
至于文件名的修改则是前一堂课谈到的 mv 这个指令。
使用 root 身份,并且移动工作目录到 /dev/shm
将 /etc/fstab 复制到 /dev/shm 底下
将 /dev/shm/fstab 更改档名成为 newfs
让 newfs 的用户成为 sshd 、群组成为 wheel
sshd 这个帐号可读、可写 newfs,wheel 群组成员仅可读,其他人则无任何权限
让这个文件的日期设定为前一天的 13:30 (日期请依据实际日期来指定)。
让所有的人都可以执行 newfs 这个文件 (请使用符号法,同时不要更动到既有的权限! )
账号管理是系统管理员很重要的一个任务,例如学校的教学环境中,教师通常需要预先建置学生的账号,以方便学期间上课使用。 公司行号一样也需要让管理员建置好员工的账号密码,才能让员工顺利的办公。 此外,'将账号分组'也是很重要的一项工作。
读者应该还记得,要登入系统的时候,需要输入两个数据,一个是点选帐号名称,再来则是输入该帐号的密码。 因此,最简单的账号管理,即是建立账号与给予密码的任务。
请读者尝试建立一个名为 myuser1 的帐号,以及给予 MypassworD 的密码,方式如下:(记得,帐号管理是系统管理员的任务, 所以,身份一定要是 root 才行! )
[root@localhost ~]# useradd myuser1[root@localhost ~]# passwd myuser1Changing password for user myuser1.New password: <==此處輸入密碼BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary wordRetype new password: <==再輸入密碼一次passwd: all authentication tokens updated successfully. [root@localhost ~]# id myuser1uid=1014(myuser1) gid=1015(myuser1) groups=1015(myuser1)
给予密码的 passwd 这个指令操作时,有几个重点,需要特别注意:
单纯输入 passwd 是'修改自己的密码',因此,改到谁的密码是很需要确认的。 所以如上表所示, 要特别注意第一行出现的是哪一个帐号 (常常有同学不小心改到 root 的密码了...)
由于系统管理员可以给予账号任意的密码,因此虽然 MypassworD 并不是一个好密码,不过系统还是予以接受。 但是,还是不要设定太过简单的密码,系统很容易被攻破!
出现 New 的关键词,代表输入新的密码,输入 Retype 则是显示刚刚的密码已经可以被接受。
而若账户设定错误,可以使用 userdel 删除帐号,例如:
[root@localhost ~]# userdel -r myuser1# 有趣的是, myuser1 的出現也能用 [tab] 按鈕喔! userdel -r my[tab] 看看!
加上 -r 的目的是要该帐号连同家目录与电子邮件新件夹通通删除的意思。 如果忘记加上 -r 的话,那就需要手动删除用户的家目录与邮件档案。 一般账号自己能不能修改自己的密码? 以及如何修改? 参考底下的例题看看:
先另开一个窗口,用 student 身份,输入 passwd student 与 passwd ,分别会出现什么讯息?
直接输入 passwd 之后,尝试修改自己的密码,分别输入 123456 以及 password 两种常见密码,会出现什么错误?
请尝试到一个可以被系统接受的密码为止。
最终,请另外再以 root 将 student 密码修改回原本的 mystdgo !
上面的范例中,我们可以知道一般帐号也是能修改自己密码的,只是,密码的强度要够,否则你的密码将无法通过系统的强度验证, 那就无法顺利的修改一般用户的密码了! 接下来,以 root 身份管理其他用户的帐号与密码吧!
建立名为 myuser2 的帐号,该帐号密码为 mypassWORD
建立名为 myuser3 的帐号,该帐号密码为 mypassWORD
观察 myuser2 与 myuser3 的 id 情况
观察 /home 与 /var/spool/mail 这两个目录的内容,是否有名为 myuser2 及 myuser3 的文件名存在?
使用 userdel myuser2 删除账户 ( 注意,不要加上 -r 的参数)
再次观察 /home 与 /var/spool/mail 的内容,myuser2 档名是否存在? 该文件名的权限为何?
重新建立名为 myuser2 的帐号,密码亦同为 mypassWORD,尝试讨论 (1)建立过程中出现的问题原因为何? (2)是否能够顺利建立该账号?
承上,请在 tty4 以后的终端机,使用 myuser2 登入系统,登入后是否出现问题? 为什么?
再次使用 userdel -r 的方式删除 myuser2 与 myuser3,是否能够顺利删除?
承上,若无法顺利删除帐号,请以手动的方式自行删除余留的用户主目录与邮件档案。
若需要建立账号时,给予账号一个次要的群组支持,就需要先行建置群组。 举例而言,以学校专题制作为例,有三个账号 prouser1, prouser2, prouser3 加入共有的群组 progroup 时,该如何建立? 首先,应该要先建立群组,透过groupadd来处理,再来则是透过useradd--help找到次要组支持的选项为-G的项目, 即可建立好群组、账号与密码。 同时,管理员可以通过 passwd --help 找到 --stdin 的选项来操作密码的给予。 整体流程如下:
[root@localhost ~]# groupadd progroup[root@localhost ~]# grep progroup /etc/groupprogroup:x:1001: <==確定有 progroup 在設定檔當中了[root@localhost ~]# useradd -G progroup prouser1[root@localhost ~]# useradd -G progroup prouser2[root@localhost ~]# useradd -G progroup prouser3[root@localhost ~]# id prouser1uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1001(progroup)[root@localhost ~]# echo mypasswordmypassword <== echo 會將訊息從螢幕上輸出[root@localhost ~]# echo mypassword | passwd --stdin prouser1Changing password for user prouser1. passwd: all authentication tokens updated successfully. [root@localhost ~]# echo mypassword | passwd --stdin prouser2[root@localhost ~]# echo mypassword | passwd --stdin prouser3
读者可以发现到使用 passwd --stdin 的方式来给予密码时,密码会纪录到屏幕与 history 的环境中,因此不见得适用于所有需要资安的系统中。 不过对于大量建置账号时,会是一个很好用的工具。
另外,如果建立好帐号之后才想到要修改群组资源时,不需要删除帐号再重建,此时可以透过 usermod 来进行修改。 举例来说,当 prouser1 还需要加入 student 群组时, 可以使用 usermod -G 的方式来处理! 不过需要留意到 -a 的选项才行。
使用 usermod -G student prouser1 将 prouser1 加入 student 群组的支持,并观察次要群组支援的状态
请使用 usermod --help 查询 -a 的选项功能为何?
请使用 usermod -a -G progroup prouser1 来延伸给予群组,并检查其次要群组的情况喔!
使用者能使用系统上面的资源与权限有关,因此简易的帐号管理之后,就需要与权限搭配设计。
一般用户只能够修改属于自己的档案的 rwx 权限,因此,若 root 要协助复制数据给一般用户时,需要特别注意该数据的权限。 例如底下的范例中,管理员要将 /etc/tcsd.conf 复制给 student 时,需要注意相关的事宜如下:
[root@localhost ~]# ls -l /etc/tcsd.conf-rw-------. 1 tss tss 7046 Dec 14 00:44 /etc/tcsd.conf <==一般用戶根本沒權限[root@localhost ~]# cp /etc/tcsd.conf ~student/[root@localhost ~]# ls -l ~student/tcsd.conf-rw-------. 1 root root 7046 Mar 15 23:13 /home/student/tcsd.conf [root@localhost ~]# chown student.student ~student/tcsd.conf[root@localhost ~]# ls -l ~student/tcsd.conf-rw-------. 1 student student 7046 Mar 15 23:13 /home/student/tcsd.conf
原本 root 复制资料给 student 时,若没有考量到权限,则 student 依旧无法读取该档案的内容,这在资料的复制行为上,需要特别注意才行。
另外,如果用户想要自己复制指令,或者是进行额外的工作任务,可以将指令移动到自己的家目录来处理, 例如 student 想要将 ls 复制成为 myls 并且直接执行 myls 来操作系统,可以这样处理:
[student@localhost ~]$ cp /bin/ls myls[student@localhost ~]$ ls -l myls-rwxr-xr-x. 1 student student 166448 3月 15 23:15 myls [student@localhost ~]$ chmod 700 myls[student@localhost ~]$ ls -l myls-rwx------. 1 student student 166448 3月 15 23:15 myls# 未來這個檔案,就只有 student 自己能玩![student@localhost ~]$ mylsbash: myls: 找不到指令... [student@localhost ~]$ ./mylsDesktop Downloads history.log myls Public Templates Videos Documents group Music Pictures tcsd.conf text1.txt# 但是,要執行就得要這樣做!當然,也能自己寫入 PATH 變數內!如下:[student@localhost ~]$ mkdir bin[student@localhost ~]$ mv myls bin[student@localhost ~]$ mylsbin Documents group Music Public Templates Videos Desktop Downloads history.log Pictures tcsd.conf text1.txt
若仅想要让自己执行,可以将权限改为 700 之类的模样。 而《在本目录执行》则需要使用『./command』的型态来执行, 若想要直接输入指令即可,那需要放入用户自己家目录下的 bin 子目录才行 (与 $PATH 变量有关)。 因此本范例中,最终将 myls 移动到 /home/student/bin/ 目录下。
让 student 帐号直接执行 mymore 即可达成与 more 相同功能的目的 (亦即将 more 复制成为 mymore ,并放置到正确的位置即可)
某些情境下,群组可能需要共享某些档案资料。 举例来说,在学校做专题时,同组专题成员可能需要个别的帐号,不过却需要一个共享的目录, 让大家可以共同分享彼此的专题成果。 举例来说, progroup 成员 prouser1, prouser2, prouser3 (前小节建置的帐号资料),需要共享 /srv/project1/ 的目录, 则该目录的建置与共享可以使用如下的方式来达成:
[root@localhost ~]# mkdir /srv/project1[root@localhost ~]# chgrp progroup /srv/project1[root@localhost ~]# chmod 770 /srv/project1[root@localhost ~]# ls -ld /srv/project1drwxrwx---. 2 root progroup 6 Mar 16 00:38 /srv/project1/
此时 progroup 的成员即可在 project1 目录内进行任何动作。 但 770 并非最好的处理方式,下一堂课读者们将会学习到 SGID 的功能, 届时才会学到较为正确的权限设定。
除了共享目录之外,在执行文件的可执行权限设计上,也能够针对群组来给予可执行权,让其他人不可随意执行共享的指令。 例如让 mycat 执行与 cat 相同的结果,但是仅有 progroup 的用户能够执行,可以这样执行:
[root@localhost ~]# which cat/usr/bin/cat [root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin# 基本上,我們執行指令時,該指令名稱就會到 PATH 設定的目錄去找, # 找到的第一個同名的指令,就會被執行喔![root@localhost ~]# cp /usr/bin/cat /usr/local/bin/mycat[root@localhost ~]# ll /usr/local/bin/mycat-rwxr-xr-x. 1 root root 51856 Mar 16 00:42 /usr/local/bin/mycat [root@localhost ~]# chgrp progroup /usr/local/bin/mycat[root@localhost ~]# chmod 750 /usr/local/bin/mycat[root@localhost ~]# ll /usr/local/bin/mycat-rwxr-x---. 1 root progroup 51856 Mar 16 00:42 /usr/local/bin/mycat
接下来,请读者分别以 student 与 prouser1 的身份执行一次' mycat /etc/hosts ',即可发现不同点了。
前提与目标:student 有个群组名为 student,任何加入 student 的用户可以在 /srv/mystudent/ 目录中进行任何动作,但没加入 student 的用户,仅能读与执行,不能写入。
先建立 /srv/mystudent 目录
修改上述目录的组成为 student,并观察有没有修改成功
最后权限应该更改为几分才对?
上课的课后练习,非作业:
文件权限的探索和确认:
查看系统上的 /etc/chrony.keys 这个文件,并且说明这个文件名的:(1)所有者 (2)拥有群组 (3)权限几分?
上述文件名的类型是什么文件? (普通、目录、链接或设备文件等等)
请问 chrony 这个用户对于 /etc/chrony.keys 这个档案,具有什么权限 (写下 r/w/x)
请问 root 对于这个档案,又具有什么权限?
账户管理:
建立名为 theuser1, theuser2, theuser3 三个帐号,三个帐号都加入 thegroup 群组,且密码都是 thisgroup
观察 theuser1 的 UID 与 GID 规划,记下来他是几号喔!
单纯使用 userdel 不要加上 -r 来删除 theuser1 这个帐号
现在,请使用查询到的 UID 与 GID 资料,来重新建置 theuser1 这个帐号,且这个帐号可以使用原本的家目录等资源。
权限管理:
建立一个名为 /srv/thegroup 目录,这个目录可以让 thegroup 的成员在里面做任何事情
/usr/local/sbin/myif 复制来自 /sbin/ifconfig 档案,这个文件只有 thegroup 成员可以执行,其他人无任何权限。
作业 (不提供学生答案,仅提供教师参考答案)
作业硬盘操作帮助:
开启云端虚拟机前,请务必确认你开启的硬盘是'unit04',否则就会做错题目
若要使用图形界面,请务必使用 student 身份登入,若需要切换身份,再启用终端机处理。
若有简答题需要使用中文,请自行以第一堂课的动作自行处理输入法安装。
每部虚拟机均有独特的网卡地址,请勿使用他人硬盘上传,否则计分为 0 分。
每位同学均有自己的 IP 尾数,请先向老师询问您的 IP 尾数,才可以进行作业上传。
最终上传作业结果,请务必使用 root 身份上传。
进入操作硬盘后,先用 root 身份执行 vbird_book_setup_ip, 执行流程请参考:vbird_book_setup_ip
作业当中,某些部份可能为简答题~若为简答题时,请将答案写入 /home/student/ans.txt 当中,并写好正确题号,方便老师订正答案。 请注意,文件名写错将无法上传!
ps: 请使用 root 的身份进行如下实做的任务。 直接在系统上面操作,操作成功即可,上传结果的程序会主动找到你的实做结果。
(15%)请将底下的答案写入 /home/student/ans.txt 的文件中:
系统内有名为 /examdata/exam.check 的文件,这个文件的 (1)所有者、 (2)群组 各为何? 且 (3)权限是几分?
承上,该文件的文件类型是什么 (说明是纯文本文件? 数据库文件还是 32 位或 64 位执行文件等)?
承上,请问 student 对于 exam.check 这个档案来说,具有什么权限? (写下 rwx 或 --- 等权限标志即可)
(40%)请'依序'进行如下的帐号管理任务:
建立三个用户,账号名称分别为: examuser1, examuser2, examuser3 ,三个人都加入 examgroup 的次要群组支持,同时三个用户的密码都是' ItIsExam '。 (i 和 e 都是大写字符)
建立一个用户,账号名称为 examuser4,密码为' ItIsExam '但这个帐号没加入 examgroup 群组
请删除系统中的 examuser5 这个帐号,同时将这个帐号的家目录与邮件档案同步删除。
有个账号 myuser1 不小心被管理员删除了,但是这个帐号的家目录与相关邮件都还存在。 请参考这个帐号可能的家目录所保留的 UID 与 GID, 并尝试以该帐号原有的 UID/GID 信息来重建该帐号。 而这个帐号的密码请给予 ItIsExam 的样式。 (相关建置帐号的指令,请参考 man useradd 等在线文档的说明)
让 examuser1 额外加入 student 这个群组,亦即 examuser1 至少有加入 examgroup 与 student 群组
(45%)请进行如下的权限管理任务:
使用 root 将 /etc/gshadow 复制给 examuser4 (放在这个用户的家目录),且这个帐号要能够完整使用该档案才行。
建立一个空的档案,文件名为 /srv/examcheck.txt,这个档案可以让examuser1完整的使用,而examuser2与examuser3可以读取,但不能执行与写入,至于examuser4什么权限都没有。
examgroup 群组的成员想要共享 /srv/examdir 目录,而没有加入 examgroup 的其他人不具备任何权限,应该如何处理?
/usr/local/bin/mymore 复制来自 /bin/more,但我只想要让 examgroup 的成员能够执行 /usr/local/bin/mymore 这个指令,其他人不能执行这个指令。
建立一个名为 /examdata/change.txt 的空档案,这个档案的所有者为 sshd,拥有群组为 users,sshd 可读可写,users 群组成员可读, 其他人没权限。 且此文件的修改日期请调整成 2012 年 12 月 21 日 (日期正确即可,时间随便)
作业结果传输:请以 root 的身份执行 vbird_book_check_unit 指令上传操作结果。 正常执行完毕的结果应会出现【XXXXXX_aa:bb:cc:dd:ee:ff_unitNN】字样。 若需要查阅自己上传资料的时间, 请在操作系统上面使用浏览器查询: http://192.168.251.254 检查相对应的课程档案。 相关流程请参考: vbird_book_check_unit
评论专区