1. 新增使用者
sudo
指令的意思是 “superuser do! ”,告訴Linux此指令要以系統颴理員的權限去執行。
adduser 新增使用者
sudo adduser john
系統將提示您輸入新密碼,可以在這邊去產生隨機密碼或是自行建立密碼。這邊需要注意的是,在Linux輸入密碼時,螢幕不會出現任何反應,但是不要擔心,Linux會紀錄使用這輸入的密碼的。
輸入新密碼後,還將要求你輸入聯繫方式。其實不需填寫這些,只需按一下 ENTER
預設值即可。
usermod 將用戶附加到某一群組
創建新用戶後,可以使用usermod
指令為這個用戶授予超級用戶特權。-aG
參數是指**附加(Append)到群組(Group)**的縮寫指令,下面的例子是附加到及超級用戶組sudo
。
sudo usermod -aG sudo john
一旦運行命令,如果沒有錯誤,將不會得到錯誤訊息,同時也不會得到任何成功訊息。Linux通常就是這樣,如果沒有錯誤訊息出現,則可視為正常成功。
su 切換用戶 (substitute user)
我們可以使用 指令 su
(substitute)切換到新帳戶 john。
sudo su - john
當然要輸入john的密碼:
Password:
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.
john@servername:~$
從現在開始,您可以使用該新用戶登錄Ubuntu 20.04。
2. 設置防火牆
設置防火牆以確保僅允許連接到某些服務始終是一個好主意。Ubuntu 20.04的預設防火牆配置工具是 ufw
。它提供了一種用戶友好的方式來創建基於IPv4或IPv6主機的防火牆。
如果通過SSH連接,請首先建立允許OpenSSH的為防火牆規則,以免被阻擋在防火牆外面,無法遠端連入。
sudo ufw allow OpenSSH
如果成功,你將看到 “Rules updated” 的訊息。
現在啟用防火牆,然後按 y
再按 ENTER
,然後螢幕將出現警示訊息 “Command may disrupt existing ssh connections” ,意思是說,如果之前沒有開啟OpenSSH的連線規則,而直接開啟防火牆的話,目前的遠端連線會被中斷。
啟動防火牆的指令為:
sudo ufw enable
顯示防火牆狀態的指令為:
sudo ufw status
這時會看到以下的狀態顯示訊息:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
3. 時區設定
查看目前Linux系統的時間與時區:
date
顯示所有時區:
timedatectl list-timezones
會出現:
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
可以使用page up、page down切換上下頁,如果要中斷時區列表的顯示請按下 ctrl + c
設定台灣時區:
sudo timedatectl set-timezone Asia/Taipei
顯示時間設定資訊:
timedatectl
此時會看到以下訊息:
Local time: Sat 2018-05-12 09:35:11 UTC
Universal time: Sat 2018-05-12 09:35:11 UTC
RTC time: Sat 2018-05-12 09:35:12
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
開啟時間同步功能
確定 System clock synchronized
與 systemd-timesyncd.service active
設定為 yes
。如果是 no
的話,可以用以下指令開啟:
sudo timedatectl set-ntp on
4. 更新Ubuntu 20.04系統
運行以下指令以下載並安裝最新的軟體包。使用 &&
把指令分隔,並將連續運行。如果螢幕有提示訊息,請按 y
和 ENTER
。
sudo apt update && sudo apt upgrade && sudo apt dist-upgrade
更新後,或許需要重新啟動系統:
sudo reboot
5. 建立交換空間
為什麼需要交換空間?如果您的Ubuntu 20.04伺服器在重負載期間磁碟空間不足,則某些關鍵服務(例如MySQL)可能會崩潰。重要的是要有一些交換空間,如果確實需要,可以將內存擴展到該交換空間。
swapon --show
sudo fallocate -l 2G /swapfile
ls -lh /swapfile
-rw-r--r-- 1 root root 2.0G Aug 3 18:59 /swapfile
6. Nginx網頁伺服器安裝與設定
6.1 安裝Nginx伺服器
安裝Nginx的指令如下:
sudo apt update && sudo apt install nginx
安裝完畢後,可以使用以下指令查詢Nginx的狀態:
sudo service nginx status
如果Nginx有正常啟動,會出現如下的狀態訊息:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-04-27 23:05:58 UTC; 2min 26s ago
Docs: man:nginx(8)
Main PID: 2433 (nginx)
Tasks: 2 (limit: 1137)
Memory: 5.1M
CGroup: /system.slice/nginx.service
├─2433 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2434 nginx: worker process
Apr 27 23:05:58 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 27 23:05:58 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
你可以按下 q離開狀態檢視畫面。
6.2 設定Nginx的防火牆規則
先把OpenSSH的防火牆規則打開,以確保等一下可以持續連線,不會連線中斷
sudo ufw allow OpenSSH
把Nginx伺服器的通訊規則打開:
sudo ufw allow 'Nginx Full'
這時螢幕將輸出:
Rule added
Rule added (v6)
設定好之後,就可以開啟防火牆:
sudo ufw enable
然後可以檢查防火牆狀態:
sudo ufw status
這時會出現以下畫面:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
6.3 測試網頁
可以在瀏覽器輸入該伺服器的ip address,就可以連到我們剛剛所設定的網頁伺服器,
如果不知道ip address,可以輸入以下指令查看:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
網頁的預設畫面如下:
以上的頁面對應到ubuntu伺服器的某一個檔案,其路徑為 /var/www/html/index.nginx-debian.html
,如果要修改預設網頁的內容,可以使用 nano
指令:
sudo nano /var/www/html/index.nginx-debian.html
就可以進入文字編輯環境。如果修改完畢後要儲存,可以按下 ctrl + x,然後再按下 y 以及 ENTER來儲存檔案。
以上就是一個網站的情況。
6.4 配置伺服器區塊 Server Blocks
實際的情況中,多個網站共用一個ip,多個網站共用同一台ubuntu住機是很常見的。我們將示範在一個ubuntu主機的Nginx下面,建立兩個網站。假設這兩個網站的domain name分別為 mytest1.com
與 mytest2.com
。
6.4.1 設定各自的網頁根目錄
Nginx預設的網頁目錄為: /var/www
預設網站的根目錄為:/var/www/html
現在我們要新增量個網站分別為 mytest1.com 與 mytest2.com,所以我門設定這兩個網站的根目錄分別為:
/var/www/mytest1.com/public_html
與
/var/www/mytest2.com/public_html
所以使用 mkdir
指令建立目錄,指令分別為:
sudo mkdir -p /var/www/mytest1.com/public_html
sudo mkdir -p /var/www/mytest1.com/public_html
如果我們希望普通的非root用戶能夠修改這些目錄中的文件,則必須更改所有權。
sudo chown -R $(whoami):$(whoami) /var/www/mytest1.com/public_html
sudo chown -R $(whoami):$(whoami) /var/www/mytest2.com/public_html
其中, $(whoami)
變數自動將使用當前登錄用戶的值。
我們還必須確保將常規Web目錄/var/www
及其內容的權限 設置為,755
以便可以正確提供頁面,讓匿名用戶也可以有權限查看。指令如下:
sudo chmod -R 755 /var/www
6.4.2 建立測試網頁
現在,我們將index.html
使用echo
命令為每個域創建一個簡單的網頁 。
如果您有一個域名,請不要忘記在此處 用自己的域名替換 mytest1.com 。
sudo echo "Welcome to mytest1.com!" > /var/www/mytest1.com/public_html/index.html
現在對mytest2 .com 進行相同的 操作 。
sudo echo "Welcome to mytest2.com!" > /var/www/mytest2.com/public_html/index.html
6.4.3 配置第一個伺服器區塊
Nginx包含一個默認的伺服器區塊/etc/nginx/sites-available/default
,可以作我們自己的服務器塊的模板。將此文件複製到以您的域命名的新文件。在此範例中,我們的domain name為 mytest1.com
,因此:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mytest1.com
編輯剛剛複製的文件:
sudo nano /etc/nginx/sites-available/mytest1.com
在編輯畫面中,找到以下的區塊:
listen 80 default_server;
listen [::]:80 default_server;
只有一個伺服器區塊可以具有該 default_server
規範,作為預設的網站。所以這邊我們會把 default_server
刪除,所以以上的內容將被修改為:
listen 80;
listen [::]:80;
按 CTRL + W 並搜尋 root /var/www/html;
由於我們的 mytest1.com
網站的根目錄為 /var/www/mytest1.com/public_html
,所以設定請修改為:
root /var/www/mytest1.com/public_html;
按 CTRL + W 並搜尋 server_name _;
我們可以在這邊加上我們的 domain name,這裡是 mytest1.com
,也可以把 www.mytest1.com
加進去。
server_name mytest1.com www.mytest1.com;
保存並退出(按 CTRL + X ,Y 然後按 ENTER )
在繼續下一步之前,請確保Nginx配置文件語法有效。指令如下:
sudo nginx -t
如果參數設定正確,就會輸出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
6.4.4 配置第二個伺服器區塊
現在,我們將為其他domain name(在本範例中為 mytest2.com
)創建一個伺服器區塊 。
首先,我們將預設伺服器區塊 /etc/nginx/sites-available/default
複製到 /etc/nginx/sites-available/mytest2.com
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mytest2.com
現在編輯剛剛複制的文件。
sudo nano /etc/nginx/sites-available/mytest2.com
按CTRL + W 並蒐索 default_server;
。
將會找到以下的內容:
listen 80 default_server;
listen [::]:80 default_server;
同樣的,把 default_server
字樣刪除,所以設定變為:
listen 80;
listen [::]:80;
將此更改為您的domain name。在我們的範例中,我們的domain name為 mytest2.com
,另外,我們再把 www.mytest2.com
加進去。
server_name mytest2.com www.mytest2.com;
保存並退出(按 CTRL + X ,Y 然後按ENTER )
在繼續下一步之前,請確保Nginx配置文件語法有效。
sudo nginx -t
輸出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
6.4.5 Create Symbolic Links
現在,我們將創建從 sites-available
目錄到sites-enabled
目錄的符號鏈接,在啟動過程中Nginx會讀取該 鏈接 。如果有domain name,請確保將 mytest1.com
和 mytest2.com
替換為您自己的 domain name。指令為 ln
sudo ln -s /etc/nginx/sites-available/mytest1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/mytest2.com /etc/nginx/sites-enabled/
現在重新啟動Nginx。
sudo service nginx restart
6.4.6 測試Nginx
假設您已經在域註冊服務上配置了DNS,以將網域指向Nginx服務器的IP,那麼您現在應該能夠在瀏覽器中查看這些測試網頁。
7. 為Nginx安裝PHP
7.1. 安裝PHP
與Apache不同,Nginx不包含本地PHP處理。為此,我們必須安裝PHP-FPM(FastCGI流程管理器)。FPM是PHP FastCGI的替代實現,具有一些對重載站點有用的附加功能。
在安裝php-fpm之前,應添加Ubuntu的Universe存儲庫,以確保獲得正確的軟件包。
sudo add-apt-repository universe
現在更新軟件包列表,並在Ubuntu 20.04上安裝PHP-FPM。我們還將安裝 php-mysql
以允許PHP與MySQL數據庫進行通信。 當要求繼續時,按 y 和 ENTER 。
sudo apt update && sudo apt install php-fpm
如果打算使用MySQL,還應該安裝該php-mysql
軟體。
sudo apt install php-mysql
安裝後,檢查PHP版本。
php --version
如果PHP安裝正確,您應該會看到類似下面的內容。
PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
上面我們使用的是PHP 7.4 版本 , 儘管根據存儲庫中的哪個軟件包**,** 這可能是您的更高版本。
根據您安裝的Nginx和PHP版本,您可能需要手動配置Nginx將連接到的PHP套接字的位置。
列出目錄的內容 /var/run/php/
ls /var/run/php/
您應該在這裡看到一些項目。
total 4
lrwxrwxrwx 1 root root 30 Apr 27 23:28 php-fpm.sock -> /etc/alternatives/php-fpm.sock
-rw-r--r-- 1 root root 5 Apr 27 23:28 php7.4-fpm.pid
srw-rw---- 1 www-data www-data 0 Apr 27 23:28 php7.4-fpm.sock
在上方我們可以看到套接字被稱為 php7.4-fpm.sock
。請記住這一點,因為下一步將會需要它。
7.2. 為PHP配置Nginx
現在,我們需要對Nginx伺服器區塊進行一些設定上的調整。
伺服器區塊的位置可能會因您的設置而異。預設情況下,它位於 /etc/nginx/sites-available/default
。如果您遵循之前Nginx的設置多個domain name的指南,則您的配置文件可能位於 /etc/nginx/sites-available/example.com
。
同樣使用nano來編輯文件。
sudo nano /etc/nginx/sites-available/default
7.2.1. 優先index.php
按 CTRL + W 並搜尋 index.html
。
將 index.php
添加在 index.html
之前,這樣預設文件將以 index.php
視為最優先順位,將 index.html
視為次一順位。
所以實際上將修改為:
index index.php index.html index.htm index.nginx-debian.html;
7.2.2. 檢查伺服器名稱
按 CTRL + W 並蒐索該行 server_name
。
在此處輸入服務器的IP,如果有domain name,則輸入domain name。
server_name YOUR_DOMAIN_OR_IP_HERE;
7.2.3. 指定由php來處理php script
按 CTRL + W 並搜尋 location ~ \.php
。
您需要在此處取消註釋某些行,方法是刪除 #
下面用紅色標記的四行之前的符號。
還要確保 fastcgi_pass
套接字路徑的值正確。例如,如果您安裝了PHP版本7.4,則套接字應為: /var/run/php/php7.4-fpm.sock
如果不確定在此使用哪個套接字,請退出nano並運行 ls /var/run/php/
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
7.2.4. 保存並重啟Nginx服務
進行必要的更改後,保存並關閉(按 CTRL + X ,然後按 y 和 ENTER 確認保存)
現在檢查配置文件,以確保沒有語法錯誤:
sudo nginx -t
如果沒有錯誤,就會輸出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
此時就可以重新加載Nginx配置,讓Nginx服務重新啟動。
sudo service nginx reload
7.2.5. 測試php
要查看PHP 7.4 在Ubuntu 20.04上是否正常運行info.php
,請在文檔根目錄中創建一個新的PHP文件 。預設情況下,它位於中 /var/www/html/
,或者如果你根據之前的設定,在同一個server上設定了多個domain name,,則它可能位於類似 /var/www/mytest1.com/public_html
擁有正確的文檔根目錄後,使用 nano
文本編輯器創建一個新文件 info.php
sudo nano /var/www/html/info.php
將以下代碼鍵入或粘貼到新文件中。
<?php
phpinfo();
保存並退出(按 CTRL + X ,Y 然後按ENTER )
現在,您可以在Web瀏覽器中查看此頁面,方法是訪問服務器的域名或公共IP地址,後跟/info.php: http://your_domain_or_IP/info.php
如果不知道ip,可以使用以下指令得到server的 ip 位址:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
phpinfo()
將會輸出有關PHP當前狀態的大量訊息,包含PHP編譯選項、插件擴展的信息、PHP版本和服務器資訊等。如果成功顯示以下的PHP組態內容,就代表你現在已在Ubuntu 20.04上成功為Nginx安裝了PHP-FPM。
之後,最好刪除 info.php
,因為這上面包含很多伺服器的重要資訊,可能會讓別人有機會攻擊你的server。
8. 安裝MySQL
我們將會在這個章節做到以下事項:
- 安裝MySQL
- 設定root的密碼,並根據資安原則,拒絕root在遠端登入
- 新增一個超級使用者,並給予足夠的權限
8.1 安裝MySQL
讓我們首先更新存儲庫,並使用來安裝適用於Ubuntu 20.04的MySQL軟件包 apt
sudo apt update && sudo apt install mysql-server
在螢幕出現提示時,按 y 和 ENTER 來安裝MySQL。
MySQL安裝完成後,我們可以檢查MySQL服務是否正在運行。
sudo service mysql status
如果正在運行,您將看到綠色的“活動”狀態,如下所示:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-04-02 02:40:59 CEST; 2min 47s ago
Main PID: 18476 (mysqld)
Status: "Server is operational"
Tasks: 27 (limit: 4915)
CGroup: /system.slice/mysql.service
└─18476 /usr/sbin/mysqld
Apr 02 02:40:59 ubuntu2004 systemd[1]: Starting MySQL Community Server...
Apr 02 02:40:59 ubuntu2004 systemd[1]: Started MySQL Community Server.
你可以按 q 來退出服務顯示畫面。
8.2 設定root的密碼
現在可以使用指令 mysql_secure_installation
來配置MySQL伺服器的安全性。
sudo mysql_secure_installation
8.2.1 安全性插件
系統將詢問您是否要設置“驗證密碼”插件。除非您出於某種原因要強制執行嚴格的密碼策略,否則實際上並沒有必要。
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No:
如果不想安裝安全性插件,建議可以直接按下 ENTER 。
8.2.2 設定root用戶的密碼
Please set the password for root here.
New password:
Re-enter new password:
可以使用這個網址來產生隨機高強度密碼。這邊請注意一下,當您在Linux中輸入密碼時,鍵入時不會顯示任何內容(沒有星號或點)。
8.2.3 刪除匿名帳戶
接下來,將要求您刪除匿名用戶。
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 來刪除匿名用戶。
8.2.4 禁止遠端登入
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 禁止遠端root登錄。這樣可以防止殭屍程式和駭客嘗試猜測root的密碼。
8.2.5 刪除測試資料庫
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 刪除測試資料庫。
8.2.6 重新加載權限設定
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 重新加載權限設定。
8.2.7 測試MySQL服務
現在,您可以登錄到MySQL服務器。因為您以sudo身份運行此命令,所以它將使用MySQL根帳戶自動登錄到MySQL。如果提示您輸入密碼,請輸入Linux根帳戶密碼,而不是MySQL。
sudo mysql
輸出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.19-0ubuntu5 (Ubuntu)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
要退出MySQL,請輸入exit 並按 ENTER 。
mysql> exit
你現在已經成功安裝並配置了MySQL!
8.3 新增一個超級使用者,並給予足夠的權限
使用MySQL的 root
帳戶與密碼登錄到MySQL。
sudo mysql -u root -p
登錄後,使用您選擇的用戶名添加一個新的MySQL超級用戶。在此範例中,我們稱之為 pmauser
。可以使用此網站處生成一個高強度密碼, 並將下面指令的 password_here
替換為高強度密碼。
mysql> CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'password_here';
現在,向我們的新用戶 pmauser
授予超級用戶特權。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'pmauser'@'localhost';
此時,雖然 pmauser
具有足夠的權限可以新增並讀寫新的資料表,但是沒有權限設定其他帳戶新權限,現在我們要將 pmauser
具有這樣的權限。
使用的指令為:
mysql> GRANT ALL ON *.* TO 'pmauser'@'localhost' WITH GRANT OPTION;
現在我們已經可以使用 pmauser
來登入MySQL資料庫了。
9. 安裝 phpMyAdmin
我們在 6.4 配置伺服器區塊 Server Blocks
章節學會了在同一台server使用一個IP安裝多個網站。現在我們要安裝一個新個網站,讓這個網站執行 phpMyAdmin 網頁APP,未來可以用網頁登入到pgpMyAdmin網站來管理MySQL資料庫。
9.1 新增伺服器區塊
首先,我們將預設伺服器區塊 /etc/nginx/sites-available/default
複製到 /etc/nginx/sites-available/phpmyadmin.mytest.com
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/phpmyadmin.mytest.com
現在編輯剛剛複制的文件。
sudo nano /etc/nginx/sites-available/phpmyadmin.mytest.com
按CTRL + W 並蒐索 default_server;
。
將會找到以下的內容:
listen 80 default_server;
listen [::]:80 default_server;
同樣的,把 default_server
字樣刪除,所以設定變為:
listen 80;
listen [::]:80;
按 CTRL + W 並搜尋 root /var/www/html;
我們的 phpmyadmin.mytest.com
網站的根目錄為 /var/www/phpmyadmin.mytest.com/phpMyAdmin-5.1.0-all-languages
,所以設定請修改為:
root /var/www/phpmyadmin.mytest.com/phpMyAdmin-5.1.0-all-languages;
修改網站跟目錄,按 CTRL + W 並搜尋 server_name _;
將此更改為您的domain name。在我們的範例中,我們的domain name為 phpmyadmin.mytest.com
。
server_name phpmyadmin.mytest.com;
由於phpMyAdmin使用PHP語法,我們要在伺服器區塊設定中指定使用 php7.4-fpm.sock 來處理PHP Script
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
保存並退出(按 CTRL + X ,Y 然後按ENTER )
在繼續下一步之前,請確保Nginx配置文件語法有效。
sudo nginx -t
輸出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
9.2 Create Symbolic Links
現在,我們將創建從 sites-available
目錄到sites-enabled
目錄的符號鏈接,在啟動過程中Nginx會讀取該鏈接 。指令為 ln
sudo ln -s /etc/nginx/sites-available/phpmyadmin.mytest.com /etc/nginx/sites-enabled/
現在重新啟動Nginx。
sudo service nginx restart
9.3 下載 phpMyAadmin並解壓縮
先把工作目錄移到 /var/www/phpmyadmin.mytest.com
cd /var/www/phpmyadmin.mytest.com
使用 wget
指令下載 phpMyAdmin:
sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.tar.gz
之後解壓縮:
tar zxvf phpMyAdmin-5.1.0-all-languages.tar.gz
9.4 測試phpMyAdmin網站
連線到 phpmyadmin.mytest.com
,你應該會看到 phpMyAdmin 網站如下,代表phpMyAdmin已經安裝成功了。
10. 安裝Nginx的Let’s Encrypt SSL證書
Let’s Encrypt 是一個證書頒發機構,它提供與當前付費證書一樣安全的免費SSL證書。我們將在Ubuntu 20.04上為Nginx配置SSL證書。
10.1 安裝“Let’s Encrypt用戶端”(Certbot)
讓我們首先更新在Ubuntu 20.04上安裝Certbot for Nginx的軟體包列表。
sudo apt update && sudo apt install certbot python-certbot-nginx
如果出現提示請鍵入 y ,ENTER。
如果出現錯誤 “python-certbot-nginx has no installation candidate” ,請嘗試運行 sudo apt install certbot python3-certbot-nginx
10.2 取得 SSL 證書
現在,我們將獲得我們的測試域example.com 的證書。Certbot具有適用於Ubuntu 20.04的Nginx插件,該插件可自動執行證書安裝。
sudo certbot --nginx
將出現以下畫面:
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):
請輸入電子郵件地址,以便在緊急更新和安全通知時與您聯繫。
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel:
按 a 和 ENTER 同意服務條款。
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o:
按 n 和 ENTER 不與EFF分享您的電子郵件地址。
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
選擇想要安裝證書的domain name,如1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/nginx/sites-available/example.com-le-ssl.conf
Enabled Nginx socache_shmcb module
Enabled Nginx ssl module
Deploying Certificate to VirtualHost /etc/nginx/sites-available/example.com-le-ssl.conf
Enabling available site: /etc/nginx/sites-available/example.com-le-ssl.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
按下 2 以設定將所有流量重定向到HTTPS。
Redirecting vhost in /etc/nginx/sites-enabled/example.com.conf to ssl vhost in /etc/apache2/sites-available/example.com-le-ssl.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
11. 設定FTP
11.1 安裝vsftpd
下面我們有兩個命令,以分隔 &&
。第一條命令將更新軟體包列表,以確保您獲得vsftpd的最新版本和依賴關係。然後,第二個命令將下載並安裝vsftpd。 當要求繼續時,按 y 和 ENTER 。
sudo apt update && sudo apt install vsftpd
安裝完成後,檢查vsftpd的狀態
sudo service vsftpd status
如果正常,將出現以下畫面:
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-04-27 19:35:30 IST; 13s ago
Main PID: 54532 (vsftpd)
Tasks: 1 (limit: 1137)
Memory: 652.0K
CGroup: /system.slice/vsftpd.service
└─54532 /usr/sbin/vsftpd /etc/vsftpd.conf
Apr 27 19:35:30 ubuntu systemd[1]: Starting vsftpd FTP server...
Apr 27 19:35:30 ubuntu systemd[1]: Started vsftpd FTP server.
11.2 配置防火牆
如果尚未這樣做,建議您ufw
為Ubuntu 20.04 / 20.10啟用 防火牆。在啟用ufw
防火牆之前 ,請確保添加了SSH規則,否則,如果遠程連接,則可能會被鎖定在服務器之外。如果您不想設置防火牆,請跳至下一個步驟。
sudo ufw allow OpenSSH
讓我們為FTP打開端口20和21,為被動FTP打開端口40000-50000。我們還將為TLS打開990端口,稍後我們將對其進行設置。
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw allow 990/tcp
現在,啟用防火牆(如果尚未啟用)。如果出現警示訊息,可以按下 y 和 ENTER以啟用防火牆。
sudo ufw enable
要檢查防火牆的狀態,請運行:
sudo ufw status
如果防火牆正在運行,您應該會看到 Status: active
以及我們剛剛添加的防火牆規則。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
3306 ALLOW Anywhere
20/tcp ALLOW Anywhere
21/tcp ALLOW Anywhere
40000:50000/tcp ALLOW Anywhere
990/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
3306 (v6) ALLOW Anywhere (v6)
20/tcp (v6) ALLOW Anywhere (v6)
21/tcp (v6) ALLOW Anywhere (v6)
40000:50000/tcp (v6) ALLOW Anywhere (v6)
990/tcp (v6) ALLOW Anywhere (v6)
11.3 創建FTP用戶
現在,我們將創建一個用於登錄FTP的新用戶。在此示例中,我們將創建一個名為的新用戶 ftpuser
。
sudo adduser ftpuser
可能還會要求您輸入一些聯繫信息。您只需按 ENTER
每個即可。
如果只想 ftpuser
通過FTP登錄,則應通過在SSH配置文件中將其用戶名列入黑名單來禁用其SSH訪問。否則,請跳至下一個步驟。
在nano中打開SSH配置。
sudo nano /etc/ssh/sshd_config
將以下內容添加到文件底部,替換 ftpuser
為您要拒絕SSH和SFTP訪問的用戶。您可以在此處添加多個用戶,並用一個空格隔開。(要粘貼到nano中,請按鼠標右鍵)。/ etc / ssh / sshd_config
DenyUsers ftpuser
要保存文件並退出,請按 CTRL + X ,再按 Y ,然後按 ENTER
。
重新啟動SSH服務。
sudo service sshd restart
11.3 設定目錄權限
sudo usermod -d /var/www ftpuser
sudo chown ftpuser:ftpuser /var/www
11.4 配置vsftpd
在Ubuntu 20.04 / 20.10上開始使用FTP之前,我們必須對vsftpd配置文件進行一些更改。
重命名配置文件。
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
使用nano
編輯器創建一個新的配置文件。
sudo nano /etc/vsftpd.conf
粘貼以下內容:
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
force_dot_files=YES
pasv_min_port=40000
pasv_max_port=50000
我們完成了vsftpd.conf
要保存文件並退出,請按 CTRL + X ,再按 Y ,然後按 ENTER 。
重新啟動vsftpd。
sudo systemctl restart vsftpd
11.5 使用TLS保護FTP(推薦)
使用FTP時,請記住一些重要事項-默認情況下未加密,這意味著您發送的憑據和文件容易受到攔截。為了解決這個問題,您應該使用FTPS(基於SSL / TLS的FTP)連接到vsftpd。
首先,使用該openssl
工具創建一個新證書 。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
系統將要求您輸入一些詳細信息,例如國家(地區)等。您不必填寫這些信息。您只需按一下即可 ENTER 獲得默認值。
現在您的私鑰已創建,我們必須對vsftpd配置文件進行一些更改。
在nano
編輯器中打開配置文件 。
sudo nano /etc/vsftpd.conf
重新啟動vsftpd。
sudo systemctl restart vsftpd
接著你可以使用FileZilla測試FTP網站連線,記得要選擇sFTP,讓連線保持加密,以確保帳號密碼不會被監聽。
12. 安裝Python 3.9.2
請依照以下步驟:
sudo apt update
sudo apt install wget build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
mkdir ~/tmp
cd ~/tmp
sudo wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz
tar xzf Python-3.9.2.tgz
cd Python-3.9.2
sudo ./configure --enable-optimizations
sudo make altinstall
安裝完後,使用python3.9
指令即可呼叫Python3.9.2
確認版本:
python3.9 -V
# Python 3.9.2
原本的Python3還是可以使用:
python3 -V
# Python 3.8.5