# 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