RHCSA 2.0
===
[ToC]
# 模擬考試 v2.0: 1h
- 模擬考試中所有 X 均為當前主機名數字
# 第一題: 重置 root 密碼,並按要求設置網路和主機名稱,IP設置方法為靜態
- 主機名稱: serverX.example.com
- IP 位址: 172.25.X.11
- 網路遮罩: 255.255.255.0
- Gateway: 172.25.X.254
- DNS: 172.25.254.254
### 解題
1. 重置 root 密碼
1. linux16 ... `rd.break console=tty0`
2. switch_root:/# `mound -o remount,rw /sysroot`
3. switch_root:/# `chroot /sysroot`
4. sh-4.2# `passwd`
5. sh-4.2# `touch /.autorelabel`
6. sh-4.2# `exit`
7. switch_root:/# `mount -o remount,ro /sysroot`
8. switch_root:/# `exit`
2. 設定主機名稱
- `hostnamectl set-hostname server6.example.com`
- `hostname`
3. 設定 eth0 的 IPv4 IP
- 直接用 GUI 設定
- CLI 設定
1. 查看網卡名稱
- `nmcli connection show [--active]`
- eth0(Device) => "System eth0"(Name)
2. 修改網路配置
- `nmcli connection modify "System eth0" ipv4.method manual ipv4.addresses 172.25.6.11/24\ 172.25.6.254 ipv4.dns 172.25.254.254`
3. 重啟網路
- ~~`systemctl restart NetworkManager.service`~~
- `systemctl restart network.service`
# 第二題: 將 SELinux 設為 enforcing 模式
1. 用 Vim 打開 SELinux 的設定檔
- `vim /etc/selinux/config`
3. 將 SELINUX 的值改成 ==enforcing==
- `SELINUX=enforcing`
# 第三題: 建立 Yum 軟體倉庫,該 Yum 軟體倉庫將作為默認倉庫
- YUM REPO: http://content.example.com/rhel7.0/x86_64/dvd
- 指令設定
1. 用 `yum-config-manager` 新增 repo`
- `yum-config-manager --add-repo=http://content.example.com/rhel7.0/x86_64/dvd`
2. 用 `rmp` 匯入 GPG Key => 用來確認 Package 沒被修改過
- `rpm --import http://content.example.com/rhel7.0/x86_64/dvd/RPM-GPG-KEY-redhat-release`
- 使用 `yum` repo 設定檔設定
1. 新增 `yum` repo 的檔案
- `vim /etc/yum.repos.d/default.repo`
1. `[default]` => Repo id,可自取
2. `name = DVD` => Repo name,可自取
3. `baseurl = http://content.example.com/rhel7.0/x86_64/dvd` => Repo 的網址
4. `enabled = 1` => 啟用 Repo
5. `gpgcheck = 0` => 不要檢查 GPG Key
# 第四題: 調整邏輯卷 loans 及其上文件系統大小為 300M (310~330M 是可接受的)
### 解題
1. 先調整 LVM 的 Logical Volume
- 壓縮
- `lvreduce /dev/finance/loans --size 300M`
- `lvreduce /dev/finance/loans -L 300M`
- 擴展
- `lvextend /dev/finance/loans --size 300M`
- `lvextend /dev/finance/loans -L 300M`
- 通用 `lvresize /dev/finance/loans --size 300M`
2. 擴充檔案系統(File System)
- 檢查 loans 的檔案系統: `df -T`
- xfs => 只能擴充容量
- `mkfs.xfs <partition>`: 格式化成 xfs
- ex. `mkfs.xfs /dev/vdb1`: 將 /dev/vdb1 格式化成 xfs
- `xfs_growfs <mount point>`: 擴充 xfs 檔案系統的空間
- ex. `xfs_growfs /mnt/storage`
- ext4 => 可擴充也可壓縮容量
- `mkfs.ext4 <partition>`: 格式化成 ext4
- `resize2fs <partition>`: 擴充 ext2/ext3/ext4 檔案系統的空間
# 第五題: 按要求建立用戶組及多個用戶,設置用戶的候選組,設置用戶的預設 shell
### 解題
1. 建立群組 `adminuser`
- `groupadd adminuser`
3. 建立用戶 `natasha`, `harry` 屬於該群組 (該群組他們的第二個群組)
- `useradd --groups adminuser natasha`
- or `useradd -G adminuser natasha`
- `useradd --groups adminuser harry`
- or `useradd -G adminuser harry`
5. 建立用戶 `sarah` 不屬於 `adminuser`,沒有交互的 shell
- `useradd --shell /sbin/nologin sarah`
- or `useradd -s /sbin/nologin sarah`
7. 他們的密碼都是 `tianyun`
- 個別設定
- `echo tianyun | passwd --stdin natasha`
- `echo tianyun | passwd --stdin harry`
- `echo tianyun | passwd --stdin sarah`
- 迴圈設定
```bash
for user in natasha harry sarah; do
echo tianyun | passwd --stdin $user
done
```
# 第六題: 按要求設置文件及目錄全縣,會用到文件 `acl` 權限
- `chmod`: 設定檔案權限
- ex. `chmod 744 file`: 設定 file 的檔案權限
- 7: 使用者權限為 rwx => 可讀、可寫、可執行
- 4: 群組權限為 r-- => 只能讀取檔案內容
- 4: 其他人的權限為 r--
- ex. `chmod u=rwx,g+x,o-w file`: 設定 file 的檔案權限
- u=rwx: 使用者權限為 rwx
- g+x: 增加群組執行的權限
- o-w: 移除其他人寫入的權限
- ex. `chmod a-x file`: 設定 file 權限
- a-x: 移除使用者、群組、其他人的執行權限
- `chown`: 設定檔案使用者
- ex. `chown aaa file`: 設定 file 的使用者為 aaa
- ex. `chown bbb:ccc file`: 設定 file 的使用者為 bbb,群組為 ccc
- `chgrp`: 設定檔案群組
- ex. `chgrp ddd file` 設定 file 的群組為 ddd
- ACL: Access Control List
- `getfacl`: 取得檔案的 ACL
- `getfacl file`: 顯示 file 的 ACL 資訊
- `setfacl`: 設定檔案的 ACL
- ex. `setfacl --modify user:aaa:rwx file`
- 設定單一使用者 aaa 對 file 的權限為可讀、可寫、可執行
### 解題
1. 拷貝 `/etc/fstab` 到 `/var/tmp/fstab`
- `cp /etc/fstab /var/tmp/fstab`
3. 屬主和屬組為 `root`
- `chown root:root /var/tmp/fstab`
5. 任何人都不能執行
- `chmod a-x /var/tmp/fstab`
7. `natasha` 能讀寫
- `setfacl --modify user:natasha:rw /var/tmp/fstab`
- or `setfacl -m u:natasha:rw /var/tmp/fstab`
9. `harry` 沒有任何權限
- `setfacl -m u:harry:0 /var/tmp/fstab`
11. 其他和將來的用戶能夠讀
- `chmod o+r /var/tmp/fstab`
# 第七題: 設置用戶的計畫任務 cron
- `natasha` 每天 14:20 時執行命令: `/bin/echo hello`
1. `crontab -u natasha -e`
2. `20 14 * * * /bin/echo hello`
# 第八題: 設置目錄權限
### 解題
1. 創建共享目錄 `/home/admins`
- `mkdir /home/admins`
3. 屬組為 `adminuser`
- 解法一: `chgrp adminuser /home/admins`
- 解法二: `chown :adminuser /home/admins`
5. `adminuser` 組成員對目錄有**讀**、**寫**和**執行**的權限
- `chmod g+rwx /home/admins`
7. 其他所有用戶沒有任何權限 (root 除外)
- `chmod o-rwx /home/admins`
9. 在 `/home/admins` 目錄中創建的文件,會自動繼承 adminuser 組
- `chmod 2770 /home/admins`
- `chmod 770 /home/admins`
- `chmod g+s /home/admins`
# 第九題: 按指定要求安裝升級內核,保證 grub2 啟動時為默認項目
- YUM REPO: http://content.example.com/rhel7.0/x86_64/errata
### 解題
- 指令解1
- `rpm -ivh <kernel.rpm>`
- kernel.rpm: http://content.example.com/rhel7.0/x86_64/errata/ 下面的 kernel.xxx.rpm
- 指令解2
1. `yum-config-manager --add-repo=http://content.example.com/rhel7.0/x86_64/errata`
2. `rpm --import http://content.example.com/rhel7.0/x86_64/dvd/RPM-GPG-KEY-redhat-release`
3. `yum install kernel`
- 使用 yum 設定檔
- `vim /etc/yum.repos.d/kernel.repo`
1. `[kernel]` => Repo id,可自取
2. `name = Kernel Repo` => Repo name,可自取
3. `baseurl = http://content.example.com/rhel7.0/x86_64/errata`
4. `enabled = 1`
5. `gpgcheck = 0`
# 第十題: 使用 LDAP 作為本地用戶認證方式
- LDAP Server: `classroom.example.com`
- LDAP Base DN: `dc=example,dc=com`
- Root CA: `http://classroom.example.com/pub/example-ca.crt`
### 解題
1. `yum install -y authconfig-gtk sssd`
- `authconfig-gtk`: 圖形介面(GUI)設定 LDAP,使用指令則不須安裝
- `sssd`: authconfig 需要透過 sssd 來認證 LDAP
3. GUI
- Application -> Sundry -> Authentication
- User Account Configuration
- User Account Database: `LDAP`
- LDAP Search Base DN: `dc=example,dc=com`
- LDAP Server: `ldap://classroom.example.com`
- Use TLS to encrypt connections
- `http://classroom.example.com/pub/example-ca.crt`
- Authentication Configuration
- Authentication Method: `LDAP password`
- CLI: `authconfig --enableldap --enableldapauth --ldapserver=ldap://classroom.example.com --ldapbasedn="dc=example,dc=com" --enableldaptls --ldaploadcacert=http://classroom.example.com/pub/example-ca.crt --update`
- tips: `authconfig --enableldap | grep ldap`
# 第十一題: 設置 NTP 服務,同步指定服務器時間
- NTP Server: classroom.example.com
### 解題
- 安裝 chrony NTP Server/Client: `yum install chrony`
1. `vim /etc/chrony.conf`
1. 新增 `server classroom.example.com iburst`
- iburst: 減少 chronyd 啟動時第一次跟 NTP server 同步的時間
2. 刪除其他 server 伺服器
- vim 在一般(指令)模式下按 dd 刪除一整行
2. `systemctl restart chronyd`: 重新啟動,讓 chronyd 讀取 /etc/chronyd.conf
3. `systemctl enable chronyd`: 開機時啟動 chronyd
- 同步確認
- `chronyc sources`: NTP server 資訊
- `chronyc tracking`: 系統時間資訊
# 第十二題: 配置和 LDAP 用戶認證配合的 aufofs 自動目錄掛接
- autofs
- `/etc/auto.master`: `<mount-point> <map-type>`
- `<mount-point>`: 本地掛載位置
- `<map-type>`: 掛載的類型,或設定檔
- `</local/directory> -<options> <server>:</remote/export>`
- options: `man nfs` => mount options
1. `yum install autofs` => 安裝 autofs
3. `vim /etc/auto.master.d/home.autofs`
- `/home/guests /etc/auto.home`
3. `vim /etc/auto.home`
- `ldapuser6 -rw,vers=3 classroom.example.com:/home/guests/ldapuser6`
- or `* -rw,vers=3 classroom.example.com:/home/guests/&`
- or `* -fstype=auto classroom.example.com:/home/guests/&`
4. `systemctl start autofs` => 啟動 autofs
5. `systemctl enable autofs` => 設定開機時啟動 autofs
# 第十三題: 建立用戶 jack,指定 uid 為 2000
- `useradd --uid 2000 jack`
- `--uid 2000`: user id 2000
- or `useradd -u 2000 jack`
- `-u`: `--uid` 的縮寫
# 第十四題: 創建新的 swap 分區 512M,需要寫入 fstab 自動開機掛接
- Swap: 當記憶體不足時,將閒置中程式的記憶體移到暫時的儲存區,空出記憶體空間
1. `fdisk /dev/vdb`: 修改 `/dev/vdb` 的分割表
1. `n`: 新增磁碟分割區
2. `e`: extended => 分割類型:延伸分割區
3. Enter: 使用預設分割代號(default 1)
4. Enter: 使用預設起始位置
5. Enter: 預設使用全部空間
6. `p`: 顯示分割表 => 確認分割狀況
7. `n`: 新增磁碟分割區
8. `l`: logical => 分割類型:邏輯分割區
9. Enter: 預設起始位置
10. `+512M`: 使用 512M 的空間
11. `t`: 改變分割類型
12. `5`: 選擇分割代號5
13. `82`: 分割類型 Swap 代號為 82,不知道可輸入 L 查詢
14. `p`: 顯示分割表
15. `w`: 寫入分割表
2. `partprobe`: 通知作業系統重新掃描分割表
4. `mkswap /dev/vdb5`: 格式化 /dev/vdb5 成 Swap
5. `swapon -s`: 查看 swap,應該沒東西(目前還沒掛載
6. `swapon /dev/vdb5`: 掛載 /dev/vdb5 到 swap
7. `swapon -s`: 查看 swap,掛載成功會顯示 /dev/vdb5
8. `vim /etc/fstab`: 設定開機自動掛載
- `/dev/vdb5 swap swap defaults 0 0`
- or `/dev/vdb5 none swap sw 0 0`
9. `reboot`: 重新開機,查看自動掛載是否成功
10. `swapon -s`: 查看 swap,有 /dev/vdb5 代表自動掛載成功
# 第十五題: 查找屬於用戶 ~~alice~~ natasha 的所有文件,並將其拷貝到 /findfiles
- `find / -user natasha -type f -exec cp -p {} /findfils/ \;`
- `/`: 搜尋根目錄(/)下的所有檔案
- `-user natasha`: 檔案的使用者為 natasha
- `-type f`: 檔案的類型為**一般檔案**(避免搜尋到資料夾
- `-exec ... \;`: 每個結果都會跑一次指令 `...`,`\;` 為告訴 find 指令的結尾
- `cp -p {} /findfiles/`
- 複製 `{}` 到 `/findfiles`
- `-p`: 若資料夾 /findfiles 不存在,則自動建立 /findfiles 資料夾
- 自動建立 parents 資料夾
- `{}`: `find` 會把找到的檔案取代 `{}`
# 第十六題: 在 `/usr/share/dict/words` 中查找到所有包含字符串 seismic 的行,將找出的行按照原文的先後順序拷貝到 `/root/filelist` 文件中。`/root/filelist` 文件不要包含空行
- `grep seismic /usr/share/dict/words > /root/filelist`
- `grep seismic /usr/share/dict/words`
- 尋找檔案 `/usr/share/dict/words` 中有 seismic 的行
- `> /root/filelist`: 將結果儲存到 `/root/filelist`
# 第十七題: 將 /etc 目錄歸檔並壓縮到 /root/backup.tar.bz2,使用 bzip2 壓縮
- `tar cjvf /root/backup.tar.bz2 /etc`
- `c`: 建立壓縮檔
- `x`: 解壓縮
- `j`: 使用 bzip2 壓縮演算法
- `v`: 顯示過程(verbose)
- `f /root/backup.tar.bz2`: 將壓縮的結果儲存到 `/root/backup.tar.bz2`
- `/etc`: 來源為 `/etc`
# 第十八題: 創建邏輯卷 database,屬於卷組 datastore,邏輯卷的大小為 10 個物理擴展單元,物理擴展單元 (physical extent) 大小為 16M。使用 ext4 文件系統對新的邏輯卷進行格式化,自動掛載在 /mnt/database 目錄下。
### 解題
1. 準備大於 160M 的硬碟空間給 LVM
1. `fdisk /dev/vdb`: 操作 `/dev/vdb` 的分割表
1. `n`: 建立新的分割區
2. `l`: 分割區類型: logical
3. Enter: 使用預設起始位置
4. `+200M`: 使用 200M 的空間,只要比 10 x 16M => 160M 大就可以了
5. `t`: 改變分割類型
6. `6`: 選取分割區6,
7. `8e`: 分割區類型為 LVM,可用 L 查詢
8. `p`: 顯示分割表 => 確認分割狀況
9. `w`: 寫入分割表
2. `partprobe`: 告訴作業系統重新掃描磁碟分割表
2. LVM
1. `pvcreate /dev/vdb6`: 設定 `/dev/vdb6` 給 LVM 使用
2. `vgcreate -s 16M datastore /dev/vdb6`
- 建立 Volume Group (容量群組)
- `-s 16M`: 物理擴展單元為 16M
- `datastore`: Volume Group 的名稱為 `datastore`
3. `lvcreate -l 10 -n database datastore`
- 從 Volume Group 建立 Logical Volume (邏輯容量)
- `-l 10`: Logical Volume 的容量為 10 個物理擴展單元
- `-n database`: Logical Volume 的名稱為 `database`
- `datastore`: 將 database(Logical Volume) 建立在 datastore(Volume Group) 裡
- ~~or `lvcreate -L 160M -n database datastore`~~
3. 格式化成 ext4
- `mkfs -t ext4 /dev/datastore/database`
4. 自動掛載到 `/mnt/database`
1. `mkdir /mnt/database`
- 手動掛載: `mount /dev/datastore/database /mnt/database`
- `df -Th`
2. `vim /etc/fstab`
- `/dev/datastore/database /mnt/database ext4 defaults 0 0`
## Reference
- https://liyang85.github.io/rhcsa-exam-questions.html
- https://liyang85.github.io/rhce-exam-questions.html
- https://en.wikipedia.org/wiki/Security-Enhanced_Linux
- https://www.tecmint.com/configure-network-connections-using-nmcli-tool-in-linux/
- https://blog.csdn.net/yangxjsun/article/details/79311884
- http://dywang.csie.cyut.edu.tw/dywang/download/pdf/rhcsa7.pdf
- https://blog.xuite.net/oracle_dba/wretch/212732035-Linux+yum+local+%E5%AE%89%E8%A3%9D
- https://blog.51cto.com/xuding/1767129
- https://codingbee.net/rhcsa/rhcsa-automounting-remotely-shared-folders-nfs-and-cifs
- https://codingbee.net/rhcsa/rhcsa-automounting-using-systemd-and-autofs