二维码

Linux 基础档案权限与基础帐号管理

791 人阅读 | 时间:2021年12月17日 23:25

4.1:Linux 传统权限

Linux 权限的目的是在'保护某些人的档案资料',因此,读者在认识'权限'的角度上,应该要思考的是'这个档案的权限设定后, 会造成哪个个人? 或某群人的读写开放或保护"。 所以,这些权限最终都是'应用在某个/某群帐号'上面! 而且,权限都是'设定在档案/目录'上, 不是设定在帐号上面的,这也要先厘清。

4.1.1:用户、群组与其他人

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. 档案类型与权限,第1个字符为档案类型,后续9个字符每3个一组,共分3组,为三种身份的权限;

  2. 档案链接数,这与档案系统有关,读者可暂时略过;

  3. 该档案的所有者,本例当中,所有者身份为 root

  4. 该档案的所属群组,本例当中这个档案属于 mail 这个群组底下

  5. 这个档案的容量

  6. 该档案最后一次被修改/修订的日期时间

  7. 这个文件的文件名。

读者首先可以分析一下这个'档案'的'类型'。 之前读者应该看过第一个字符为 - 以及 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 个字段的相关性:

Linux 基础档案权限与基础帐号管理
图4.1-1、用户、群组与权限的相关性

如上图所示,第一组为档案所有者的权限,第二组为档案拥有群组的权限,第三组为不是所有者也没有加入该群组的其他人权限。 所以上述的文件权限为:

  • 所有者为 root,root 具有 rwx 的权限 (第一组权限)

  • 组设置为 mail,则所有加入 mail 此组的账户可以具有 rwx 的权限 ( 第二组权限)

  • 不是 root 也没有加入 mail 的其他人 (例如 student 这个帐号) 具有 rx 的权限 (第三组权限)

实际练习:认识档案的权限概念,若有一个档案的类型与权限数据为'-rwxr-xr--',请说明其意义为何?
  1. 拆开权限位:先将整个类型与权限资料分开查阅,并将十个字符整理成为如下所示:

    [-][rwx][r-x][r--]
     0  123  456  789
  2. 理解各个位置的意义:

     0 為:代表這個檔名為目錄或檔案,本例中為檔案(-);
    123為:擁有者的權限,本例中為可讀、可寫、可執行(rwx);
    456為:同群組使用者權限,本例中為可讀可執行(rx);
    789為:其他使用者權限,本例中為可讀(r),就是唯讀之意
  3. 同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)。

实际练习:需要了解账号本身与档案权限的应用关系! 很重要喔!
  1. 帐号的前提假设情况:假设有账号数据如下:

    帳號名稱  加入的群組
    test1     test1, testgroup
    test2     test2, testgroup
    test3     test3, testgroup
    test4     test4
  2. 文件的状态:如果有下面两个档案,请分别说明 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
  3. 关于 test.txt 文件权限与帐号间的关系 :

    • test.txt 为一般文件(-),所有者为root,所属组为root。

    • 权限方面,只有root这个帐号可以访问此档案,其他人则仅能读此档案。

    • 由于test1,test2,test3,test4既不是root本人,也没有加入root群组,因此四个人针对这个test.txt的档案来说,都属于其他人,仅有可读(r)的权限。

  4. 关于 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 这个账号对于 ping_tsai 来说,具有什么权限?
  1. 首先需要了解 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 相關的資料!
  2. 上述的数据中, gid 为所谓的'原生群组 (primary group)', groups 则是所有支持的组。

  3. 由 id 的输出中,发现 student 并没有加入 testgroup 群组,因此 student 针对 ping_tsai 为'其他人'亦即仅有 r 的权限。

而除了id可以观察帐号与权限的相关性,在档案类型部份,可以使用前一堂课谈到的file来查询。

实际练习:使用 file 与 ls -l 查看不同档名的文件类型
  1. 先以 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
  2. 再使用 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 可以更清楚的查询到档案的所有者与相关的权限设定,只不过就没有档案的类型、修改的时间等参数。

4.1.2:档案属性与权限的修改方式

文件的权限与属性的修改,若以 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。

实际练习:让 daemon 可读、可写、可执行 checking,让加入 bin 群组的用户可只读该档案,让其他人没有权限!
  1. 先分析应该完成的权限设计,基本上,应该会是'rwxr-----』,因为:

    • daemon 为用户,可读可写可执行则为 rwx = 7

    • 加入 bin 的群组为只读,亦即为 r-- = 4

    • 其他人没权限,因此为--- = 0

  2. 最终可以使用' 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 代表使用者、群组与其他人, 然后使用 +, -, = 来加入/减少/直接设定权限,使用表列方式说明如下:

chmodu(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 这个指令。

例题 4.1.2-1:实际设定档案权限
  1. 使用 root 身份,并且移动工作目录到 /dev/shm

  2. 将 /etc/fstab 复制到 /dev/shm 底下

  3. 将 /dev/shm/fstab 更改档名成为 newfs

  4. 让 newfs 的用户成为 sshd 、群组成为 wheel

  5. sshd 这个帐号可读、可写 newfs,wheel 群组成员仅可读,其他人则无任何权限

  6. 让这个文件的日期设定为前一天的 13:30 (日期请依据实际日期来指定)。

  7. 让所有的人都可以执行 newfs 这个文件 (请使用符号法,同时不要更动到既有的权限! )

4.2:基础账号管理

账号管理是系统管理员很重要的一个任务,例如学校的教学环境中,教师通常需要预先建置学生的账号,以方便学期间上课使用。 公司行号一样也需要让管理员建置好员工的账号密码,才能让员工顺利的办公。 此外,'将账号分组'也是很重要的一项工作。

4.2.1:简易账号管理

读者应该还记得,要登入系统的时候,需要输入两个数据,一个是点选帐号名称,再来则是输入该帐号的密码。 因此,最简单的账号管理,即是建立账号与给予密码的任务。

请读者尝试建立一个名为 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 的话,那就需要手动删除用户的家目录与邮件档案。 一般账号自己能不能修改自己的密码? 以及如何修改? 参考底下的例题看看:

例题 4.2.1-1:一般帐号修改自己的密码方式
  1. 先另开一个窗口,用 student 身份,输入 passwd student 与 passwd ,分别会出现什么讯息?

  2. 直接输入 passwd 之后,尝试修改自己的密码,分别输入 123456 以及 password 两种常见密码,会出现什么错误?

  3. 请尝试到一个可以被系统接受的密码为止。

  4. 最终,请另外再以 root 将 student 密码修改回原本的 mystdgo !

上面的范例中,我们可以知道一般帐号也是能修改自己密码的,只是,密码的强度要够,否则你的密码将无法通过系统的强度验证, 那就无法顺利的修改一般用户的密码了! 接下来,以 root 身份管理其他用户的帐号与密码吧!

例题 4.2.1-2:建立与删除用户的简单方式,以及新增用户时,会产生的系统的新资料!
  1. 建立名为 myuser2 的帐号,该帐号密码为 mypassWORD

  2. 建立名为 myuser3 的帐号,该帐号密码为 mypassWORD

  3. 观察 myuser2 与 myuser3 的 id 情况

  4. 观察 /home 与 /var/spool/mail 这两个目录的内容,是否有名为 myuser2 及 myuser3 的文件名存在?

  5. 使用 userdel myuser2 删除账户 ( 注意,不要加上 -r 的参数)

  6. 再次观察 /home 与 /var/spool/mail 的内容,myuser2 档名是否存在? 该文件名的权限为何?

  7. 重新建立名为 myuser2 的帐号,密码亦同为 mypassWORD,尝试讨论 (1)建立过程中出现的问题原因为何? (2)是否能够顺利建立该账号?

  8. 承上,请在 tty4 以后的终端机,使用 myuser2 登入系统,登入后是否出现问题? 为什么?

  9. 再次使用 userdel -r 的方式删除 myuser2 与 myuser3,是否能够顺利删除?

  10. 承上,若无法顺利删除帐号,请以手动的方式自行删除余留的用户主目录与邮件档案。

4.2.2:账号与群组关联性管理

若需要建立账号时,给予账号一个次要的群组支持,就需要先行建置群组。 举例而言,以学校专题制作为例,有三个账号 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 的选项才行。

例题 4.2.2-1:使用 usermod 管理已经存在的账号之属性变化
  1. 使用 usermod -G student prouser1 将 prouser1 加入 student 群组的支持,并观察次要群组支援的状态

  2. 请使用 usermod --help 查询 -a 的选项功能为何?

  3. 请使用 usermod -a -G progroup prouser1 来延伸给予群组,并检查其次要群组的情况喔!

4.3:账号与权限用途

使用者能使用系统上面的资源与权限有关,因此简易的帐号管理之后,就需要与权限搭配设计。

4.3.1:单一用户所有权

一般用户只能够修改属于自己的档案的 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/ 目录下。

例题 4.3.1-1:用户自己建立的指令程序功能
  1. 让 student 帐号直接执行 mymore 即可达成与 more 相同功能的目的 (亦即将 more 复制成为 mymore ,并放置到正确的位置即可)

4.3.2:群组共用功能

某些情境下,群组可能需要共享某些档案资料。 举例来说,在学校做专题时,同组专题成员可能需要个别的帐号,不过却需要一个共享的目录, 让大家可以共同分享彼此的专题成果。 举例来说, 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 ',即可发现不同点了。

那如何切换身份成为 prouser1 呢? 基本上,可以使用' su - prouser1 '即可切换该身份! 倒不用一定要从其他终端机登入喔!
例题 4.3.2-1:设定群组共享的功能。
  1. 前提与目标:student 有个群组名为 student,任何加入 student 的用户可以在 /srv/mystudent/ 目录中进行任何动作,但没加入 student 的用户,仅能读与执行,不能写入。

  2. 先建立 /srv/mystudent 目录

  3. 修改上述目录的组成为 student,并观察有没有修改成功

  4. 最后权限应该更改为几分才对?

4.4:课后练习操作

  • 上课的课后练习,非作业:

  1. 文件权限的探索和确认:

    1. 查看系统上的 /etc/chrony.keys 这个文件,并且说明这个文件名的:(1)所有者 (2)拥有群组 (3)权限几分?

    2. 上述文件名的类型是什么文件? (普通、目录、链接或设备文件等等)

    3. 请问 chrony 这个用户对于 /etc/chrony.keys 这个档案,具有什么权限 (写下 r/w/x)

    4. 请问 root 对于这个档案,又具有什么权限?

  2. 账户管理:

    1. 建立名为 theuser1, theuser2, theuser3 三个帐号,三个帐号都加入 thegroup 群组,且密码都是 thisgroup

    2. 观察 theuser1 的 UID 与 GID 规划,记下来他是几号喔!

    3. 单纯使用 userdel 不要加上 -r 来删除 theuser1 这个帐号

    4. 现在,请使用查询到的 UID 与 GID 资料,来重新建置 theuser1 这个帐号,且这个帐号可以使用原本的家目录等资源。

  3. 权限管理:

    1. 建立一个名为 /srv/thegroup 目录,这个目录可以让 thegroup 的成员在里面做任何事情

    2. /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 的身份进行如下实做的任务。 直接在系统上面操作,操作成功即可,上传结果的程序会主动找到你的实做结果。

  1. (15%)请将底下的答案写入 /home/student/ans.txt 的文件中:

    1. 系统内有名为 /examdata/exam.check 的文件,这个文件的 (1)所有者、 (2)群组 各为何? 且 (3)权限是几分?

    2. 承上,该文件的文件类型是什么 (说明是纯文本文件? 数据库文件还是 32 位或 64 位执行文件等)?

    3. 承上,请问 student 对于 exam.check 这个档案来说,具有什么权限? (写下 rwx 或 --- 等权限标志即可)

  2. (40%)请'依序'进行如下的帐号管理任务:

    1. 建立三个用户,账号名称分别为: examuser1, examuser2, examuser3 ,三个人都加入 examgroup 的次要群组支持,同时三个用户的密码都是' ItIsExam '。 (i 和 e 都是大写字符)

    2. 建立一个用户,账号名称为 examuser4,密码为' ItIsExam '但这个帐号没加入 examgroup 群组

    3. 请删除系统中的 examuser5 这个帐号,同时将这个帐号的家目录与邮件档案同步删除。

    4. 有个账号 myuser1 不小心被管理员删除了,但是这个帐号的家目录与相关邮件都还存在。 请参考这个帐号可能的家目录所保留的 UID 与 GID, 并尝试以该帐号原有的 UID/GID 信息来重建该帐号。 而这个帐号的密码请给予 ItIsExam 的样式。 (相关建置帐号的指令,请参考 man useradd 等在线文档的说明)

    5. 让 examuser1 额外加入 student 这个群组,亦即 examuser1 至少有加入 examgroup 与 student 群组

  3. (45%)请进行如下的权限管理任务:

    1. 使用 root 将 /etc/gshadow 复制给 examuser4 (放在这个用户的家目录),且这个帐号要能够完整使用该档案才行。

    2. 建立一个空的档案,文件名为 /srv/examcheck.txt,这个档案可以让examuser1完整的使用,而examuser2与examuser3可以读取,但不能执行与写入,至于examuser4什么权限都没有。

    3. examgroup 群组的成员想要共享 /srv/examdir 目录,而没有加入 examgroup 的其他人不具备任何权限,应该如何处理?

    4. /usr/local/bin/mymore 复制来自 /bin/more,但我只想要让 examgroup 的成员能够执行 /usr/local/bin/mymore 这个指令,其他人不能执行这个指令。

    5. 建立一个名为 /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


©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×