### Linux 期中練習 # 一.系統救援 ### A.因為某些緣故,目前這個作業系統應該是無法順利開機的。根據猜測,可能的原因與管理員曾經動過 chsh 這個指令有關,同時,管理員似乎也更動過 fstab 這個設定檔。請依據這些之前的可能舉動,來恢復系統的可登入狀態。 (hint: 千萬不要忘記 .autorelabel 的動作!) ![](https://i.imgur.com/cSUr33e.png) ![](https://i.imgur.com/1y4YDfj.png) ![](https://i.imgur.com/4hduTEI.png) ![](https://i.imgur.com/vdxEisY.png) ![](https://i.imgur.com/ToSBJIu.png) ### B.救援完畢之後,請先使用 vbird_book_setup_ip 指令設定好你的學號與 IP 之後,再開始底下的題目練習。 (這一題可能會無法實做,應該要等到下一題的 2.A 做完,才能夠回到這裡來繼續工作的。) :::success ::: --- # 二.管理員的操作環境整理: ### A.當你用 student 轉成 root 之後,會發現很奇怪的現象,就是很多指令都不能執行了。 這應該與上次登入管理員的用戶處理到錯誤的 bash 環境設定檔有關。請查詢 root 可能的設定檔後,將這個問題解決。 底下為此題的提示: #### a.思考一下,應該是與那一個變數有關? #### b.若要執行其他指令,可能需要使用絕對路徑才能夠執行,例如你不能直接執行 usermod,可能需要透過 /usr/sbin/usermod 來處理。 ::: success vim .bash_profile 刪除該兩行 ![](https://i.imgur.com/lFulBwD.png) source .bash_profile <br> sudo reboot ::: #### c.『個人』的環境設定檔有很多個喔!請仔細檢查。另外,請不要修改到統一的系統設定 #### d.這題處理完畢,請記得要回去處理前一題 1.B 的 vbird_book_setup_ip ### B.增加 histroy 的輸出,讓 root 自己最大可達 10000 筆紀錄,且 (1)其他用戶保留預設值 (2)紀錄檔內也要紀錄 10000 筆。 ::: success echo $HISTSIZE echo $HISTFILESIZE vim .bash_profile ![](https://i.imgur.com/fLVHTMx.png) source .bash_profile echo $HISTSIZE echo $HISTFILESIZE ::: ### C.建立一個命令別名 myerr 這個指令,這個指令會運作『 echo "I am error message" 』這個指令串。 ::: success vim .bashrc ![](https://i.imgur.com/E7Txdby.png) alias myerr="echo I am error message" myerr ::: ### D.當 root 執行『 cd ${mywork} 』時,工作目錄會跑去 /usr/local/libexec/ 當中 ::: warning mywork=/usr/local/libexec ::: ::: success vim .bashrc ![](https://i.imgur.com/1G8AC9H.png) cd ${mywork} pwd ::: ### E.請注意,上述的動作在每次登入之後都會自動生效 (所以需要寫入個人設定檔)。 ::: success vim .bashrc ::: --- ::: warning mywork=/usr/local/libexec alias myerr="echo I am error message" ::: :::success source .bashrc cat .bashrc (檢查用) reboot ::: --- # 三.檔案系統的整理: ### A.系統內有個名為 /dev/vda4 的分割槽,這個分割槽是做錯的,因此,請將這個分割槽卸載,然後刪除分割,將磁碟容量釋放出來。 :::success df -Th vim /etc/fstab (刪除題目所說錯誤分割槽) ![](https://i.imgur.com/h9eZVB3.png) umount /dev/vda4 gdisk /dev/vda ::: :::spoiler ![](https://i.imgur.com/mUvyXym.png) ::: :::success lsblk partprobe----(更 新) lsblk ::: :::warning p:顯示 n:新增 d:刪除 t:修改 :::spoiler ![](https://i.imgur.com/COzlMvP.png) ::: ### B.完成上面的題目之後,請依據底下的說明建立好所需要的檔案系統(所有的新掛載,應該使用 UUID 來掛載較佳。) | 容量 | 檔案系統 | 掛載點 |掛載額外參數 | | --------| --------| -------- |---- | | 1GB | XFS | /mydata/xfs | nosuid | |2GB |VFAT | /mydata/vfat |uid與gid均為student| |1GB |EXT4 |/mydata/ext4 |noatime | |1GB |swap |- |- | ::: success gdisk /dev/vda ::: :::spoiler ![](https://i.imgur.com/eb9dGEq.png) ::: :::spoiler ![](https://i.imgur.com/2gpEtTR.png) ::: :::spoiler ![](https://i.imgur.com/29S9g8q.png) ::: :::spoiler ![](https://i.imgur.com/lbNCDJJ.png) ![](https://i.imgur.com/29Lnz4U.png) ![](https://i.imgur.com/iziw836.png) ::: :::warning p:顯示 n:新增 d:刪除 t:修改 ::: :::success lsblk partprobe lsblk ![](https://i.imgur.com/CaZZF1d.png) mkfs.xfs -f /dev/vda4 mkfs.vfat /dev/vda5 mkfs.ext4 /dev/vda6 mkswap /dev/vda7 blkid |grep vda[4-7] ::: ::: success vim /etc/fstab ![](https://i.imgur.com/pnRiTBY.png) mkdir /mydata mkdir /mydata/xfs mkdir /mydata/vfat mkdir /mydata/ext4 mount -a ::: :::info /etc/fstab 格式: UUID="....."2.掛載的目錄 3.要掛載的檔案系統格式 4.必要參數defaults,nosuid題目需要的參數 0 0 ::: :::success swapon swapon /dev/vda7 swapon -s ::: #### 上述四個新增的資料都能夠開機後自動的掛載或啟用。 ### C.有個光碟映像檔 /mycdrom.iso 的檔案,請將他掛載到 /mydata/cdrom 裡面,而且每次開機都能自動掛載上來。 (請自行查詢光碟檔案掛載時所需要的檔案系統類型) ::: success mkdir /mydata/cdrom ll /mydata vim /etc/fstab ::: :::warning ### /etc/fstab: /mycdrom.iso /mydata/cdrom iso9660 defaults,loop,ro 0 0 ![](https://i.imgur.com/IIlz8wt.png) ::: :::success mount -a df -Th ::: ### D.建立一個名為 /mydata.img 的 200MB 大檔案,這個檔案格式化為 xfs ,且開機會主動的掛載於 /mydata/xfs2/ 目錄中 ::: success dd if=/dev/zero of=/mydata.img bs=1M count=200 mkfs.xfs /mydata.img ll /mydata mkdir /mydata/xfs2 vim /etc/fstab ::: :::warning ### /etc/fstab: /mydata.img /mydata/xfs2 xfs defaults 0 0 ![](https://i.imgur.com/e1V5m6K.png) ::: :::success mount -a df -Th ::: --- # 四.基礎帳號管理,請依據底下的說明,建立或恢復許多帳號: ### A.請刪除系統中的 baduser 這個帳號,同時將這個帳號的家目錄與郵件檔案同步刪除。 ::: success userdel -r baduser ::: ### B.有個帳號 gooduser 不小心被管理員刪除了,但是這個帳號的家目錄與相關郵件都還存在。請參考這個帳號可能的家目錄所保留的 UID 與 GID, 並嘗試以該帳號原有的 UID/GID 資訊來重建該帳號。而這個帳號的密碼請給予 MyPassWord 的樣式。 ::: success useradd -u 1100 gooduser echo MyPassWord | passwd --stdin gooduser ::: ### C.群組名稱為: mygroup, nogroup ::: success group mygroup group nogroup ::: ### D.帳號名稱為: myuser1, myuser2, myuser3 ,通通加入 mygroup,且密碼為 MyPassWord ::: success useradd -G mygroup myuser1 useradd -G mygroup myuser2 useradd -G mygroup myuser3 echo MyPassWord | passwd --stdin myuser1 echo MyPassWord | passwd --stdin myuser2 echo MyPassWord | passwd --stdin myuser3 ::: ### E.帳號名稱為: nouser1, nouser2, nouser3 ,通通加入 nogroup,且密碼為 MyPassWord ::: success useradd -G nogroup nouser1 useradd -G nogroup nouser2 useradd -G nogroup nouser3 echo MyPassWord | passwd --stdin nouser1 echo MyPassWord | passwd --stdin nouser2 echo MyPassWord | passwd --stdin nouser3 ::: ### F.帳號名稱為: ftpuser1, ftpuser2, ftpuser3,無須加入次要群組,密碼為 MyPassWord,且這三個帳號主要用來作為 FTP 傳輸用的帳號, 因此需要不能互動的 shell。 ::: success useradd ftpuser1 usermod -s /sbin/nologin ftpuser1 useradd -s /sbin/nologin ftpuser2 useradd -s /sbin/nologin ftpuser3 echo MyPassWord| passwd --stdin ftpuser1 echo MyPassWord| passwd --stdin ftpuser2 echo MyPassWord| passwd --stdin ftpuser3 ::: --- # 五.管理群組共用資料的權限設計: ### A.建立一個名為 /srv/myproject 的目錄,這個目錄可以讓 mygroup 群組內的使用者完整使用,且【新建的檔案擁有群組】為 mygroup 。不過其他人不能有任何權限 ::: success mkdir /srv/myproject chmod 2770 /srv/myproject ::: ### B.雖然 nogroup 群組內的用戶對於 /srv/myproject 應該沒有任何權限,但當 nogroup 內的用戶執行 /usr/local/bin/myls 時,可以產生與 ls 相同的資訊,且暫時擁有 mygroup 群組的權限,因此可以查詢到 /srv/myproject 目錄內的檔名資訊。 也就是說,當你使用 nouser1 的身分執行【myls /srv/myproject】時,應該是能夠查閱到該目錄內的檔名資訊。 ::: success cd /usr/local/bin cp /usr/bin/ls myls ll chgrp mygroup myls chmod 2755 myls ::: ### C.建立一個名為 /srv/change.txt 的空檔案,這個檔案的擁有者為 myuser1,擁有群組為 nogroup,myuser1 可讀可寫, nouser1 可讀,其他人無權限。 這個檔案所有人都不能執行。此外,這個檔案的最後修改時間請調整成 2020 年 02 月 5 日的 13 點 0 分。 ::: success touch /srv/change.txt chown myuser1:nogroup /srv/change.txt chmod 640 /srv/change.txt touch -t 202002051300 /srv/change.txt ::: --- # 六.檔案的搜尋與管理: ### A.將 /usr/sbin 與 /usr/bin 裡面,只要是具有 SUID 與/或 SGID 的權限檔案,就將該檔案連同權限,全部複製到 /root/findperm 目錄中。 :::success ls -l $(find /usr/sbin /usr/bin -prem /6000) mkdir /root/findperm cp -a $(find /usr/sbin /usr/bin -prem /6000 2> /dev/null) /root/findperm ::: ### B.找出系統中檔案擁有者為 examuserya 的檔名,並將這些找到的檔名(含權限)複製到 /root/finduser/ 目錄內 :::success find /* -user examuserya 2> /dev/null mkdir /root/finduser cp -a $(find /* -user examuserya 2> /dev/null) /root/finduser ::: ### C.有個名為 /srv/mylink.txt 檔案,這個檔案似乎有許多的實體連結檔。請將這個檔案的所有實體連結檔的檔名,通通複製到 /root/findlink 目錄下。 :::success ll /srv ll -i /srv/mylink.txt[複製inode] find /* -inum[剛剛複製的inode] 2> /dev/null mkdir /root/findlink cp -a $(find /* -inum[剛剛複製的inode] 2> /dev/null) /root/findlink ::: ### D.想辦法建立一個檔名 /srv/mail ,當使用者進入 (cd) 這個檔名時,就會被導向 /var/spool/mail 去。(考慮是 symbolic link 還是 hard linke 呢?) :::success ln -s /var/spool/mail /srv/mail ::: ### E.在 root 家目錄下,建立一個名為 -hidden 的目錄(開頭為減號),並將 root 家目錄底下的隱藏檔中,以 .b 為開頭的檔案, 通通複製到 -hidden 目錄內。 :::success cd mkdir /root/-hidden cp -a /root/.b* /root/-hidden ll -a /root/-hidden ::: ### F.在 root 家目錄下,建立一個名為 mydir 的目錄,在該目錄底下建立 userid01, userid02... 到 userid50 的 50 個空目錄 :::success mkdir /root/mydir cd mydir mkdir userid{01..50} ::: ### G.在 root 家目錄下,建立一個名為 myfile 的目錄,在該目錄底下,建立『 file_XXX_YYY_ZZZ.txt 』的檔案,其中 XXX 代表 mar, apr, may 三個字串, YYY 代表 first,second,third 三個字串, ZZZ 代表 paper, photo, chart 三個字串。 :::success mkdir myfile touch myfile/file_{mar,apr,may}_{first,second,third}_{paper,photo,chart}.txt ll myfile ::: ### H.在 root 家目錄下有個名為 ~myuser1 的目錄,請刪除該目錄。 :::success rm -rf /root/~myuser1/ ::: --- # 七.檔案內容的處理: ### A.透過 date 的功能,將目前的時間以『 YYYY-MM-DD HH:MM 』的格式,使用覆蓋的方法記載進 /root/mytext.txt 檔案中。 :::success touch mytext.txt date +"%Y-%m-%d %H:%M" >> /root/mytext.txt ::: ### B.將 /etc/services, /etc/fstab, /etc/passwd, /etc/group 這四個檔案的最後 4 行擷取下來後 (所以應該會有 4*4=16 行,同時會有該檔名記載),『累加』轉存到 /root/mytext.txt 當中。 :::success tail -n 4 /etc/sercices /etc/fstab /etc/passwd /etc/group tail -n 4 /etc/sercices /etc/fstab /etc/passwd /etc/group >> /root/mytext.txt ::: ### C.使用 ll 的方式,將 /etc/selinux/ 的所有檔案列出(不含子目錄內容),但是時間需要使用完整格式 (類似『2020-04-20 23:17:46.363000000 +0800』的格式),並將輸出結果『累加』轉存到 /root/mytext.txt 當中。 :::success ll --full-time /etc/selinux/ >> /root/mytext.txt vim /root/mytext.txt ( 把total跟子目錄的拿掉) ::: --- :::warning # 八.問答題:<span class="background-color:blue;">請將底下的問題的答案寫入 /root/practice1.txt 檔案中:</span> ::: ### A.當你登入系統,系統會給予一個名為 mykernel 的變數,請將這個變數的內容寫下來。 :::success echo ${mykernel} >> practice1.txt ::: ### .格式化ext4檔案系統後,主要有superblock, inode與block區塊,請問這些區塊主要放置哪些東西? :::success ::: ### C.使用任何你知道的程序觀察指令,找到名為 sleep 的程序,找出他的 NI 值是多少? :::success ps -eo pid,ni,comm | grep sleep ::: ### D.在 /srv/ 底下有個隱藏檔的目錄存在,請列出該『目錄』的完整檔名。 :::success ls /srv/.* ls -d /srv/.mye* >>practice1.txt ::: ### E.有一個檔案名稱為:/mydir/myfile(假設檔案是存在的,直接思考題),若 student 用戶想要修改myfile的內容,那麼 student 『至少』需要具有什麼權限才能夠修改該檔案? :::success vim practice1.txt ::: :::warning mydir:x mydile:rw ::: ### F.有一個檔案檔名為 /usr/local/etc/myhosts,請問 student 對這個檔案具有什麼權限? :::success ll /usr/local/etc/myhosts id student ::: ### G.目前你的系統上,哪兩個重要的目錄是(i)記憶體內資訊與(ii)硬體資訊,因此這兩個目錄不佔硬碟空間? :::success :::