# Fedora ## 設定裝置 1. 設定一個隨便創立的使用者,例如 q w 或 a 2. 密碼和名稱設立一樣的 3. 進入桌面後,打開終端機 (Terminal),並輸入 `sudo passwd root`這個讓我們進密碼更改系統,輸入密碼後,密碼設定為 `Skills@2024` 4. 登出我們之前創立的使用者,按沒有列出來,帳號輸入 root,密碼輸入前面所設定的密碼`Skills@2024`,並登入 5. 打開設定,按網路,並設定固定IP - 設置 **固定 IP 地址**: - 打開 **網絡設置**。 - 選擇 **手動配置**。 - IP: `192.168.1.110` // 試場指定主機固定 IP - 子網掩碼: `255.255.255.0` - 閘道: `192.168.1.254` // Windows 主機 - DNS: `192.168.1.254` // Windows 主機 6. 打開終端機,並輸入 `userdel`前面創立的使用者 例: `userdel q` 7. 使用 `rpm -ivh * --force` # 指令 ## 更改主機名稱 這個可以透過設定的 UI 更改 ```bash hostnamectl set-hostname Business-01 ``` ## 刪除使用者 ```bash userdel -r user ``` ## 增加群組 ```bash groupadd AIOTGroup ``` ## 增加使用者 ```bash useradd user ``` ## 使用者資訊 ```bash id {{ user }} ``` ## 檢查 SELinux 是否開啟 ```bash sestatus ``` ## 開啟 SELinux 1. 先到使用 `nano` 或 `gedit` 打開 `/etc/selinux/config` 2. 在這裡把 `disabled` 改成 `enforcing` ``` codeSELINUX=disabled ``` # 改 ssh 的連接埠 ## 進入 ssh 的資料夾 ```bash cd /etc/ssh/ ``` ## 編輯 sshd_config 這個可以用 nano 或 gedit ```bash nano sshd_config ``` 或 ```bash gedit sshd_config ``` nano 用 ctrl+x, y Enter 退出並儲存 ## 在 sshd_config 中加入 ``` Port 2424 PermitRootLogin no AllowUsers AIOT? AIOT10 ``` Port 為它的連接埠,要用試場要求的連接埠 (2424) PermitRoot Login 為 root 帳號登入,要用試場要求的設定 (基本上一定是不允許的,因為 root 是最高等級的使用者,和 Windows 的可以登入的 Administrator 差不多) AllowUsers 是可以在範圍內的使用者,可以登入,?是 Wildcard,最後的帳號就是最後可以登的使用者 (113 年是 AIOT1~10 所以就是 AIOT? AIOT10) ## 使用 SELINUX 允許 SSHd 使用 2424 的 port ```bash semanage --port -a -t ssh_port_t -p tcp 2424 ``` ## 重新啟動 sshd ```bash systemctl restart sshd.service ``` ## 打開 ssh 的連接埠 (這個步驟可以越過,因為ssh有時候預設用 Firewalld 打開連接埠,但這個只確認的而已) ```bash firewall-cmd --add-service-ssh --permanent ``` ## 打開連接埠 **在 113 年的工科賽,有要把 ssh 公開到網路上 (要在 Windows Server 裡打開連接埠)** # 大量創立使用者 ## 程式 ```bash userStartsWith="" # 帳號開頭 startNum=1 # 數字開頭 incrementBy=1 # 一次要加多少 endNum=50 # 最終數字要是多少 group="" # 要加入的群組 password="" # 密碼 for number in $(seq -w startNum incrementBy endNum) # 重複跑,注意只要是單位數字的一定會是 0X! do # 開頭 useradd -g $group -s /bin/bash $userStartsWith$number echo $password | passwd --stdin $userStartsWith$number done # 結尾 ``` ## 解釋 這段 Bash 腳本的功能是在 Fedora 系統上大量創建使用者帳號,並且為每個帳號設定密碼。以下是腳本的逐步解釋: ```bash userStartsWith="" ``` 定義一個變數 u,儲存使用者名稱的前綴部分 (目前為空)。 ```bash for i in $(seq -w 1 2 50)#:使用 seq 產生一個從 1 到 50 的數列,並以兩位數格式表示 (01, 02, ..., 50),並每個數字都有 +2 的差別。 ``` 這裡的 ```-f "%02g"``` 會強制將數字格式化為兩位數。 ```bash useradd -g {{ group }} -s /bin/bash $userStartsWith$i # useradd 是用於新增使用者的指令。 ``` ```-g {{ group }}```:將使用者加入指定的群組 ({{ group }} 是變數,應替換成實際的群組名稱)。 ```-s /bin/bash```:設定使用者的預設 shell 為 Bash。 $u$i:建立的使用者名稱由變數 u (前綴) 加上數字序號組成,例如 user01、user02。 ```bash echo "{{ password }}" | passwd --stdin $u$i ``` 這行用來設定使用者密碼。 ```echo "{{ password }}"```:將密碼以純文字格式輸出 (變數應替換為實際密碼)。 ```passwd --stdin $u$i:passwd``` 是用來變更密碼的指令,--stdin 表示透過標準輸入接收密碼,而不是互動式輸入。 ## 範例 以 113 年的為例 ```bash userStartsWith="AIOT" # 帳號開頭 startNum=1 # 數字開頭 incrementBy=1 # 一次要加多少 endNum=50 # 最終數字要是多少 group="AIOTGroup" # 要加入的群組 password="AIOT2024@" # 密碼 for number in $(seq -f "%02g" startNum incrementBy endNum) # 重複跑,注意只要是單位數字的一定會是 0X! do # 開頭 useradd -g $group -s /bin/bash $userStartsWith$number echo $password | passwd --stdin $userStartsWith$number done # 結尾 ``` # 設定網頁 + https + 使用者管理 ## 憑證 (Linux 端) ### 進入憑證的資料夾 ```bash cd /etc/pki/tls/certs ``` ### 創立憑證金鑰 ```bash openssl genrsa -out linux.key # 最好是使用 [name].tcivs.com.tw 為名稱 ``` ### 創立憑證要求,並匯出 ```bash openssl req -new -key linux.key -out linux.csr # 最好是使用 [name].tcivs.com.tw 為名稱 ``` #### 我們可以使用 `cat` 或 `gedit` 複製檔案 ##### 使用 `cat` ```bash cat linux.csr ``` ##### 使用 gedit ```bash gedit linux.csr ``` ### 到 AD CA 平台創立憑證 1. 先到 `https://www.tcivs.com.tw/certsrv/`,如果試場沒有指定要不要在 Linux Fedora 裡信任AD CA 的憑證,可以跳過憑證警告頁面 (psst, 到 `https://192.168.1.254` 也 ok!) 2. 按要求憑證,並按進階憑證要求 3. 按用 Base-64 編碼的 CMC ... 要求,並在 `Base-64-encoded certificated request` 輸入欄位中複製你剛剛複製的 Base-64 4. 憑證範本為網頁伺服器(Web),並按提交 ### 移動我們剛剛下載的憑證到憑證的資料夾 這個我們可以直接使用 `nautilus /etc/pki/tls/certs` 並把下載的東西複製到那邊 ### 輸出憑證 (pem) 檔案 ```bash openssl x509 -inform der -in linux.cer -outform pem -out linux.pem ``` ## 網頁 (apache2) ### 進入 httpd 的 config 資料夾 ```bash cd /etc/httpd/conf.d/ ``` ### 創立一個新的檔案 ```sh touch linux.conf ``` ### 編輯檔案,可以用 nano 或 gedit ```sh nano linux.conf ``` 或 ```bash gedit linux.conf ``` ### 檔案 (linux) ```xml ServerName linux.tcivs.com.tw DocumentRoot /var/www/linux SSLEngine on SSLCertificateFile /etc/pki/tls/certs/linux.pem SSLCertificateKeyFile /etc/pki/tls/certs/linux.key AuthName "Private" AuthType Basic AuthBasicProvider file AuthUserFile "/usr/local/etc/passwd" Require user root ``` #### 解釋 ```xml ``` 是代表這個虛擬網頁主機要在 * (所有 IP 位置) 的 443 (HTTPS) port 號來做推播 ``` ServerName linux.tcivs.com.tw ``` 網域為 linux.tcivs.com.tw ,必須是該網域才可以使用該服務 ``` DocumentRoot /var/www/linux ``` 檔案來源來自 `/var/www/linux` ``` SSLEngine on ``` 打開 SSL ``` SSLCertificateFile /etc/pki/tls/certs/linux.pem SSLCertificateKeyFile /etc/pki/tls/certs/linux.key ``` 指向我們剛剛創的 SSL 憑證 ``` AuthName "Private" AuthType Basic AuthBasicProvider file AuthUserFile "/usr/local/etc/passwd" Require user root ``` 設定這個位置需要 "root" 的帳號和密碼 ``` ``` 結束 ### 檔案 (old) ```xml ServerName old.tcivs.com.tw DocumentRoot /var/www/old SSLEngine on SSLCertificateFile /etc/pki/tls/certs/old.pem SSLCertificateKeyFile /etc/pki/tls/certs/old.key ``` #### 解釋 ```xml ``` 是代表這個虛擬網頁主機要在 * (所有 IP 位置) 的 443 (HTTPS) port 號來做推播 ``` ServerName old.tcivs.com.tw ``` 網域為 linux.tcivs.com.tw ,必須是該網域才可以使用該服務 ``` DocumentRoot /var/www/linux ``` 檔案來源來自 `/var/www/linux` ``` SSLEngine on ``` 打開 SSL ``` SSLCertificateFile /etc/pki/tls/certs/old.pem SSLCertificateKeyFile /etc/pki/tls/certs/old.key ``` 指向我們剛剛創的 SSL 憑證 ``` ``` 結束 ### 設定使用者帳號密碼 我們會使用 apache2-utils 的 htpasswd 來設定密碼 ```bash htpasswd -b -c /usr/local/etc/passwd root Skills@2024 ``` 我們用 `htpasswd` 來 寫入檔案 `/usr/local/etc/passwd`,並設定帳號為 `root` 密碼也設定為 `Skills@2024` ### 重啟服務 ```bash systemctl restart httpd.service ``` 如果還沒有啟用服務,或出現錯誤,可以跑 ``` systemctl enable httpd.service systemctl start httpd.service ``` ## NTP (網路時間) ### 關閉預設 NTP 系統 先進入設定,並把自動設定時間的關掉 並在終端機跑以下指令 ```bash systemctl stop ntpd.service systemctl disable ntpd.service systemctl mask ntpd.service ``` ### 編輯檔案 `/etc/chrony.conf` ##### 刪除 ``` pool 2.fedora.pool.ntp.org iburst ``` ##### 增加 ``` allow 192.168.1.0/24 rtcsync manual local stratum 10 ``` ### 防火牆讓NTP的服務可以被其他裝置連線 ```bash firewall-cmd --add-service=ntp firewall-cmd --runtime-to-permanent ``` ### 啟動 Chrony ``` systemctl enable chronyd.service systemctl start chronyd.service ``` ### 把自動更改使時間關掉 ``` chronyc manual on ``` ### 設定時間 ``` chronyc settime 2026-08-20 05:00:05 ``` 設定的時間 2026 年 8 月 20 日 5 點 0 分 5 秒 ### 確認 1. 在 Windows 裡執行 `NTPClock.exe` 2. 按右鍵,並按設定系統時區 3. 把預設網域/預設IP刪除,並增加IP,使用Fedora Linux 的 IP 4. 按下矯正時間,並會看到和Fedora一樣的時間 ## SMB 大量創立使用者 ```bash user="" pwd="" for item in $(seq -f "%02g" 1 1 50) do echo -ne "$pwd\n$pwd\n" | smbpasswd -a -s $u$i done ``` ### 解釋 1. 變數定義 ```bash user="" pwd="" ``` `user=""`:定義變數 user,用於儲存使用者名稱的前綴部分 (目前為空)。 `pwd=""`:定義變數 pwd,用於儲存設定的密碼 (目前為空,需要替換為實際的密碼)。 2. 迴圈產生使用者名稱 ```bash for item in $(seq -f "%02g" 1 1 50) ``` `for item in $(seq -f "%02g" 1 1 50)`:使用 `seq` 產生一個從 1 到 50 的數列,並將其格式化為兩位數 (01, 02, ..., 50)。 item 代表當前迴圈的數字,用於生成使用者名稱的後綴。 3. 創建 SMB 使用者 ```bash echo -ne "$pwd\n$pwd\n" | smbpasswd -a -s $u$i echo -ne "$pwd\n$pwd\n": ``` 使用 echo 將密碼輸出兩次,分別對應 smbpasswd 指令需要的密碼輸入和確認輸入。 -n:禁止自動換行。 -e:啟用特殊字符(如 \n 表示換行)。 | smbpasswd -a -s $u$i: smbpasswd:用於設定或修改 Samba 使用者的密碼。 -a:新增使用者到 Samba 的使用者資料庫。 -s:以非互動模式接收密碼輸入。 $u$i:將變數 user 的前綴與當前序號 (如 01, 02) 組合,生成 SMB 使用者名稱。 ### 範例 假設我們需要創建名稱為 `smbuser01` 到 `smbuser50` 的 SMB 使用者,並設置密碼為 `Password123`: ```bash user="smbuser" pwd="Password123" for item in $(seq -f "%02g" 1 50) do echo -ne "$pwd\n$pwd\n" | smbpasswd -a -s $user$item done ``` ### 運作過程 生成使用者名稱:`smbuser01`, `smbuser02`, ..., `smbuser50`。 為每個使用者執行 `smbpasswd` 命令,並設定密碼為 `Password123`。 密碼會透過管道 `|` 傳入 `smbpasswd`,實現非互動式的密碼設定。