# linux伺服器架設系統筆記
>111010536 資工二 林家成
[TOC]
## 9/12 (ssh)
設定主機名稱

檢查是否安裝 SSH

yum install openssh-server => 下載ssh

套件管理與操控

前三個固定,第四個號碼不動

手動固定主機ip

**之後一定要turn off 在 turn on !!**

## 9/19 (ssh遠端連線)
virtualbox box **要開兩張** nat hosyonly 網際網路通訊 連其他主機 (**其他虛擬機 或 自己 windows**)
nat **10.0** 開頭

host **192.168** 開頭

vmware 只需一張nat就足夠跟網路上做通訊
ssh server => **設在22port** tcp通訊協定 => **主要用來遠端登入**
hostnamectl set-hostname [要該名稱] => 更改伺服器名稱
### 檢查是否能 sshd 連線 (例如 putty(別用198.168.1.1登入) 和 winscp) 考 無密碼登入

1. 有沒有在預設的port上

2. 檢查伺服器是否有開啟
systemctl status sshd => 查看有沒有開啟
3. 檢查selinux 要等於disable 執行reboot (0.0.0.0 代表任意介面)


4. 檢查防火牆
systemctl stop firewalld => 要關閉防火牆
成功如下 =>
winscp 能複製檔案到另一台主機

### 使用網域名稱互 ping
gedit /etc/hosts =>
圈起來為另一個主機名稱

成功如下 =>

### ssh 有密碼登入
接著上一個的設定

exit 登出帳號 =>

### 期末考 無密碼遠端登入其他主機
**要先 gedit /etc/hosts 新增主機名稱如上 !!**
先檢查有沒有.ssh檔

接著要創建公鑰和私鑰(就是.ssh)(選項都直接enter) =>

cd 到 .ssh 查看內容 => id_ras.pub 為公鑰
複製公鑰到另一台主機

最後 ssh 到另一台主機 就能成功達成無密碼登入

---
---
scp 要複製的檔案(/etc/hosts) 目的端(root@centos7-2:/etc/hosts)

scp 另一端 要複製的檔案(另一端)

對目的端做的動作

---
---
ping .... 連接電腦
. 開頭的檔案為隱藏黨
遠端指令 ssh [另一台主機名稱] [動作]
期中可能會考 rpm -qa | httpd => 查看 查看系統有無安裝httpd
考試
## 9/26(httpd 能在外網使用 , 期末 ngrok)
### 簡單伺服器架設
檢查有無 httpd(網頁伺服器) 套件

**多使用 netstat -tunlp | grep xxx(伺服器) 檢查開啟的伺服器 port**
新增網頁(只在內部網路) =>


---
---
### ngrok (1.一個帳號的token只能給一台主機用不能重複,否則開不了伺服器 !! 2.ngrok沒加路徑(PATH)要加上 ./ 才能使用執行檔)
先登入

對下載項目點右鍵選取 複製網址

(**--no-check-certificate要加 允許在下載時忽略伺服器的 SSL 憑證是否有效的檢查**)
使用 wget --no-check-certificate https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz =>下載
--no-check-certificate(在前面 圖有誤)

再家目錄用 ls 檢查有無成功安裝
用 tar zxvf 解壓縮檔案

接著輸入 ./ngrok config add-authtoken 你的token (**要用./ngrok**)


輸入 ./ngrok http 80 如下 =>

輸入標記的網址 開啟網址成功如下 =>

---
---
pwd => 顯示當前目錄
df -h | grep /$ =>$為取甚麼當結尾
awk '{print $5}' => 取第五項
ava=$() => 執行裡面內容,再放進ava 之後echo ava 會執行內容結果
## 10/3 (nfs 伺服器)
nfs使用教學 https://qizhanming.com/blog/2018/08/08/how-to-install-nfs-on-centos-7
防火牆 要檢查
**遇到的問題 要分享的資料夾以及檔案要改權限 => chmod 755 -R server端要分享的檔案名稱**
nfs伺服器 = network file sysytem = client-server 目的 能做到資料的分享

**要有 host-only 網路卡 (192.168 開頭)**
第一步 (目前這台是 nfs server)(**-p** 參數來檢查是否存在 存在就不建立 不存在則建立)

權限 chmod 755 -R /data
第二步 (另一台主機 client)


**接著回到 nfs server 主機**
yum install nfs-utils

之後
systemctl enable rpcbind
systemctl enable nfs
systemctl start rpcbind
systemctl start nfs

(**最重要的地方!! 通常有問題都在這**)
vim /etc/exports (最重要的配置檔,決定把甚麼資源分享出去) =>
(**這裡的ip是client的** 前面三個數都一樣最後為0)
/data/192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)

接著systemctl restart nfs 再檢查一下是否成功 成功會出現底線內容

**接著回到 nfs client 主機**
一樣 yum install nfs-utils
systemctl enable rpcbind
systemctl start rpcbind

測試 (可以用ip 也可以用之前存的domain name) =>

**這裡也很重要 !!**
**掛載**
192.168.153.152 是 nfs server 的 ip
mount -t nfs 192.168.0.101:/data(data是分享出來的資料夾) /nfs-data(對應到本地端的資料夾)

接著到 /nfs-data 後 touch 一個 a.txt 的檔案

**接著回到 nfs server 主機**
cd 到 data 就能看到 a.txt 成功如下


---
---
dev/zero dev/null 有無限的 0
期中可能考 dd if=/dev/zero of=名稱 bs=1M count=100
cat 檔案 | wc -l => 只有幾行的數字
cat -T -E 檔名 => T 中間加tab E結尾加$
tr的指令教學 https://wangchujiang.com/linux-command/c/tr.html
大小寫的轉換


-T變換TAB空格=>^

-E 結尾加上$







bc => linux裡的計算機 =>幫你計算

seq -s "+" 1 10 => 1+2+3+4+5+6+7+8+9+10
返回使 -1

參數 -w=width => 對齊 => 用 0 補齊
## 10/17 (基本samba ,跟windows共享用host-only ip)
samba教學 https://josephjsf2.github.io/linux/2019/11/01/share_centos_folder_with_windows.html
學姊筆記
https://github.com/stereomp3/note/blob/main/linux/111semester01/3-SAMBA.md#SAMBA
下載

看一下 跟 windows能不能互 ping

檢查是否disabled

### 測試資料夾
mkdir /test_samba -p
chown nobody /test_samba
ls -l -d /test_samba(查看權限)
chmod 777 /test_samba/


### 配置 samba 設定檔
vim /etc/samba/smb.conf => 新增圈起來的部分
```
[test]
comment = for test # 註解
path = /test_samba
read only = no
guest ok = yes
browseable = yes
```

輸入testparm 後按 enter 檢查是否跟下圖一樣 =>

接著 systemctl restart smb
檢查 systemctl status smb

port 檢查

windows要登入linux 需要再linux裡有該帳號

samba 有自己的密碼存放處 可跟系統user密碼不同
使用 smbpasswd -a user 建立 SAMBA 存取密碼,並加入使用者

完成後 到 windows 檔案總管 輸入 \\192.168.x.x(你的ip)
輸入剛創的名稱和密碼 (名稱跟使用者一樣,沒有該使用者無法創建,必須一對一)

成功如下 =>


新增修改資料 與 windows 共享 相互同步操作

成功 =>

### 檢查使用者 和 新增


切換帳號

---
---
nfs linux 到 linux 資源分享
samba windows 跟 linux 資源分享
cat /etc/selinux/config 更改selinux ==>ubandu 沒有這個
mkdir -p 參數 檢查有沒有此資料夾
ls -l -d 查看權限
tr ',' | tr ':' => tr [,:]
期中可能考 echo $RAMDOM | md5sum | cut -b1-8 => 由cut裁切 隨機的8位數密碼
cat 1 2 3 > 4 => 將123合併為4
man 指令 => 查看指令使用方法








---








---


改主機名稱

---


## 10/24 (ipv6 架站)
查看ipv6
windowa ping-6
linux ping6

選第一張就好 要是 bridge adaper (**需要放在第一張**)

ping -6 => 進行 ip 測試能不能使用


成功能使用 putty =>

開始架站
yum install httpd -y
如果下載套件時,遇到 could not resolve host 解決如下 =>
vim /etc/resolv.conf
改成 nameserver 8.8.8.8
沒問題則繼續
cd /var/www/html
echo "你的内容" > 文件名 (新增檔案且同時新增內容)

記得要 systemctl start httpd
成功如下 =>

dns 到 12/12 看
成功如下 =>

---
---
a = 5 => echo $a => 顯示 5 =>$可以取出變數內容 => 有時候不能有空白
alias 新指令="舊指令" 更改指令名稱(只能在原視窗.行程使用)
不過可以 vim .bashrc 來加入 alias指令 ==> . .bashrc 使其重新啟動
echo $$ ==> 查看目前行程的 process id
考試 ==> 單不會替換變數,雙會替換變數


su - 使用者名稱 =>切換使用者

echo $USER => 顯示當前的使用者
使用者的判斷式




## 10/31 (沒)
echo $RAMDOM => 產生亂數
md5sun => 雜湊函數 1-10切割多少

加大括號可以確保內容

期中會考
雙引號變數會被替換
單引號是完整的字串

read 用法


非0值代表前一個指令執行失敗 (不同錯誤會有不同值)


linux c語言中 0 屬於 真
真 執行前者 假 執行後者

將指令串在一起的符號
---
&& =>前面一定要成功 後面才會執行

; => 不管前面是否成功,都還是會執行

|| => 二擇一 如前


-z => 測試是否是空字串


字串變數比較要有留空白(不會考) 會執行前者

且加上雙引號


數字比較不要用=,>=,<=,等符號 用上圖

期中可能考 寫腳本 ./檔名 => 執行腳本

vim test.sh 改下圖指令


---

---
‵ ‵ 和 () 同等 代表優先執行


找出非 d 開頭的 awk '{print $9}' 取第9項

[ ] 與 test 同等功能

-a => and

https://blog.csdn.net/new_delete_/article/details/121160836
https://blog.csdn.net/jiushiggg/article/details/123166505
## 11/14(vpn)
vpn server (virtual private network) =
1.site to site
2.point to site
參考網頁
https://help.aliyun.com/zh/ecs/how-do-i-configure-a-connection-between-a-pptp-vpn-server-and-a-pptp-vpn-client-on-a-centos-7-instance
學長筆記
https://github.com/stereomp3/note/blob/main/linux/111semester01/7-VPN.md#pptpd
網路卡設定 1.nat 2.hostonly 3.internet (第三張名子自己取 跟另一台主機一樣就好)
網路卡作用 =>
1.192.168開頭(nat) 用來連internet 2. host-only 跟 windows連 3.跟另一台主機產生內部網路(internet)
第一台

另一台主機(第二台)

### 設定 internet網路卡 ip (第一台)


這裡圖有誤 (ip 為 192.168.10.1)

**改完記得 turn off 再 turn on !!**

### 設定 internet網路卡 ip (第二台)

**改完記得 turn off 再 turn on !!**

測試可不可以互通(形成內部網路) 成功如下=>

接著回到第一台
yum install epel-release
yum install pptpd
vim /etc/pptpd.conf 到最下面新增兩行 =>
localip 192.168.10.1(此主機ip)
remoteip 192.168.10.100-150(客戶端連上來的範圍)

接著設定帳號密碼
vim /etc/ppp/chap-secrets =>
依序是 帳號 server 密碼 *代表任何地方都可連

vim /etc/ppp/ip-up =>
新增 ifconfig ppp0 mtu 1472 (圖有誤 1472才對)

啟動為路由器
vim /etc/sysctl.conf =>
新增 net.ipv4.ip_forward = 1

接著輸入以下 =>

要可進可出輸入 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
然後 systemctl restart pptpd
windows vpn 連線 =>
如果適用vmware, ip填的是centos7 第一張網卡的ip
如果適用virtual box,ip填寫的是centos7 第二張網卡host only ip

連線名稱自訂,使用者名稱 密碼 前面有設置

成功 => (可 ping 192.168.10.1)



## 11/21(完成 network 和 network manager轉換)
bash script (linux 工作必備)
https://medium.com/vswe/bash-shell-script-cheat-sheet-15ce3cb1b2c7

統計個數


印出 1 3 5
```
for i in {1..10}; do
if ((i%2==0)); then
continue
fi
if ((i==7)); then
break
fi
echo "${i}" # print 1, 3, 5
done
```

network 和 network manager 要則一

清除網路設定

mtu => max transmission unit


複製ip位址 複製網路介面卡

盡量使用

network 和 network manager轉換也有10分(第三節)
ifconfig 查看網路卡ip netmask (看enp0s8)

enp0s8對應的gateway是0.0.0.0

接著 cd 到/etc/sysconfig/network-scripts
接著 gedit ifcfg-enp0s8 (- 後為網卡名字)
裡面編輯內容如下(**名字千萬別打錯!!!!**) =>

ls後檢查有沒有其他設定檔 (只留下**自己gedit的檔案和ifcfg-lo** )

接著 systemctl stop NetworkManager
接著 systemctl start network (如果不行就systemctl restart network )
最後 systemctl status network 成果如下

成功的話 **ping 8.8.8.8** 也能成功

## 11/28(完成 telnet)
重要 ( **linux 的 dns設置擋** )

查看伺服器有沒有被啟動

**第一個行程是 systemd (linux系統中process id =1,這隻行程叫做systemd)**


(https://blog.gtwang.org/linux/linux-create-systemd-service-unit-for-python-echo-server-tutorial-examples/) (期中10分)
下載 yum install pyton3
cd /opt
接著 gedit echo_server.py 輸入以下
```
#!/usr/bin/env python3
import socket
# 建立 socket
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 綁定所有網路介面的 9000 連接埠
serv.bind(('0.0.0.0', 9000))
# 開始接受 client 連線
serv.listen()
while True:
# 接受 client 連線
conn, addr = serv.accept()
print('Client from', addr)
while True:
# 接收資料
data = conn.recv(1024)
# 若無資料則離開
if not data: break
# 傳送資料
conn.send(data)
conn.close()
print('Client disconnected')
```
chmod +x /opt/echo_server.py
python3 ./echo_server.py => 執行檔案
接著要 建立一個新的 Systemd 服務單位設定檔
cd 到 /etc/systemd/system 使用 vim echo_server.service 編輯內容如下
```
[Unit]
Description=Echo Server
[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/myserver/echo_server.py
Restart=always
[Install]
WantedBy=multi-user.target
```
`chmod 644 /etc/systemd/system/echo_server.service` =>設定權限
**重啟伺服器**
```
systemctl daemon-reload
systemctl restart echo_server
```
**查看狀態**
`systemctl status echo_server`
打開如下

測試 => yum install nc => nc localhost 9000 如下

https://cloud.tencent.com/developer/article/2274078 telnet 教學(第三節) (期末10分)
```
yum install telnet-server
yum install telnet
yum install xinetd
```
```
systemctl enable xinetd.service
systemctl enable telnet.socket
```
**順序要對 !!!!!**
```
systemctl start telnet.socket
systemctl start xinetd
```
**putty測試如下**

**成功如下**





## 12/5 (完成 LAMP)
**LAMP**(之後會常用到 linux apache mysql php)(期末這些超重要一定要會)
學長筆記 https://github.com/stereomp3/note/blob/main/linux/111semester01/13-.md
### apache
`yum install httpd`
接著啟動 `systemctl start httpd`
記得關閉防火牆 => `systemctl stop firewalld`
接著跑看看 http://your_server_IP_address/ =>

**mysql(這裡使用mariadb)**
`yum install mariadb-server mariadb` =>下載資料庫
接著啟動 => `systemctl start mariadb`
查看 => `systemctl status mariadb`
`systemctl enable mariadb.service` => 設定開機啟動MariaDB
`mysql_secure_installation` =>設定root密碼,除了設定root外,其他選項Disallow root和Remove test選n,其他都Enter跳過
接著打開資料庫 `mysql -u root -p`
`create database testdb;` => 創建 database

接著使用 => `use testdb;`
創建 `table => MariaDB [testdb]> create table addrbook(name varchar(50) not null, phone char(10));`
可以show來看看 =>

接著可以插入資料 =>
```
insert into addrbook(name, phone) values ("mary", "0912123567");
insert into addrbook(name, phone) values ("tom", "0912123456");
```
查看 =>

要離開就打 => quit
php
` yum install php php-mysql php-fpm` =>下載
`systemctl restart httpd.service` => 重新啟動Apache,讓PHP運作
接著 cd /var/www/html
vim test.php 內容如下 =>
`<?php phpinfo(); ?>`

測試 => http://your_server_IP_address/test.php 成功如下 =>

最後連接
cd 到 /var/www/html 後 (記得放在這)
gedit testdb.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";
}
?>
```

刪除(看你要不要) => rm test.php(前面創建的測試網站)
接著 `systemctl restart httpd.service`
查看結果 => http://192.168.56.107/testdb.php =>

## 12/12
1.要有橋接網路
2.ipv6 要 2001開頭
3.到 dynv6 輸入 ip 即可
## 12/19 (完成)
期中 可加分
### 資料夾限制ip存取
cd /var/www/html 新增 資料夾 b
在b裡 vim hello.txt 內容隨意
之後 vim /etc/httpd/conf/httpd.conf (Allow from 後面是 windows ip ,讓windows ip 可以有權限, 盡量使用乙太網路ipv4 ,離開使用 **:wq!**)更改內容如下 =>

然後 systemctl restart httpd 成功如下 (**兩者ip都一樣 !!**)

windows 出現這個也行

### 密碼登錄下載檔案
cd 到 /var/www/html => mkdir 資料夾(files)
接著一樣 vim 到 /etc/httpd/conf/httpd.conf => 新增內容如下 =>

systemctl restart httpd
cd到 files => htpasswd -c .htpasswd 使用者(user or tom)

接著 vim .htaccess 內容如下 =>


成功如下 =>


### FTP server (vsftpd)
yum install vsftpd
檢查是否安裝成功
systemctl start vsftpd
systemctl status vsftpd =>

檢查port

接著到 winscp =>

成功如下 =>

也可以用 user 登入

**下星期期末考可以做的內容: 1.安裝linux 2.使用network設定網路 3. ssh server (無密碼登錄,sftp) 4.ipv6架站 5.https架站 6. NFS 7. samba 8 ngrok. 9 httpd + php + mysql 10. httpd(資料夾限制ip存取, 密碼登錄下載檔案) 11.VPN (pptpd) 12. FTP server (vsftpd) At least complete 6 items, and then you can pass this subject.**