---
# System prepended metadata

title: RHCSA證照筆記

---

# RHCSA證照筆記
## 考前須知
* 在外部開終端機，才可以剪貼ip等資訊
* 必備技巧:
    1.   設定網路
    2.   修改root密碼
    3.   設定repo
    
### [<font color='deep red'>老師上課影片</font>](https://youtube.com/playlist?list=PLeIvob5Ra52rvfePfAkPGg6wX44ZkHuOA)

<font color='blue'>重開機</font>
![](https://i.imgur.com/Efhzpbk.png)

<font color='blue'>跳到下面這個畫面要趕快按方向鍵上or下，使其停在畫面中</font>
![](https://i.imgur.com/HF9uymr.png)

<font color='blue'>選擇第一個標準選單 按'e'(edit)進去修改</font>
![](https://i.imgur.com/8fmrGrI.png)

<font color='blue'>圖中兩個console刪除，並在本行最後加入rd.break</font>
![](https://i.imgur.com/WkFRNsa.png)

<font color='blue'>好了ctrl+x(to start)，mount可以檢查磁碟掛載，會發現目前vda1 掛載在read only(ro)的模式，我們要更改他的模式，mount -o remount,rw /dev/vda1</font>
```bash
$mount
$mount -o remount,rw /dev/vda1
```
![](https://i.imgur.com/fPQCpZb.png)
<font color='blue'>第二件事要改chroot改到sysroot底下
</font>
```bash
$chroot /sysroot
$cd /etc
$cat passwd #就可以看密碼了
$passwd #改密碼
$touch /.autorelabel #考場selinux都是啟動的
$exit
$exit #兩次離開
```

---

## 第一題 設網路
![](https://hackmd.io/_uploads/SJ7CibQS2.jpg)

### server1
```bash
$hostnamectl #可以查看主機名稱
$hostnamectl set-hostname station.domain11.example #設主機名稱
$nmcli con show #查看當前網路
$nmcli con add con-name net1 type ethernet ifname enp1s0 ipv4.method manual ipv4.addresses 10.0.2.2/24 ipv4.dns 8.8.8.8 ipv4.gateway 10.0.2.1 connection.autoconnect yes#按照題目設定
$nmcli con modify "Wired connection 1" connection.autoconnect no #把舊的自動連線關閉
$nmcli con up net1 #啟動
$nmcli con show net1#查看
```

### server2
```bash
 $hostnamectl
 $hostnamectl set-hostname station.domain12.example
 $nmcli con show 
 $nmcli con add con-name net2 type ethernet ifname enp1s0 ipv4.method manual ipv4.addresses 10.0.2.3/24 ipv4.dns 8.8.8.8 ipv4.gateway 10.0.2.1 connection.autoconnect yes#按照題目設定
 $nmcli con modify "Wired connection 1" connection.autoconnect no #把舊的自動連線關閉
$nmcli con up net2 #啟動
$nmcli con show net2#查看 
```

---

## 第二題 - 新增套件庫
![](https://hackmd.io/_uploads/SJ_psbQrh.jpg)

### 正確版
```bash=
#(server1)
su -
cd /etc/pki/rpm-gpg #到這個目錄下
ls
wget http://content.example.com/RPM-GPG-Key #將GPG Key下載下來
cd /etc/yum.repos.d #repository的目錄
ls
vim AppStream.repo #副檔名一定要是repo

[AppStreasm] #代表名稱，怕打錯可以用複製貼上的
name = AppStreasm # 再次宣告名稱，也可不宣告
baseurl = http://content.example.com/AppStream #題目要求的url
enabled = 1 #要啟動，所以 = 1
gpgcheck = 1 #要做gpg的檢查
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-Key #gpgkey放在本機檔案中(注意本機檔案室三個/)

[baseos] #代表名稱，怕打錯可以用複製貼上的
name = baseos # 再次宣告名稱，也可不宣告
baseurl = http://content.example.com/BaseOS #題目要求的url
enabled = 1 #要啟動，所以 = 1
gpgcheck = 1 #要做gpg的檢查
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-Key #gpgkey放在本機檔案中(注意本機檔案室三個/)

yum repolist #確定可以啟動
scp AppStream.repo root@serverc.lab.example.com:~/. #將AppStream.repo檔案複製到另一台機器

# (server2/b)
su -
ls -l
mv AppStream.repo /etc/yum.repos.d/. #將AppStream.repo移到該到的地方
cd /etc/pki/rpm-gpg
wget http://content.example.com/RPM-GPG-Key
yum repolist

```

### 練習版
#### (由於電腦非考試環境，所以沒有RPM-GPG-Key，須自己假造)
```bash=
# (server1/a)
su - 
cd /etc/pki/rpm-gpg #到這個目錄下
ls
cp RPM-GPG-KEY-redhat-release RPM-GPG-Key #假裝RPM-GPG-KEY-redhat-release為RPM-GPG-Key
ls -l #check
cd /etc/yum.repos.d #repository的目錄
ls
vim AppStream.repo #副檔名一定要是repo

[AppStreasm] #代表名稱，怕打錯可以用複製貼上的
name = AppStreasm # 再次宣告名稱，也可不宣告
baseurl = http://content.example.com/AppStream #題目要求的url
enabled = 1 #要啟動，所以 = 1
gpgcheck = 1 #要做gpg的檢查
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-Key #gpgkey放在本機檔案中(注意本機檔案室三個/)

[baseos] #代表名稱，怕打錯可以用複製貼上的
name = baseos # 再次宣告名稱，也可不宣告
baseurl = http://content.example.com/BaseOS #題目要求的url
enabled = 1 #要啟動，所以 = 1
gpgcheck = 1 #要做gpg的檢查
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-Key #gpgkey放在本機檔案中(注意本機檔案室三個/)

yum repolist #確定可以啟動
scp AppStream.repo root@serverc.lab.example.com:~/. #將AppStream.repo檔案複製到另一台機器

# (server1/b)
su -
ls -l
mv AppStream.repo /etc/yum.repos.d/. #將AppStream.repo移到該到的地方
cd /etc/pki/rpm-gpg
ls
cd /etc/pki/rpm-gpg #到這個目錄下
ls
cp RPM-GPG-KEY-redhat-release RPM-GPG-Key
yum repolist
```
---

## 第三題-recommended setting
![](https://hackmd.io/_uploads/ByjCsZ7H2.jpg)
```bash=
# (server1)
yum install tuned  #下載tuned
systemctl start tuned #開始tuned
systemctl enable tuned #保持啟用狀態
systemctl status tuned #檢查tuned狀態
#接下來設定他所建議的recommended的模式
tuned-adm profile #可查看現在activity的profile是甚麼=>最後一行
tuned-adm recommend #顯示機器建議調整的模式
tuned-adm profile + 機器建議的模式 #調整方式
tuned-adm profile #檢查activity的profile 是否成功調整
```
---

## 第四題-使用者建立
![](https://hackmd.io/_uploads/rJlknbXBh.jpg)
```bash=
#(server1)
cd /etc/skel
ls -la #裡面包含所有在新增使用者帳號時複製到家目錄裡頭的東西
touch newuserfile #新增檔案
groupadd accouting #新增accouting的群組
useradd -G accounting harry #新增成員
useradd -G accounting natasha
useradd -s /sbin/nologin Tom #使Tom無法登入login shell
passwd harry #=>密碼:verysafepw
passwd natasha #=>密碼:verysafepw
-------------檢查-----------------
id +user #檢查user
cat /etc/passwd #查看nologin是否成功=>最後一行
cd /home/harry
ls #查看newuserfile是否建立成功
cd /home/natasha
ls #查看newuserfile是否建立成功
cd /home/Tom
ls #查看newuserfile是否建立成功
(#開啟另一個視窗)
ssh harry@server1
ssh natasha@server1 #兩者皆可成功登入
ssh Tom@server1   #Tom則無法連線
```
---

## 第五題 - 建立新目錄、設定特殊權限
![](https://hackmd.io/_uploads/Sk7y3WQS2.jpg)
```bash
cd /home
mkdir accounting #建立accounting的資料夾
ls -la #check
chmod 3770 accounting #因特殊權限(setgid、sticky bit)，所以3放前面
ls -l #check
chgrp accounting accounting #accounting這個資料夾群組為accounting擁有
ls -la #check
useradd imspecial 
getfacl accounting/
setfacl -m user:imspecial:r-x accounting/ #新增一個使用者，給他讀取任何東西的權限(不是r--，而是r-x，因為要讓他進入到使用夾當中，要特別注意此部分)，針對accounting這個資料夾
getfacl accounting/ #check

#測試
su - harry 
cd /home/accounting
ls -l
logout 
su - natasha
cd /home/accounting
touch natasha #不管誰建檔案，都會是accounting所擁有
rm harry#由於stricky bit，所以不可以刪除檔案
logout
su - imspecial
cd /home/accounting
ls -la
cat harry #可以開始讀檔案

```
---

## 第六題 - 找到所有由harry擁有的檔案，複製到資料夾中
![](https://hackmd.io/_uploads/SyLJ3b7B3.jpg)
```bash
pwd #check at /root
ls
mkdir harrysfiles
ls -l#check
find / -user harry #從全硬碟(/)開始找，指定user是harry
find / -user harry -exec cp -frp {} /root/harrysfiles/ \; #複製檔案，\;代表exec結束的意思，有一些錯誤狀況出現不管它，因為那是不能複製的檔案
ls 
cd harrysfiles
ls -la #check
```
---

## 第七題 - 找檔案中所有包含abcd這行字的東西，放入/root/testfile中
![](https://hackmd.io/_uploads/rJqk2-7H2.jpg)
**由於目前/root/tmpfile沒有此檔案，所以先假造一個**
```bash=
cd 
cp /etc/passwd tmpfile
ls #check
vim tmpfile #自己把其中幾行添加abcd
grep abcd tmpfile
grep abcd tmpfile > /root/testfile #將grep的東西導向testfile檔案
ls
cat testfile #check
```
---

## 第八題 - 檔案壓縮
![](https://hackmd.io/_uploads/HyC12WXrh.jpg)
```bash
tar cjvf /root/archive.bz2 /root/testfile#(bzip - j，gzip - z，xzip - J)
ls -la #check
```
---

## 第九題 - 改密碼
![](https://hackmd.io/_uploads/S1-e2WmH3.jpg)
```bash=
#不要做錯台
passwd #輸入新密碼freda123
```
---

## 第十題 - 在每天14:23分把date指令輸出、設定log訊息
![](https://hackmd.io/_uploads/B1Ox3bQB2.jpg)
![](https://hackmd.io/_uploads/SyTgnbXS2.jpg)
```bash=
crontab -e
23 14 * * * date >> /root/mydate #分時幾月幾號星期幾，呼叫date這個指令，把輸出放到/root/mydate，append - >>，overwrite - >
crontab - l #check
at now+2days
at> logger hello
at> ctrl+d
at -c 1 #最後要看到一個logger hello
```
---

## 第十一題 - 系統時間同步
![](https://hackmd.io/_uploads/S18Z2-mH3.jpg)
```bash=
systemctl status chronyd
vim /etc/chrony.conf
#將server 172.25.254.254 iburst 註解掉
server  vvv.zzz.example.com iburst
systemctl restart chronyd
systemctl status chronyd #check，第一行enabled，第二行active
chronyc sources #考試時會看到有在進行同步
```
---

## 第十二題 - 建html檔
![](https://hackmd.io/_uploads/H1s-3ZXBn.jpg)
```bash
systemctl status httpd #check有沒有apache
yum install httpd
systemctl start httpd
systemctl enable httpd
systemclt status httpd
mkdir /web
cd /web
vim index.html
Hello, from Beta
ls -la #check權限
ls -lZ
ls -ldZ .
ls -ldZ /var/www/html
semanage fcontext -a -t httpd_sys_content_t '/web(/.*)?'
restorecon -Rv /web #chcek
ls -lZ #check
semanage port -l | grep http
semanage port -a -t http_port_t 82 -p tcp
semanage port -l | grep http #check
vim /etc/httpd/conf/httpd.conf
Listen 82 #80改成82
#DocumentRoot "/var/www/html"
DocumentRoot "/web"
<Directory "/web">
    AllowOverride None
    Require all granted
</Directory>
firewall-cmd --list-all
firewall-cmd --permanent --add-port=82/tcp
firewall-cmd --reload 
firewall-cmd --list-all #check ports 
systemctl restart httpd
systemctl status httpd
curl http://serverd.lab.example.com:82/ #會顯示出Hello, from Beta
```
---

## 第十三題 - 建立swap partition
![](https://hackmd.io/_uploads/BykGhWQBh.jpg)
```bash=
lsblk
fdisk /dev/vdb
n
p
Enter
Enter
+2G
p
lt
82(Linux swap)
w
partprobe
mkswap /dev/vdb1
vim /etc/fstab
/dev/vdb1   swap  swap   defaults 0 0
swapon -a #掛載起來
free #check會有2G空間起來
```
---

## 第十四題-掛載磁碟
![](https://hackmd.io/_uploads/B1MGn-mSh.jpg)
```bash=
lsblk #先知道自己有沒有磁碟可以用
fbdisk /dev/vdb #(老師自選的磁碟)
出現 command (m for help): n
select (default p):p
partition nmuber: enter
first sector: enter
last sector : enter

出現 command (m for help): p #(查看磁碟)

#linux 格式: 用l列出
出現 command (m for help): l
會找到Linux LVM #(影片中位於8e)

出現 command (m for help): t
Hex code (type L to list all codes):8e

出現 command (m for help): p
#type 應更改為linux LVM

出現 command (m for help): w #(寫入)
partprobe
pvcreate /dev/vdb1
vgcreate -s 16m vgroup0 /dev/vdb1 #-s:physical extend sizes
vgdisplay #(查看檢查 PE Size:16)
lvcreate -n lvolume0 -l 50 vgroup0# -l:指定extend的數量,從vgroup0
lvdisplay #(檢查 LV Path是否是 /dev/vgroup0/lvolume0)
#分割好後進行格式化的動作
mkfs -t vfat /dev/vgroup0/lvolume0
mkdir /lvolume0
vim /etc/fstab
在最後一行輸入 /dev/vgroup0/lvolume0 /lvolume0(將前面那串掛載到後面資料夾) vfat(題目給定的格式)	defaults 0 0
#完成後WQ
#測試檢查
mount -a #(編輯fstab再用mount -a可以確保下次開機可以載入進去)
lsblk #看一下最下面vdb->vdb1->vgroup0-lvolume0=>是否掛載到 /lvolume0
```
---

## 第十五題-建立vdo裝置、格式化、永久掛載
![](https://hackmd.io/_uploads/r1HG3bmr3.jpg)
```bash=
#建立裝置
yum serch vdo #搜尋和vdo有關的套件
yum install vdo kmod-kvdo
systemctl start/enable/status vdo
vdo craete --name myvdo1 --device /dev/vdb(sdc) --vdoLogicalSize=50G(3G) #教室沒有sdc因此以vdb代替,Size不夠因此以3G代替
vdostats 查看
#格式化
mkfs -t xfs /dev/mapper/myvdo1
#永久掛載
mkdir /myvdo1
vim /etc/fstab
/dev/mapper/myvdo1 /myvdo1 xfs	defaults,x-systemd.requires=vdo.service 0 0 #x-systemd.requires=vdo.service取代default做參數
mount -a
lsblk
```
---

## 第十六題-autofs、自動掛載
![](https://hackmd.io/_uploads/r1tGhb7S3.jpg)
![](https://hackmd.io/_uploads/rJ6M2Zmrh.jpg)
```bash=
id remoteuser5 #確認id是否存在
useradd remoteuser5
passwd 
password
yum install autofs #autofs:當我用到某一個資料夾的時候可以自動掛載
systemctl start/enable/status autofs
mkdir -p /rhome/ldap #-p:創建多個目錄
ls -ld /rhome/ldap
vim /etc/auto.master
/rhome/ldap /etc/auto.ldap #第8行，在前面的目錄加入後面的設定檔
vim /etc/auto.ldap
* -rw domain11.example.com:/rhome/ldap/& # *:表示所有使用者帳號，從domain11.example.com 讀取資料並導出/rhome/ldap/ &:使用者對照到不同的資料夾，需硬背
systemctl restart aotofs
```
---

## 第十七題-podman、在shell底下建cotainer
![](https://hackmd.io/_uploads/Bkzm3ZmHh.jpg)
```bash=
yum install podman
podman pull docker.io/ubuntu #pull:download,下載後會以images方式呈現
podman images
podman pull docker.io/httpd
podman run -dt docker.io/library/ubuntu /bin/bash #-dt:以deamon的方式持續執行，用影像檔執行，並給他一個shell(題目要求)
podman ps #可查看有沒有run起來
podman run -dt -t -p 8080:80 docker.io/library/httpd:latest #因為式網頁伺服器，不確定port是否被用掉，所以自行給定一個給他
podman ps
podman container inspect [ubuntu的container id status] | grep Sandbox #container id status在podman ps指令可看到
#出現SandboxKey
podman container inspect [ubuntu的container id status] | grep SandboxKey > /sandbox_ubuntu.txt #將SandboxKey導入絕對路徑sandbox_ubuntu.txt
vim sandbox_ubuntu.txt
#把變數名稱拿掉只下key值
#接下來的http重複操作，只是導向檔案換至sandbox_httpd.txt
```
---

## 第十八題
![](https://hackmd.io/_uploads/HJSmnZXr2.jpg)
```bash=
podman network create --subnet 10.0.5.0/24 newsybnet
podman run -dt --name linda --network newsybnet -v rhelvol:/database rhel7
podman commit linda myimage:v1
```
---

## 第十九題-容器、建立service
![](https://hackmd.io/_uploads/BytmnW7H2.jpg)
```bash=
(server1)
podman pull redis
podman run -dt --name redis -p 6369:6379 redis
podman ps
systemctl status redis
systemctl disable sshd #先關閉在啟動就可以看到要設定的路徑
systemctl enable sshd
cd /usr/lib/systemd/system
cp sshd.service redis.service

#另開一個視窗(server1)
which podman #找到路徑

vim redis.service
[Unit]
Description=Redis Service
#下面三行delete
[Service]
Restart=on-failure
Type=notify
ExecStrat=/usr/bin/podman start redis #路徑為which podman 找到的
ExecStop=/usr/bin/podman stop redis
KillMode=none #(可有可無)
[Install]
WantedBy=multi-user.target

systemctl start/enable/status redis
#若前面podman run少設定-p導致status fail沒關係，主要有在sysytemd裡面啟動servive就有分數
```
---

## 第二十題-特殊權限
![](https://hackmd.io/_uploads/Bk2m3ZQS3.jpg)
```bash=
cp /etc/fstab /var/tmp/fstab
cd /var/tmp
ls -l
chown root:root fstab  #更改所有者和群組
getfacl fstab #查看權限
useradd natasha
useradd hary
setfacl -m user:natasha:rw- fstab
getfacl fstab
setfacl -m user:hary:--- fstab
getfacl fstab
#檢查
su - hary
cd /var/tmp
ls -la
cat fstab
vim fstab
#會顯示權限不夠
su - natasha
#重複上述動作
```
---
