Linux 基礎學習訓練教材 - RockyLinux 9.x

課程/課後例題參考解答

單純提供一個相對的解答,並不是標準答案!

最近更新時間: 2023/05/01

單純就是個解答的參考,寫完之後再來這邊查查看答案跟你想的一樣不一樣!?

第 04 堂課 (2023/02/22)

  • 例題 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 Feb 22 09:06 fstab
      
    3. 檔案的更名使用的是 mv 才對喔!
      [root@station10-101 shm]# mv fstab newfs
      [root@station10-101 shm]# ll newfs
      -rw-r--r--. 1 root root 655 Feb 22 09:06 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 Feb 22 09:06 newfs
      
    5. 根據題目的意思,最終的權限應該是 rw-r----,亦即是 640 才對!
      [root@station10-101 shm]# chmod 640 newfs
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Feb 22 09:06 newfs
      
    6. 因為每一天的時間都不同,因此,我們可以透過 yesterday 這樣的方式來處理即可。當然,也需要格式化成為 MMDDhhmm 的方式才行!
      [root@station10-101 shm]# date -d "yesterday 13:30" +%m%d%H%M
      02211330
      # 顯示出昨天時間的方式,所以上面的時間就是 2/21 13:30 的意思!
      
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Feb 22 09:06 newfs   <==修改前的時間
      
      [root@station10-101 shm]# touch -t 02211330 newfs
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Feb 21 13:30 newfs   <==修改後的時間
      
    7. 讓所有人都可以執行,這個情況就是大家都加上 x 的可執行權限!但是,如果使用數字法,就得從 rw-r----- 變成 rwxr-x--x 這樣去計算出 751, 其實有更快速的方法,可以這樣做:
      [root@station10-101 shm]# ll newfs
      -rw-r-----. 1 sshd wheel 655 Feb 21 13:30 newfs
      
      [root@station10-101 shm]# chmod a+x newfs
      [root@station10-101 shm]# ll newfs
      -rwxr-x--x. 1 sshd wheel 655 Feb 21 13:30 newfs
      
      這樣就搞定了!同理,如果要讓這個檔案變成唯讀?則可以是『 chmod a-w filename 』這樣最快又方便!
  • 例題 4.2.1-1:
    1. 以一般用戶修改密碼的指令:
      [student@station10-101 ~]$ passwd student
      passwd: Only root can specify a user name.
      # 這種指令下達方式只有 root 可以使用,因此 student 下達這種指令方式,就會失敗!
      # 也就是說,這個指令根本沒有被執行啦!
      
      [student@station10-101 ~]$ passwd
      Changing password for user 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 Feb 22 10:00 /home/myuser2
      drwx------. 3 myuser3 myuser3 78 Feb 22 10:00 /home/myuser3
      -rw-rw----. 1 myuser2 mail     0 Feb 22 10:00 /var/spool/mail/myuser2
      -rw-rw----. 1 myuser3 mail     0 Feb 22 10:00 /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 Feb 22 10:00 /home/myuser2
      drwx------. 3 myuser3 myuser3 78 Feb 22 10:00 /home/myuser3
      -rw-rw----. 1    1001 mail     0 Feb 22 10:00 /var/spool/mail/myuser2
      -rw-rw----. 1 myuser3 mail     0 Feb 22 10:00 /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 Feb 22 10:00 /home/myuser2
      drwx------. 3 myuser3 myuser3 78 Feb 22 10:00 /home/myuser3
      -rw-rw----. 1    1001 mail     0 Feb 22 10:00 /var/spool/mail/myuser2
      -rw-rw----. 1 myuser3 mail     0 Feb 22 10:00 /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 Feb 22 10:00 /home/myuser2
      -rw-rw----. 1 1001 mail  0 Feb 22 10:00 /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 -rfv /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 pie executable, x86-64, version 1 (SYSV),
       dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,
       BuildID[sha1]=ce58f0a7ae8f98943b5177143936b17db72f6410, for GNU/Linux 3.2.0, 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 Feb 22 10:32 mystudent/
      
      建立成功,但是權限不太對勁!
    3. 修改群組:
      [root@station10-101 srv]# chown .student mystudent/
      [root@station10-101 srv]# ll -d mystudent/
      drwxr-xr-x. 2 root student 6 Feb 22 10:32 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 Feb 22 10:32 mystudent/
      
  • 例題 4.4:課後練習題
    1. 檔案權限的探索與確認:
      1. 直接使用 ll -d 查詢即可:
        [root@station10-101 srv]# ll -d /etc/chrony.keys
        -rw-r-----. 1 root chrony 540 Dec 16  2021 /etc/chrony.keys
        
        (1)擁有者為 root,(2)擁有群組為 chrony,權限是 640 喔!
      2. 看到做左邊是減號,所以,是一般檔案!
      3. 得先要查詢 chrony 這個帳號才行:
        [root@station10-101 srv]# id chrony
        uid=986(chrony) gid=981(chrony) groups=981(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 Feb 22 10:37 /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 Feb 22 10:37 /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 Feb 22 10:41 /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 81384 Feb 22 10:42 /usr/local/sbin/myif
        
修改歷史:
  • 2023/02/17:RHEL 改版到 EL9 了,只好再度改版!否則教學上面挺困擾!
2023/02/17 以來統計人數
計數器
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計