---
# System prepended metadata

title: Linux

---

# Linux 學習筆記-伺服器架設篇

## Linux 安裝
Linux有許多發行版，譬如有名的Ubuntu、Redhat、CentOS等，本報告將以CentOS 7來介紹。

### 安裝虛擬機

Linux說白了也是一種作業系統，我們當然不能直接安裝到電腦上(除非你是專業的工程師?)這時候虛擬機就在學習Linux扮演不可或缺的角色。現在虛擬機大宗有兩家公司，一個是甲骨文公司(Oracle)的Virtualbox，另外一個是美國博通的VMware，這邊建議可以考慮安裝VMware，但是他是屬於付費訂閱型的產品(網路上有很多破解方法，這邊不多贅述XD)
Virtualbox官網:https://www.virtualbox.org/
VMware官網:https://www.vmware.com/tw.html
本報告使用VMware來操作~~~

安裝好之後
去CentOS官網下載映像檔:
http://ftp.ksu.edu.tw/pub/CentOS/7.9.2009/isos/x86_64/
![image](https://hackmd.io/_uploads/BkP8v3I_6.png)

下載好了之後呢...

先建立兩個虛擬機吧↓↓↓(也可以是三台、四台...如果你電腦Hold的住的話，反正不能只建立一台)
![image](https://hackmd.io/_uploads/SyTFL2U_6.png)
建立一台虛擬機之後可以直接Clone，很方便
![image](https://hackmd.io/_uploads/Skbq_3Iu6.png)

安裝步驟...

選擇映像檔↓↓↓
![image](https://hackmd.io/_uploads/BJamF3UOT.png)
建立使用者(useradd ....)
![image](https://hackmd.io/_uploads/SJrYY3Ud6.png)
虛擬機名稱(挺重要的，伺服器互連會用到)
![image](https://hackmd.io/_uploads/SkQb9n8OT.png)
接下來就是Next Next ... Fihish~
![image](https://hackmd.io/_uploads/rkUq93I_6.png)
![image](https://hackmd.io/_uploads/BJ2j5hUO6.png)
### 設定好之後虛擬機會自動啟動，然後開始自動安裝。接下來只要漫長等待就好...
安裝完成~~~
![image](https://hackmd.io/_uploads/HJf3ka8_a.png)


首先先關掉SELinux跟防火牆
![image](https://hackmd.io/_uploads/rka2H68Oa.png)

![image](https://hackmd.io/_uploads/Hkl88T8up.png)
![image](https://hackmd.io/_uploads/SyUEU6Udp.png)
`reboot now`
![image](https://hackmd.io/_uploads/ryuprTL_6.png)

防火牆跟SELinux可能會使後續連線上出問題，所以關掉會比較好

### 設置網路配置

為自己虛擬機設置一個好記的IP位置是個不錯的選擇(至少後續架設伺服器會很方便...)
這邊別照抄，至少先檢查你的網路位置，像我的就是192.168.47.xxx，後面的隨意更改，個人就虛擬機1設定.100虛擬機2設定.101
遮罩的部分就.2，DNS就用8.8.8.8~~~
![image](https://hackmd.io/_uploads/rkOuPRIua.png)

## 使用network設定網路

CentOS預設是使用Network-Manager來控制網路設定，這裡來教大家如何使用Network設定網路

1,輸入`systemctl stop NetworkManager`，把 NetworkManger 關掉。
![image](https://hackmd.io/_uploads/B1-e3eDO6.png)
2，輸入 `ifconfig`，查看 NAT 介面卡 (ens33) 的 IP 位址及 MAC 位址。
![image](https://hackmd.io/_uploads/SkKjhxwua.png)
3，輸入 `route -n` 查看內定路由及網路遮罩。
![image](https://hackmd.io/_uploads/H1yC2eP_a.png)
4，前往 `/etc/sysconfig/network-scripts/`，刪掉除了 `ifcfg-lo` 以外的 `ifcfg` 設定檔案。
![image](https://hackmd.io/_uploads/Hy5UplwdT.png)
5，新增 `ifcfg-ens33`，並寫入下列配置:
```
TYPE=Ethernet
DEVICE=ens33 // NAT 介面卡
ONBOOT=yes
IPADDR=10.0.2.15 // 剛剛查看的 IP 位址
HWADDR=08:00:27:4d:62:da // 剛剛查看的 MAC 位址
NETMASK=255.255.255.0 // 剛剛查看的網路遮罩
GATEWAY=10.0.2.2 // 剛剛查看的內定路由
```
![image](https://hackmd.io/_uploads/HkoopePOp.png)
6，輸入 `systemctl restart network`，然後就大功告成。
![image](https://hackmd.io/_uploads/rklBz0xDda.png)

## ssh server (無密碼登錄,sftp)
設定主機名
![image](https://hackmd.io/_uploads/BJGpAePua.png)
![image](https://hackmd.io/_uploads/Skdgy-DdT.png)
能互ping就是設定完成了。

![image](https://hackmd.io/_uploads/S12mJZPd6.png)
![image](https://hackmd.io/_uploads/HktNyZvua.png)

輸入`ssh-keygen`取得金鑰
![image](https://hackmd.io/_uploads/H1tOWZD_T.png)
`ssh-copy-id root@你的主機`
![image](https://hackmd.io/_uploads/HywAW-PO6.png)
`ssh root@你的主機`
![image](https://hackmd.io/_uploads/r1QMGZDup.png)

## ipv6架站
這邊要搭配手機來開無線基地台分享WIFI給電腦。
設定也要改橋接模式。
![image](https://hackmd.io/_uploads/ryjgVWPda.png)
![image](https://hackmd.io/_uploads/S1JY4Wwda.png)
對了，記得安裝http的套件
![image](https://hackmd.io/_uploads/Byv1B-D_6.png)
測試~~~
![image](https://hackmd.io/_uploads/SJhbrbDO6.png)

## https架站
這裡跟上一個單元有銜接性，只是這邊要去申請一個網域
找一個免費DNS域名網站(失敗了N次，只有這一家成功...)

好像不太安全喔~~
![image](https://hackmd.io/_uploads/H17BDbPup.png)
![image](https://hackmd.io/_uploads/HJYrv-vO6.png)

先安裝certbot
`yum -y install epel-release`
`yum -y install mod_ssl`
`yum -y install certbot`
(安裝完成的圖片省略)

輸入以下指令
certbot certonly --webroot -w /var/www/html -d <你的網域> --email <你的email>
(以下圖片來自老師上課圖片)
![HkFCT_H86](https://hackmd.io/_uploads/B1ABFWwup.png)
![HJC0p_HLa](https://hackmd.io/_uploads/SJm8YbDOa.png)
![BkMkAdrIa](https://hackmd.io/_uploads/BJB8YZPO6.png)

申請成功後記得去ssl.conf修改設定檔
![Syg5kAuB8p](https://hackmd.io/_uploads/HJSqK-w_T.png)
![ryyx0ur8T](https://hackmd.io/_uploads/rJ8cKWvO6.png)
設定完成後，重啟httpd
![S1QZCdBUT](https://hackmd.io/_uploads/B1uhYWvd6.png)
在網域前面加上`https://`
![image](https://hackmd.io/_uploads/SybzcWDOp.png)

## NFS
這是伺服器架設重要的一環，可以令虛擬機之間可以進行檔案互傳。
### 伺服器端
安裝NFS核心
`yum -y install nfs-utils`
![image](https://hackmd.io/_uploads/B1mNAbwua.png)

啟動`rpcbind`與`NFS`
`systemctl start rpcbind`
`systemctl start nfs`

設定共享資料夾
`mkdir /data`
設定權限(777就對了!!!)
`chmod 777 /data`
編輯exports(導出目錄)檔
`vim /etc/exports`
![image](https://hackmd.io/_uploads/HkLZyfD_T.png)
重啟NFS
`systemctl restart nfs`
檢查一下本地共享目錄
`showmount -e localhost`
![image](https://hackmd.io/_uploads/S1Q1gfDd6.png)

### 客戶端
一樣安裝NFS核心
`yum -y install nfs-utils`

一樣啟動`rpcbind`與`NFS`
`systemctl enable rpcbind`
`systemctl start nfs`

### 客戶端連接

檢查伺服器端IP
`showmount -e 192.168.47.100`
創建資料夾
`sudo mkdir /data`
掛載
`sudo mount -t nfs 192.168.47.100:/data /data`

測試:
`touch {a..c}`
![image](https://hackmd.io/_uploads/SyCUVzwua.png)
![image](https://hackmd.io/_uploads/ryEdVzD_a.png)

## SAMBA
介紹完虛擬機之間互傳，現在來介紹虛擬機與本機之間的互傳。

### install SAMBA
`yum install samba samba-client samba-common -y`

```
 cd /
 mkdir test_samba  # 建立測試資料夾
 chown nobody ./test_samba/  # 設定權限為nobody(設定沒有擁有者)
 chmod 777 ./test_samba/  # 設定權限讓其他人可以寫入
 ll ./test_samba/ -d  # 查看資料夾權限 # 需要加上 -d
```
![image](https://hackmd.io/_uploads/H1vqJEuuT.png)

### 編輯 SAMBA 設定主要設定檔案
`vim /etc/samba/smb.conf`
```
[test]
        comment = for test
        path = /test_samba
        read only = no
        guest ok = yes
        browseable = yes
```
![image](https://hackmd.io/_uploads/Bkmr2QdO6.png)
### 測試設定的參數有沒有問題
`testparm`
![image](https://hackmd.io/_uploads/ByjyTmddp.png)

### 啟動SAMBA
`systemctl start smb`
![image](https://hackmd.io/_uploads/r1SHpQdda.png)
### 建立SAMBA 存取密碼，並加入使用者
`smbpasswd -a XXX`
![image](https://hackmd.io/_uploads/BylBA7dOa.png)
### 測試SAMBA
`windows+R`
![image](https://hackmd.io/_uploads/B1Q_Amu_T.png)
    
![image](https://hackmd.io/_uploads/B1wtCXdO6.png)

## ngrok

這個東東可以讓外網連線你的網路(但是不是永久的就是了...)
### 先安裝ngrok
`yum install epel-release`
```
yum install snapd 
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
snap install ngrok
```
### 將Authtoken加到ngrok.yml檔案裡
![image](https://hackmd.io/_uploads/HkveME_dT.png)

### 啟動ngrok
`ngrok http 80`
![image](https://hackmd.io/_uploads/rkfrGE__T.png)
![image](https://hackmd.io/_uploads/ry2uMEO_6.png)
![image](https://hackmd.io/_uploads/S1g9GNuuT.png)

## LAMP
Linux資料庫套件學習...

先安裝套件
`yum -y install mariadb-server mariadb`

啟動服務
```
systemctl start mariadb
systemctl enable mariadb
```

`mysql_secure_installation`
設定密碼為，只有 Disallow root 和 Remove test 選 n，其他選 y 或 enter
![image](https://hackmd.io/_uploads/rJV7N4u_T.png)

啟動資料庫
![image](https://hackmd.io/_uploads/BkpNNVu_p.png)
```
create database testdb;
use testdb;
```
![image](https://hackmd.io/_uploads/rJtnVN__T.png)

新增資料行
```
create table addrbook(name varchar(50) not null, phone char(10));
insert into addrbook(name, phone) values ("tom", "0912123456");
insert into addrbook(name, phone) values ("mary", "0987465123");
```

`exit`
安裝PHP
`yum -y install php php-mysql php-fpm`
重啟httpd
`systemctl restart httpd`
編輯PHP檔案
`vim /var/www/html/testdb.php`
![image](https://hackmd.io/_uploads/BJbUBNuOa.png)
```
<?php
$servername="127.0.0.1";
$username="root";    
$password="centos";
$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";
}
?>
```
#### 在網址列輸入 http://[IPv4]/testdb.php 進行驗證

### httpd(資料夾限制ip存取, 密碼登錄下載檔案)
`在 Windows 的 CMD 下輸入 ipconfig`
![image](https://hackmd.io/_uploads/rk6a8VOu6.png)
### 只讓 Windows 存取
`vim /etc/httpd/conf/httpd.conf`
```
<Directory "/var/www/html">
    AllowOverride All
</Directory>

<Directory "/var/www/html/files">
    Options Indexes
    Order deny,allow
    Deny from all
    Allow from 192.168.XXX.XXX
</Directory>
```
![image](https://hackmd.io/_uploads/r1lVwVudp.png)
```
cd /var/www/html
mkdir files
cd files
touch {a..d}
systemctl restart httpd
```
![image](https://hackmd.io/_uploads/rycnP4__a.png)

`vim /etc/httpd/conf/httpd.conf`
```
<Directory "/var/www/html/files">
    Options Indexes
    AllowOverride AuthConfig
</Directory>
```
```
cd /var/www/html/files
htpasswd -c .htpasswd user
設定密碼
```
`vim .htaccess`
```
AuthType Basic
AuthName "Private File Area"
AuthUserFile /var/www/html/files/.htpasswd
Require valid-user
```
`systemctl restart httpd