Linux 基础学习训练教材 - CentOS 8.x

课程问题参考解答

单纯提供一个相对的解答,并不是标准答案!

最近更新时间: 2020/06/11

单纯就是个解答的参考,写完之后再来这边查查看答案跟你想的一样不一样!?

第 04 堂课

  • 例题 4.1.2-1:
    1. 因为修改权限,很多时候都是 root 要进行的任务,因此得要使用 root 的身份处理:
      [student@station10-101 shm]$ su -
      密码:
      [root@station10-101 ~]# cd /dev/shm
      [root@station10-101 shm]# pwd
      /dev/shm
      
    2. 直接拷贝文件并观察
      [root@station10-101 shm]# cp /etc/fstab .
      [root@station10-101 shm]# ll fstab
      -rw-r--r--. 1 root root 655 Mar 15 01:01 fstab
      
    3. 文件的更名使用的是 mv 才对喔!
      [root@station10-101 shm]# mv fstab newfs
      [root@station10-101 shm]# ll newfs
      -rw-r--r--. 1 root root 655 Mar 15 01:01 newfs
      # 如上所示,要注意的是,文件名改变了,其他则不变!
      
    4. 修改拥有者与群组,你可以分别使用 chown 与 chgrp,但也可以使用 chown 来达成!例如:
      [root@station10-101 shm]# man chown
      CHOWN(1)                      User Commands                     CHOWN(1)
      
      NAME
             chown - change file owner and group
      
      SYNOPSIS
             chown [OPTION]... [OWNER][:[GROUP]] FILE...
             chown [OPTION]... --reference=RFILE FILE...
      
      DESCRIPTION
      ......
      
      事实上,常用的就有两种语法,一种是通过『 owner:group 』来处理,一种则是通过参考其他文件的数据来处理, 相当有趣!因此,如果想要直接一口气就修改,也能这样做:

      [root@station10-101 shm]# id sshd
      uid=74(sshd) gid=74(sshd) groups=74(sshd)
      # 确认有此帐号
      
      [root@station10-101 shm]# grep wheel /etc/group
      wheel:x:10:
      # 确认有此群组
      
      [root@station10-101 shm]# chown sshd:wheel newfs
      [root@station10-101 shm]# ll newfs
      -rw-r--r--. 1 sshd wheel 655 Mar 15 01:01 newfs
      
    5. 根据题目的意思,最终的权限应该是 rw-r----,亦即是 640 才对!
      [root@station10-101 shm]# chmod 640 newfs
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Mar 15 01:01 newfs
      
    6. 因为每一天的时间都不同,因此,我们可以通过 yesterday 这样的方式来处理即可。当然,也需要格式化成为 MMDDhhmm 的方式才行!
      [root@station10-101 shm]# date -d "yesterday 13:30" +%m%d%H%M
      03141330
      # 显示出昨天时间的方式,所以上面的时间就是 3/14 13:30 的意思!
      
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Mar 15 01:01 newfs   <==修改前的时间
      
      [root@station10-101 shm]# touch -t 03141330 newfs
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Mar 14 13:30 newfs   <==修改后的时间
      
    7. 让所有人都可以运行,这个情况就是大家都加上 x 的可运行权限!但是,如果使用数字法,就得从 rw-r----- 变成 rwxr-x--x 这样去计算出 751, 其实有更快速的方法,可以这样做:
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Mar 14 13:30 newfs
      
      [root@station10-101 shm]# chmod a+x newfs
      [root@station10-101 shm]# ll newfs
      -rwxr-x--x. 1 sshd wheel 655 Mar 14 13:30 newfs
      
      这样就搞定了!同理,如果药让这个文件变成唯读?则可以是『 chmod a-w filename 』这样最快又方便!
  • 例题 4.2.1-1:
    1. 以一般用户修改密码的指令:
      [student@station10-101 ~]$ passwd student
      passwd:只有 root 可指定用户名。
      # 这种指令下达方式只有 root 可以使用,因此 student 下达这种指令方式,就会失败!
      # 也就是说,这个指令根本没有被运行啦!
      
      [student@station10-101 ~]$ passwd
      更改用户 student 的密码。
      Current password: <==这里则是按下 [ctrl]+c 结束!
      [student@station10-101 ~]$
      
      所以,只有 root 才能使用『 passwd 帐号 』的格式,其他用户只能修改自己的密码!直接输入 passwd 即可!
    2. 尝试修改一般帐号自己的密码:
      [student@station10-101 ~]$ passwd
      更改用户 student 的密码。
      Current password:             <==这里输入原本的 mystdgo 密码
      新 密码:                     <==这里输入 123456 这个烂密码
      不良的密码:密码短于 8 个字符 <==还好,结果密码不被接受!
      passwd: 验证记号处理错误
      
      [student@station10-101 ~]$ passwd
      更改用户 student 的密码。
      Current password:             <==这里输入原本的 mystdgo 密码
      新 密码:                     <==这里输入 password 这个烂密码
      不良的密码:密码无法通过字典比对检查 - 根据辞典单字
      passwd: 验证记号处理错误      <==因为密码是在字典单字内,所以不被接受
      
      也就是说,如果你的密码设置的太烂,就不会被系统所接受,那就不能改密码!所以,鸟哥一般的作法, 会让用户自己设置能接受的密码,这样密码强度比较强,管理员自己也不用去帮用户伤脑筋! 上面都是错误的!都没有能够修改密码!
    3. 以强密码完成密码的修改
      [student@station10-101 ~]$ passwd
      更改用户 student 的密码。
      Current password:             <==这里输入原本的 mystdgo 密码
      新 密码:                     <==这里猜一个强密码!
      再次输入新的 密码:           <==终于被接受!再次输入刚刚的密码
      passwd:所有核对代符都已成功更新。
      
    4. 用 root 将密码改回来:
      [student@station10-101 ~]$ passwd
      更改用户 student 的密码。
      Current password:             <==这里输入刚刚设置的强密码
      新 密码:                     <==这里输入 mystdgo
      不良的密码:密码短于 8 个字符
      passwd: 验证记号处理错误
      
      因为 mystdgo 也并不是强密码,至少密码长度没有超过 8 个字符,因此不被接受...所以,请用 root 的身份帮 student 修改回来才行!
      [root@station10-101 ~]# passwd student
      Changing password for user student.
      New password:         <==直接输入 mystdgo 即可!
      BAD PASSWORD: The password is shorter than 8 characters
      Retype new password:  <==再次输入 mystdgo
      passwd: all authentication tokens updated successfully.
      
      看吧! root 很万能,所以,如果耳根子太软,帮人家设计比较不良的密码,很容易出状况!
  • 例题 4.2.1-2:
    1. 创建新用户的帐号与密码,两个动作:
      [root@station10-101 ~]# useradd myuser2
      [root@station10-101 ~]# passwd myuser2
      Changing password for user myuser2.
      New password:
      BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
      Retype new password:
      passwd: all authentication tokens updated successfully.
      
    2. 创建另外一个新的用户,方式也一样:
      [root@station10-101 ~]# useradd myuser3
      [root@station10-101 ~]# passwd myuser3
      Changing password for user myuser3.
      New password:
      BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
      Retype new password:
      passwd: all authentication tokens updated successfully.
      
    3. 现在,观察一下两个帐号的 id 显示状况:
      [root@station10-101 ~]# id myuser2
      uid=1001(myuser2) gid=1001(myuser2) groups=1001(myuser2)
      [root@station10-101 ~]# id myuser3
      uid=1002(myuser3) gid=1002(myuser3) groups=1002(myuser3)
      
      可以看到 UID 数字从 1001 到 1002,都会增加一个号码,同时 gid 也是一样的情况。看起来的趋势就是, 系统会自动的帮新的用户的 uid 增加一个号码的样子。
    4. 再来观察这个用户有没有其他相关的家目录与新邮件信箱:
      [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser*
      drwx------. 3 myuser2 myuser2 78 Mar 15 20:53 /home/myuser2
      drwx------. 3 myuser3 myuser3 78 Mar 15 20:53 /home/myuser3
      -rw-rw----. 1 myuser2 mail     0 Mar 15 20:53 /var/spool/mail/myuser2
      -rw-rw----. 1 myuser3 mail     0 Mar 15 20:53 /var/spool/mail/myuser3
      
      意思是,当创建新的用户时:『系统会主动帮用户在 /home 底下创建一个相同名称的家目录』,同时『在 /var/spool/mail/ 底下,创建一个同名的新邮件文件』的意思。同时注意权限喔!家目录仅有用户自己可以完整操作,其他人完全没有权限。 新邮件文件则是除了用户自己与 mail 相关群组用户之号,其他人也是不能乱看的!
    5. 删除比较早之前的用户 (不是最新的 myuser3 ,而是较旧的 myuser2):
      [root@station10-101 ~]# userdel myuser2
      
    6. 观察新建帐号时所产生的文件数据:
      [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser*
      drwx------. 3    1001    1001 78 Mar 15 20:53 /home/myuser2
      drwx------. 3 myuser3 myuser3 78 Mar 15 20:53 /home/myuser3
      -rw-rw----. 1    1001 mail     0 Mar 15 20:53 /var/spool/mail/myuser2
      -rw-rw----. 1 myuser3 mail     0 Mar 15 20:53 /var/spool/mail/myuser3
      
      很明显的可以发现,没有加上 -r 的选项,会导致新建的文件不会被删除!此现象会让旧的文件存下来之后, 对照不到原本的帐号名称,因此拥有者与拥有群组的字段,就会显示出之前该拥有帐号的 UID 与 GID 了!
    7. 使用缺省的方法,重新创建 myuser2:
      [root@station10-101 ~]# useradd myuser2
      useradd: warning: the home directory already exists.
      Not copying any file from skel directory into it.
      Creating mailbox file: File exists
      
      [root@station10-101 ~]# passwd myuser2
      Changing password for user myuser2.
      New password:
      BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
      Retype new password:
      passwd: all authentication tokens updated successfully.
      
      [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser*
      drwx------. 3    1001    1001 78 Mar 15 20:53 /home/myuser2
      drwx------. 3 myuser3 myuser3 78 Mar 15 20:53 /home/myuser3
      -rw-rw----. 1    1001 mail     0 Mar 15 20:53 /var/spool/mail/myuser2
      -rw-rw----. 1 myuser3 mail     0 Mar 15 20:53 /var/spool/mail/myuser3
      # 文件并没有正常的恢复!看起来 UID/GID 的部份有问题!来查看看:
      
      [root@station10-101 ~]# id myuser2
      uid=1003(myuser2) gid=1003(myuser2) groups=1003(myuser2)
      
      • 因为从前面的运行流程,我们会知道,创建新的帐号时,系统会拿最大的 UID 号码再加一号,来产生新帐号的 UID。 而因为我们之前杀掉的是 1001 的 myuser2 帐号,问题是 1002 的 myuser3 帐号还存在,因此, 在 myuser3 之后添加的帐号,就会从 1003 开始编号了!这就造成一个严重的问题,那就是,这个帐号确实是被创建了! 问题是,他的家目录权限恐怕会是错误的!
      • 确定有这个帐号,因为使用 id myuser3 时,确实是有该帐号的存在的!
    8. 开始登录 tty4:
      UID 错误无法进入自己家目录的状态
      UID 错误无法进入自己家目录的状态
      如前所述,因为新建帐号虽然与旧的帐号名称一样 (都是 myuser2),但是其 UID 事实上是不一样了!偏偏删除旧帐号时, 并没有删除其家目录,所以,会产生可登录,但是却没有家目录可用的情况喔!
    9. 好吧,既然如此,那就用正统的方法,删除两个刚刚新建的帐号,看看能否正常删除?
      [root@station10-101 ~]# userdel -r myuser3  <==确实可以删除 myuser3
      [root@station10-101 ~]# userdel -r myuser2
      userdel: user myuser2 is currently used by process 20486
      # 因为刚刚在 tty4 登录 myuser2,尚未注销!赶紧去注销!
      
      [root@station10-101 ~]# userdel -r myuser2
      userdel: /var/spool/mail/myuser2 not owned by myuser2, not removing
      userdel: /home/myuser2 not owned by myuser2, not removing
      # 意思是说,上面的两个文件名并不属于 myuser2,所以自然不能随意删除!
      
      [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser*
      drwx------. 3 1001 1001 78 Mar 15 20:53 /home/myuser2
      -rw-rw----. 1 1001 mail  0 Mar 15 20:53 /var/spool/mail/myuser2
      # 确实存在不同的 UID 之故!
      
      [root@station10-101 ~]# id myuser3
      id: ‘myuser3’: no such user
      [root@station10-101 ~]# id myuser2
      id: ‘myuser2’: no such user
      # 但是,事实上,这两个帐号确实删除了!
      
    10. 上述的留存的错误文件,只好自己手动移除了!
      [root@station10-101 ~]# rm -rf /home/myuser2 /var/spool/mail/myuser2
      [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser*
      ls: cannot access '/home/myuser*': No such file or directory
      ls: cannot access '/var/spool/mail/myuser*': No such file or directory
      
  • 例题 4.2.2-1:
    1. 直接使用 usermod 修改次要群组支持时,错误的动作:
      [root@station10-101 ~]# id prouser1
      uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1001(progroup)
      [root@station10-101 ~]# usermod -G student prouser1
      [root@station10-101 ~]# id prouser1
      uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1000(student)
      
      可以明显的发现,原有的次要群组支持,从 progroup 变成 student 了!而不是预想的,两者都会存在啊!
    2. 想要原本的次要支持群组存在,然后添加额外的群组支持,得要查一查用法:
      [root@station10-101 ~]# usermod --help
      Usage: usermod [options] LOGIN
      
      Options:
      ......
        -G, --groups GROUPS           new list of supplementary GROUPS
        -a, --append                  append the user to the supplemental GROUPS
                                      mentioned by the -G option without removing
                                      the user from other groups
      ......
      
      看起来,说是使用 -a 搭配 -G 的话,会有效的达成我们想要的需求!就是『累加额外的次要群组支持』之意!
    3. 使用正确的手段来处理:
      [root@station10-101 ~]# id prouser1
      uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1000(student)
      [root@station10-101 ~]# usermod -a -G progroup prouser1
      [root@station10-101 ~]# id prouser1
      uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1000(student),1001(progroup)
      
      所以,使用『 -a -G 次要群组 』这种选项模式,也是很重要的喔!
  • 例题 4.3.1-1:
    1. 如果一般用户想要建置自己专属的指令,不想要使用系统的指令,可以在自己的 ~/bin 里面放置指令即可,很简单!
      [student@station10-101 ~]$ cp /bin/more ~/bin/mymore
      [student@station10-101 ~]$ file ~/bin/mymore
      /home/student/bin/mymore: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
       dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 
       3.2.0, BuildID[sha1]=b3b6a4ddca8b2ad08ef6f6ecb2ae7716799a6d73, stripped
      [student@station10-101 ~]$ mymore /etc/hosts
      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      
      主要就是将指令文件放置到自己的家目录底下的 bin 即可!
  • 例题 4.3.2-1:
    1. 单纯的目标介绍,要注意的是,student 这个帐号是否真的支持 student 群组?
      [student@station10-101 ~]$ id student
      uid=1000(student) gid=1000(student) groups=1000(student)
      
      [student@station10-101 ~]$ grep student /etc/group
      student:x:1000:prouser1
      
      确定这个群组是对的!
    2. 创建用 mkdir
      [student@station10-101 ~]$ su -
      密码:
      [root@station10-101 ~]# cd  /srv
      [root@station10-101 srv]# mkdir mystudent
      [root@station10-101 srv]# ll -d mystudent/
      drwxr-xr-x. 2 root root 6 Mar 16 14:49 mystudent/
      
      创建成功,但是权限不太对劲!
    3. 修改群组:
      [root@station10-101 srv]# chown .student mystudent/
      [root@station10-101 srv]# ll -d mystudent/
      drwxr-xr-x. 2 root student  6 Mar 16 14:49 mystudent
      
      除了 chgrp 之外,其实 chown 也能改群组的!相当有趣!
    4. 分数应该是 drwxrwxr-x,亦即是 775 才对喔!
      [root@station10-101 srv]# chmod 775 mystudent/
      [root@station10-101 srv]# ll -d mystudent/
      drwxrwxr-x. 2 root student 6 Mar 16 14:49 mystudent/
      
  • 例题 4.4:课后练习题
    1. 文件权限的探索与确认:
      1. 直接使用 ll -d 查找即可:
        [root@station10-101 srv]# ll -d /etc/chrony.keys
        -rw-r-----. 1 root chrony 540 May 10  2019 /etc/chrony.keys
        
        			(1)拥有者为 root,(2)拥有群组为 chrony,权限是 640 喔!
      2. 看到做左边是减号,所以,是一般文件!
      3. 得先要查找 chrony 这个帐号才行:
        [root@station10-101 srv]# id chrony
        uid=994(chrony) gid=989(chrony) groups=989(chrony)
        
        看起来 chrony 确实加入了 chrony 群组,因此对于这个文件具有可读的权限,但是不能写入与不能运行!
      4. 这个问题比较伟大!这是因为系统上,所有的传统权限,对于 root 来说,都没有任何意义!因为 root 具有任何权限喔! 虽然帐面上看起来是仅有 rw 而已。
    2. 帐号管理:
      1. 就直接创建即可:
        [root@station10-101 srv]# groupadd thegroup
        [root@station10-101 srv]# useradd -G thegroup theuser1
        [root@station10-101 srv]# useradd -G thegroup theuser2
        [root@station10-101 srv]# useradd -G thegroup theuser3
        [root@station10-101 srv]# echo "thisgroup" | passwd --stdin theuser1
        Changing password for user theuser1.
        passwd: all authentication tokens updated successfully.
        [root@station10-101 srv]# echo "thisgroup" | passwd --stdin theuser2
        Changing password for user theuser2.
        passwd: all authentication tokens updated successfully.
        [root@station10-101 srv]# echo "thisgroup" | passwd --stdin theuser3
        Changing password for user theuser3.
        passwd: all authentication tokens updated successfully.
        [root@station10-101 srv]# id theuser1
        uid=1004(theuser1) gid=1006(theuser1) groups=1006(theuser1),1005(thegroup)
        [root@station10-101 srv]# id theuser2
        uid=1005(theuser2) gid=1007(theuser2) groups=1007(theuser2),1005(thegroup)
        [root@station10-101 srv]# id theuser3
        uid=1006(theuser3) gid=1008(theuser3) groups=1008(theuser3),1005(thegroup)
        
        最后用 id 去确认一下每个帐号是否顺利支持了 thegroup 群组!
      2. 使用 id 去检查即可:
        [root@station10-101 srv]# id theuser1
        uid=1004(theuser1) gid=1006(theuser1) groups=1006(theuser1),1005(thegroup)
        
        注意,有多了 theuser1 这个群组,群组 gid 为 1006 喔!
      3. 那就删除吧!
        [root@station10-101 srv]# userdel theuser1
        [root@station10-101 srv]# ll -d /home/theuser1
        drwx------. 3 1004 1006 78 Mar 16 15:20 /home/theuser1
        
        确定只有剩下 UID 与 GID 而已!
      4. 就开始使用 groupadd 与 useradd 去处理!
        [root@station10-101 srv]# groupadd -g 1006 theuser1
        [root@station10-101 srv]# useradd -u 1004 -g theuser1 -G thegroup theuser1
        useradd: warning: the home directory already exists.
        Not copying any file from skel directory into it.
        Creating mailbox file: File exists
        # 使用刚刚纪录的 uid 与 gid 重建群组与帐号!但是目录并没有重新创建,因为旧的文件已经存在!
        
        [root@station10-101 srv]# ll -d /home/theuser1
        drwx------. 3 theuser1 theuser1 78 Mar 16 15:20 /home/theuser1
        
        所以,看到正确的权限了!这代表这个帐号又回复了!
    3. 权限管理:
      1. 其实,就是改群组,然后权限 770 或 775 就对了!这里先用 775 来设置!
        [root@station10-101 srv]# mkdir /srv/thegroup
        [root@station10-101 srv]# chgrp thegroup /srv/thegroup
        [root@station10-101 srv]# chmod 775 /srv/thegroup/
        [root@station10-101 srv]# ll -d /srv/thegroup/
        drwxrwxr-x. 2 root thegroup 6 Mar 16 15:29 /srv/thegroup/
        
      2. 拷贝文件后,直接修改群组与权限即可!这次改成 550 就可以了!
        [root@station10-101 srv]# cp /sbin/ifconfig /usr/local/sbin/myif
        [root@station10-101 srv]# chgrp thegroup /usr/local/sbin/myif
        [root@station10-101 srv]# chmod 550 /usr/local/sbin/myif
        [root@station10-101 srv]# ll /usr/local/sbin/myif
        -r-xr-x---. 1 root thegroup 97920 Mar 16 15:31 /usr/local/sbin/myif
        
修改历史:
  • 2020/02/25:尝试直接在课程中加入解答,让大家有个参考依据。不过,没事不要来看啊!
  • 2020/03/10:加入了第三章的后课练习部份。
2020/03/02 以来统计人数
计数器
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计