2019年6月5日 星期三

108資安--ubuntu安裝nginx+php+mariadb (2022補充)

一旦ubuntu server 設定好網路和openssh服務之後,我們就可以用ssh連上去。
底下就利用pietty連上去操作
為什麼這樣做呢? 因為pietty可以方便的複製/貼上
如果我們是在終端機(無視窗介面)上面打,就沒有複製/貼上的功能
那麼底下的指令你都是要用輸入的的方式,就很容易輸入錯誤。

 

一、安裝nginx
sudo apt update
sudo apt install nginx
在測試Nginx之前,需要調整防火牆軟件以允許訪問該服務。 Nginx在安裝時將自己註冊為ufw服務,這使得Nginx可以直接訪問Nginx。
這時候您可以直接連上網站呈現如下的畫面


用 nginx -v 可顯示出版本


二、安裝mariadb 
sudo apt install mariadb-server mariadb-client
安全性設定,包括root密碼 
sudo mysql_secure_installation 
sudo systemctl status mysql 檢查狀態 按下q離開
 
 
三、安裝php 和相關套件
 
sudo apt install php php-fpm php-common php-mysql php-gd php-cli php-xml php-json php-mbstring

使用php -v 可以看到版本
我看到的是7.2.17 ......

接下來要讓 nginx 和 php 共同運作
nginx 是透過 php-fpm 執行php指令的
先看看   php7.2-fpm 的狀態
sudo systemctl status php7.2-fpm
修改
sudo vim /etc/php/7.2/fpm/php.ini
搜索;cgi.fix_pathinfo=1改為
cgi.fix_pathinfo=0
sudo vim /etc/nginx/sites-available/default 
修改預設的網站設定值,啟用php
在 index列加上 index.php ,如
index index.php index.html index.htm index.nginx-debian.html;
並將底下幾個#拿掉
 location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
 }
 
請注意那個 /var/run/php/php7.2-fpm.sock; 我的預設是php7.0,必須改成7.2才行

接著重新啟動 nginx 和php
sudo systemctl restart php7.2-fpm
sudo systemctl restart nginx 

然後在瀏覽器上執行http://ip/info.php
出現如上畫面即為正常,否則必定有某些部分出了問題

這一連串的安裝也可以用
sudo apt install php-mysql php-fpm php-mbstring php-tokenizer php-xml php-json php-common nginx mariadb-server ...
一次全部裝起來
此時初次看到的首頁會變成
因為安裝php時會把apache(某些元件)也一併裝進來 
四、安裝phpMyAdmin
 
sudo apt install phpmyadmin
我在安裝時出現底下的錯誤 
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
一直找不到解決的辦法,只好用重新啟動系統去解決

sudo ln -s  /usr/share/phpmyadmin /var/www/html/phpmyadmin
sudo chmod 775 -R /usr/share/phpmyadmin/
sudo chown www-data:www-data -R /usr/share/phpmyadmin/ 
 
以http://ip/phpmyadmin 網址用root登入出現
這是新版phpMyAdmin的安全措施,不可以用root登入
我增加一個ceag帳號
sudo mysql -u root -p
然後在Mysql中執行底下三列
CREATE USER 'ceag'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'ceag'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
回到網頁用ceag登入就可以了
建議以後連結資料庫就不要用root了

 
安全性補充: 
mypassword就是密碼,你應該用更複雜的密碼,你可以進入phpmyadmin再修改
sudo ln -s  /usr/share/phpmyadmin /var/www/html/phpmyadmin
要改成類似
sudo ln -s  /usr/share/phpmyadmin /var/www/html/pma4k8f  
的方式,讓一般的駭客程式找不到你的phpmyadmin入口 
(此時入口為 http://ip/pma4k8f)

你也可以使用
cd /var/www/html
sudo mv phpmyadmin pma0610 的方式更改入口
(此時入口為 http://ip/pma0610)
 
再加上限制連線ip的位置就更好
location ^~ /pma4k8f {
    allow 163.30.142.0/25; 
    deny all;
}
如不是163.30.142.0/25 範圍內的網址則呈現

請注意:
location /phpmyadmin {
    allow 163.30.142.0/25; 
    deny all;
}
則 以  http://ip/phpmyadmin/index.php 仍會進入phpmyadmin的網頁
 

參考
https://www.howtoing.com/install-nginx-mariadb-php-in-ubuntu-18-04 
https://blog.gtwang.org/linux/ubuntu-linux-laravel-nginx-mariadb-installation-tutorial/
20220410補充 升級到php8.1
(參考 https://www.cloudbooklet.com/how-to-install-or-upgrade-php-8-1-on-ubuntu-20-04/)
1.增加 ondrej/php 這個repository 
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
2. 安裝php8.1基本程式
sudo apt install php8.1
sudo apt install php8.1-fpm
3. 安裝php8.1擴充 (php-json已經不用裝了)

 

20220618 補充
用ubuntu 22.04 安裝就是php8.1不需要安裝外來repository



4.修改 php.ini (注意:;cgi.fix_pathinfo=1 已經不需要修正了)

sudo vi /etc/php/8.1/fpm/php.ini
修改項目參考如下:
upload_max_filesize = 32M
post_max_size = 48M
memory_limit = 256M 
sudo vi /etc/nginx/nginx.conf
在http段加入
client_max_body_size 100m;
 
修改後以 sudo service php8.1-fpm restart 重啟
5.更改nginx設定檔
把 /etc/nginx/sites-available/ 下的設定檔中
fastcgi_pass unix:/run/php/php7.2-fpm.sock; 
改成
fastcgi_pass unix:/run/php/php8.1-fpm.sock;


沒有留言:

張貼留言