# SSH Server by 資工三 111110517 范揚玄 ## 指令 安裝 ssh 伺服器 ```vim= sudo apt install openssh-server ``` 套件查詢 ```vim= dpkg -l | grep ssh ``` ssh 伺服器狀態查詢/控制 ```vim= systemctl status ssh start stop restart reload enable disable ``` 上個指令是否成功 ```vim= echo $? ``` 生成 ssh 密鑰 ```vim= ssh-keygen ssh-copy-id wrr606@UB2 ``` 產生名為 file 檔案 ```vim= touch file touch a{00..99}.cpp ``` 傳送 file 檔案 / 下載 file 檔案 ```vim= scp file wrr606@UB2: scp wrr606@UB2:file . ``` ## 使用主機名代替 IP 加上下行 ```vim= vim /etc/hosts ``` ```vim= 192.168.242.131 R2 ``` ## 0.0.0.0 在伺服端/雲端表示 **任意介面** (「監聽所有可用的介面」或「接受任意 IP 連接」) 在 PC 上表示 **尚未取得 IP** # NFS Server ## 步驟 **UB1:Server UB2:client** UB1:安裝 Server 端 ```vim= apt install -y nfs-kernel-server ``` UB1:新增要共享的資料夾 ```vim= mkdir /mynfs ``` UB1:調整資料夾權限 ```vim= chown -R nobody:nogroup /mynfs ``` UB1:加入下行 ```vim= vim /etc/exports ``` ```vim= /mynfs *(rw,sync,no_subtree_check,all_squash) ``` UB1:重啟 nfs-kernel-server ```vim= systemctl restart nfs-kernel-server ``` UB2:安裝 client 端 ```vim= apt install nfs-common -y ``` UB2:新增要共享的資料夾 ```vim= mkdir /mydata ``` UB2:關聯到 UB1 的資料夾 ```vim= mount -t nfs -o rw,resvport 192.168.242.130:/mynfs /mydata ``` 若要取消關聯 ```vim= umount /mydata ``` # 插入新硬碟 參考教學:https://reurl.cc/xv20Ve ## VMWare 操作 ### 插入 USB 關機狀態下,調整成 USB 3.1 後再插入 USB ### 新增虛擬硬碟 ![image](https://hackmd.io/_uploads/SJdSMrBr1l.png) 選擇 Add 新增硬體,並選擇 Hard Disk ## 步驟 查看掛載點 ```vim= lsblk ``` 查看磁碟使用情況 ```vim= df -h ``` 查看插入的所有硬碟 ```vim= ls /dev/sd* ``` 分割磁碟 ```vim= fdisk /dev/sdb 輸入 n 按 Enter 輸入 p 按 Enter 輸入 1 按 Enter 按 Enter 輸入 w 再按 Enter ``` 用 fdisk 確認分割區 ```vim= fdisk -l /dev/sdb ``` 格式化磁碟 ```vim= mkfs -t ext4 /dev/sdb1 ``` 掛載硬碟 ```vim= mount /dev/sdb1 /mydisk ``` ## 開機自動掛載 查詢硬碟 UUID ```vim= blkid ``` 將 UUID 複製貼上 ```vim= vim /etc/fstab ``` ```vim= UUID=fa7f7fe7-e7ac-4b16-8352-0713428eda08 /mydisk ext4 defaults 0 1 ``` 重開機後確認是否成功掛載 ```vim= df -h ``` # MySQL 參考教學:https://blog.tarswork.com/post/mariadb-install-record ## 步驟 ### Server 端 安裝金鑰 ```vim= sudo apt-get install apt-transport-https curl sudo mkdir -p /etc/apt/keyrings sudo curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp' ``` 加入儲存庫 ```vim= vim /etc/apt/sources.list.d/mariadb.sources ``` ```vim # MariaDB 11.1 repository list - created 2023-11-08 06:16 UTC # https://mariadb.org/download/ X-Repolib-Name: MariaDB Types: deb # deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details. # URIs: https://deb.mariadb.org/11.1/ubuntu URIs: https://ftp.ubuntu-tw.org/mirror/mariadb/repo/11.1/ubuntu Suites: jammy Components: main main/debug Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp ``` 安裝 MariaDB ```vim= apt-get update apt install mariadb-server systemctl status mariadb mysql_secure_installation ``` 編輯 MariaDB 設定檔 ```vim= vim /etc/mysql/mariadb.conf.d/50-server.cnf ``` ```vim= bind-address = 0.0.0.0 ``` 新增資料庫權限 ```vim= mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'user' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` 關閉防火牆並重開 ```vim= systemctl stop ufw systemctl disable ufw service mysql restart ``` ### Client 端 安裝客戶端 ```vim= apt install mysql-client ``` 遠端連入資料庫 ```vim= mysql -h 192.168.242.130 -u root -p ``` ## 指令 查看資料庫 ```vim= show databases; ``` 創建資料庫 ```vim= create database testdb; ``` 使用資料庫 ```vim= use testdb; ``` 創建資料表 ```vim= create table addrbook(name varchar(50) not null, phone char(10)); ``` 插入資料 ```SQL= INSERT INTO addrbook(name, phone) VALUES ("tom", "0912123456"); INSERT INTO addrbook(name, phone) VALUES ("mary", "0912123567"); ``` 使用 SQL 語法查詢資料 ```SQL= SELECT name,phone FROM addrbook; ``` 查看 CPU 使用率 ```vim= apt install dstat dstat -c -n -d 10 ``` 監控系統 ```vim= top -------------------------- apt install iotop iotop ``` # Apache 參考教學:https://docs.ossii.com.tw/books/ubuntu-server-2004-apache-mariadb-php ## 步驟 安裝 apache ```vim= apt -y install apache2 apache2-utils ``` 確認啟用情況 ```vim= systemctl status apache2 ``` ![image](https://hackmd.io/_uploads/rJqUpdSHye.png) 安裝 PHP ```vim= apt install software-properties-common add-apt-repository ppa:ondrej/php apt update -y apt install php8.1 libapache2-mod-php8.1 php8.1-gd php8.1-mysql php8.1-curl php8.1-mbstring php8.1-intl -y apt install php8.1-gmp php8.1-bcmath php8.1-imagick php8.1-xml php8.1-zip -y a2enmod php8.1 systemctl restart apache2 ``` 測試 PHP 版本資訊 ```vim= vim /var/www/html/info.php ``` ```php= <?php phpinfo(); ?> ``` ![image](https://hackmd.io/_uploads/SJyr6_HH1g.png) 連線去資料庫提取資料 ```vim= vim /var/www/html/test.php ``` ```php= <?php $servername="127.0.0.1"; $username="root"; $password="user"; $dbname="testdb"; $conn = new mysqli($servername, $username, $password, $dbname); if($conn->connect_error){ die("connection failed: " . $conn->connect_error); } else{ echo "connect OK!" . "<br>"; } $sql="select name,phone from addrbook"; $result=$conn->query($sql); if($result->num_rows>0){ while($row=$result->fetch_assoc()){ echo "name: " . $row["name"] . "\tphone: " . $row["phone"] . "<br>"; } } else { echo "0 record"; } ?> ``` ![image](https://hackmd.io/_uploads/B1R7TOHHJx.png) # Apache 網頁啟用密碼驗證 參考教學:https://xenby.com/b/104-%E6%95%99%E5%AD%B8%E5%B0%8D%E7%B6%B2%E9%A0%81%E5%95%9F%E7%94%A8%E5%AF%86%E7%A2%BC%E9%A9%97%E8%AD%89-apache ## 步驟 安裝 apache2-utils ```vim= apt-get install apache2-utils ``` 新增使用者 ```vim= sudo htpasswd -c /etc/apache2/.htpasswd username001 ``` 使用 vim 修改設定檔 ```vim= vim /etc/apache2/sites-enabled/000-default.conf ``` ```html= <Directory "/var/www/html"> AuthType Basic AuthName "You need to login" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory> ``` 重啟伺服器 ```vim= systemctl restart apache2 ``` ![image](https://hackmd.io/_uploads/rJ9uTurHJe.png) # Python Flask ## 步驟 安裝 python ```vim= apt install python3-pip -y ``` 安裝 Flask ```vim= pip3 install flask ``` 執行 `run.py` ```python= # run.py from flask import Flask app = Flask("test") @app.route('/') def hello_world(): return '<h2>Hello, World!</h2>' @app.route('/test') def hello_world2(): return '<h2>Test</h2>' if __name__ == '__main__': app.run(host='0.0.0.0', port=3000, debug=True) ``` ```vim= python3 run.py ``` # 使用者管理 ## 指令 新增使用者 ```vim= useradd -m Function -s /bin/bash ``` 更改使用者密碼 ```vim= passwd Function ``` 刪除使用者及其目錄 ```vim= userdel -r Function ``` 新增部門 ```vim= groupadd teacher groupadd english ``` 新增成員並加入部門(-g 主要部門 -G 次要部門) ```vim= useradd -g teacher -G english Sam ``` 顯示使用者訊息 ```vim= id Sam ``` 新增成員並加入賦予 sudo 權限 ```vim= useradd -G sudo Sam ``` 切換使用者 ```vim= su Sam ``` # Shell 腳本 創建 Shell 腳本 ```vim= vim test.sh ``` ```vim= #!/user/bin/bash touch {1..3} ``` 使用 Bash 執行 ```vim= bash a.sh ``` # 硬連結(Hard Link) 與 符號連結(Symbolic Link) ## 硬連結(Hard Link) - **類似 C++ 的 Reference。** - 無論修改哪一個,另一個也會同步變化。 - 刪除原始檔案,硬連結仍然可以正常訪問檔案數據。 - 硬連結不能跨越不同的文件系統(例如,不能在 `/home` 和 `掛載硬碟` 之間創建硬連結)。 - 不能指向資料夾。 ### 範例 ```vim= ln test.txt test_hardlink.txt ``` ## 符號連結(Symbolic Link) - **類似 Windows 的捷徑。** - 符號連結指向檔案的路徑。 - 如果原始檔案被刪除,符號連結會變成「斷開的連結」或「死連結」,無法再正常訪問。 - 符號連結可以跨越不同的文件系統,也可以指向資料夾。 ### 範例 ```vim= ln -s test.txt test_symboliclink.txt ``` # 單引號 `'` 和 雙引號 `"` ## 單引號 `'` - 所見及所得 - 特殊字符不會生效 ## 雙引號 `"` - 可印出指令 - 雙引號內的內容會進行變數替換和特殊字符解釋 # 監控使用者 查看使用者 ```vim= w ``` pts: 使用 ssh 連線登入 tty: 使用虛擬終端登入 記憶體使用率 ```vim= free -h ``` ```vim= last ``` # 更改 host 名稱 更改 host 為 UB1 ```vim= hostnamectl set-hostname UB1 ``` # SAMBA 分享 安裝 SAMBA 伺服器 ```vim= apt install samba samba-common -y ``` 新增資料夾 ```vim= mkdir sharea shareb ``` 調整權限為 777 ```vim= chmod 777 a b ``` 新增測試用的帳號 ```vim= adduser Sam adduser Tom ``` 設定密碼 ```vim= smbpasswd -a Sam smbpasswd -a Tom ``` 修改配置檔,新增下列文字(**路徑是絕對位置,不是相對位置**) ```vim= vim /etc/samba/smb.conf ``` ```vim= [sharea] path = /home/user/sharea comment = guest access folder writable = yes browseable = yes guest ok = yes [shareb] path = /home/user/shareb comment = have auth can access writable = yes browseable = yes valid users=Sam,Tom write list=Sam,Tom ``` 重啟 Samba 伺服器 ```vim= systemctl restart smbd ``` Windows 檔案總管輸入 `\\192.168.242.130`(R1 IP) ![image](https://hackmd.io/_uploads/ByD7VOSLye.png) # 將虛擬機設定為路由 以 R1 當作路由 ![未命名](https://hackmd.io/_uploads/HkstlFrLyx.png) ## VMWare 設定 R1: `NAT、LAN Segment(LAN10)、LAN Segment(LAN20)` H1: `LAN Segment(LAN10)` H2: `LAN Segment(LAN20)` ## CMD 部分 H1: `192.168.10.1` :::info ```vim= ip addr add 192.168.10.1/24 dev ens33 ifconfig ens33 0 ip route add default via 192.168.10.254 ``` ::: H2: `192.168.20.1` :::info ```vim= ip addr add 192.168.20.1/24 dev ens33 ifconfig ens33 0 ip route add default via 192.168.20.254 ``` ::: R1: `192.168.10.254` `192.168.20.254` :::info ```vim= ip addr add 192.168.10.254/24 dev ens37 ip addr add 192.168.20.254/24 dev ens38 ifconfig ens37 0 ifconfig ens38 0 ``` ```vim= echo 1 > /proc/sys/net/ipv4/ip_forward ``` ::: 相互 ping 的通就是成功了 # DHCP Server 以 R1 當作路由 ![未命名](https://hackmd.io/_uploads/HkstlFrLyx.png) ## 步驟 以上文 `「將虛擬機設定為路由」` 接續 參考教學:https://www.kjnotes.com/linux/118 R1: :::info 安裝 DHCP 套件 ```vim= apt install isc-dhcp-server -y ``` 在配置檔加入下列文字: ```vim= vim /etc/dhcp/dhcpd.conf ``` ```vim= subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.1 192.168.10.100; option subnet-mask 255.255.255.0; option routers 192.168.10.254; option broadcast-address 192.168.10.255; default-lease-time 600; max-lease-time 7200; } subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.1 192.168.20.100; option subnet-mask 255.255.255.0; option routers 192.168.20.254; option broadcast-address 192.168.20.255; default-lease-time 600; max-lease-time 7200; } ``` 重啟套件 ```vim= systemctl restart isc-dhcp-server ``` ::: # NAT 網路 網路分布: ![未命名](https://hackmd.io/_uploads/H1zEKE3Qkg.png) 以上文 `「DHCP Server」` 接續 網卡: R1: `NAT、LAN Segment(LAN10)、LAN Segment(LANR1R2)` R2: `NAT、LAN Segment(LAN20)、LAN Segment(LANR1R2)` H1: `LAN Segment(LAN10)` H2: `LAN Segment(LAN20)` ## 步驟 1. 在 Ubuntu 中設定每個節點的每個網卡 IP 至上圖位置 2. R1、R2 都需按照上文 `「DHCP Server」` 安裝 DHCP 套件並開啟路由功能 :::info ```vim= echo 1 > /proc/sys/net/ipv4/ip_forward ``` ::: 3. R1: :::info 在配置檔加入下列文字: ```vim= vim /etc/dhcp/dhcpd.conf ``` ```vim= subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.1 192.168.10.100; option subnet-mask 255.255.255.0; option routers 192.168.10.254; option broadcast-address 192.168.10.255; default-lease-time 600; max-lease-time 7200; } ``` 重啟套件 ```vim= systemctl restart isc-dhcp-server ``` 配置 `12.1.1.1` ```vim= ip addr add 12.1.1.1/24 dev ens38 ``` 設定轉發 ```vim= ip route add 192.168.20.0/24 via 12.1.1.2 ``` ::: 4. R2: :::info 在配置檔加入下列文字: ```vim= vim /etc/dhcp/dhcpd.conf ``` ```vim= subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.1 192.168.20.100; option subnet-mask 255.255.255.0; option routers 192.168.20.254; option broadcast-address 192.168.20.255; default-lease-time 600; max-lease-time 7200; } ``` 重啟套件 ```vim= systemctl restart isc-dhcp-server ``` 配置 `12.1.1.2` ```vim= ip addr add 12.1.1.2/24 dev ens38 ``` 設定轉發 ```vim= ip route add 192.168.10.0/24 via 12.1.1.1 ``` ::: 使用 ping 測試 H1 是否可以 ping 到 H2