2019年9月2日 星期一

centos7 openSSL 教學

網路中文文章:  https://wiki.net-chinese.com.tw/sites/wiki.net-chinese.taipei/files/public_files/application/SSL%E6%86%91%E8%AD%89%E7%B0%A1%E6%98%93%E6%95%99%E5%AD%B8(Linux%20Apache).pdf


1.安裝openssl
sudo yum -y install perl perl-devel gcc gcc-c++ openssl version 

2.產出key 打入密碼,操作完畢後即產生 PEM 格式的「私鑰」檔案,檔名為 server.key,請保存好這份檔案

 openssl genrsa -des3 -out server.key 2048

 3.產生 CSR 文件(Certificate Signing Request)

openssl req -new -key server.key -out certreq.txt

 產生填入資料參考網路中文範例 https://wiki.net-chinese.com.tw/sites/wiki.net-chinese.taipei/files/public_files/application/SSL%E6%86%91%E8%AD%89%E7%B0%A1%E6%98%93%E6%95%99%E5%AD%B8(Linux%20Apache).pdf


 4.Apache 安裝ssl憑證模組
yum -y install httpd mod_ssl

sudo systemctl enable httpd.service

systemctl start httpd.service 


5.拿到的SSL憑證放在 centos7的目錄下

mkdir -p /etc/ssl/private
chmod 777 /etc/ssl/private 


6.設定 sudo vi /etc/httpd/conf.d/ssl.conf

 <VirtualHost *:443>
 DocumentRoot /var/www/html
 ServerName www.example.com
 SSLEngine on
SSLCertificateFile /etc/ssl/private/certificate.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
 </VirtualHost> 

調整文件名以匹配您的證書文件: SSLCertificateFile應該是您的證書文件(例如your_domain_name.crt) SSLCertificateKeyFile應該是您在創建CSR時生成的密鑰文件。

7.重啟伺服器

 systemctl restart httpd.service
 (重啟會可能會因為沒有輸入RSA密碼導致無法開啟網頁)

 systemctl status httpd.service


8.因為SSL 導致每次重啟httpd都要輸入密碼 ,使用自動輸入密碼功能
 (重啟會可能會因為沒有輸入RSA密碼導致無法開啟網頁)

vim /etc/httpd/conf.d/ssl.conf

把原來的

SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

改成

SSLPassPhraseDialog exec:/usr/libexec/autosslkey.sh

然後下指令
vim /usr/libexec/autosslkey.sh

autosslkey.sh只要這様寫
#!/bin/bash
echo 'your pass phrase'

接著權限允許

chmod 777 autosslkey.sh


參考連結2

參考連結3




2019年8月30日 星期五

apache mod rewrite .htaccess

IT邦的說明:https://ithelp.ithome.com.tw/questions/10190295
modRewire說明:https://blog.hinablue.me/apache-note-about-some-rewrite-note-2011-05/
alias 說明:http://phorum.study-area.org/index.php?topic=21235.0

同一個IP不同目錄專案顯示改寫:

apache  centos 7

1.cmd 下開啟編輯設定檔案
sudo vi /etc/httpd/conf/httpd.conf

2.編輯檔案
Alias /shop55 "/var/www/html/shop55/public"

AllowOverride all
RewriteEngine On
#不顯示目錄結構
Options FollowSymLinks

Alias /white55 "/var/www/html/white55/public"

AllowOverride all
RewriteEngine On
#不顯示目錄結構
Options FollowSymLinks



3.在對應的laravel public資料夾底下設定 .htaccess


第一個 ..htaccess


Options -MultiViews

RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /shop55


第二個 .htaccess


Options -MultiViews

RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /white55



重新啟動:
sudo systemctl restart httpd.service


另外一種設定方法

1.cmd 下開啟編輯設定檔案
sudo vi /etc/httpd/conf/httpd.conf

<VirtualHost *:80> DocumentRoot /var/www/html/white55/public ServerName white55.xxxxx.tw</VirtualHost><VirtualHost *:80> DocumentRoot /var/www/html/shop55/public ServerName shop55.xxxxx.tw</VirtualHost>


然後在DNS代管設定,填入A 紀錄  主機名稱別名:shop55   IP:對應IP,等待生效。

就可以使用

shop55.xxxxxx.tw
white55.xxxxx.tw

進入。

2019年8月26日 星期一

Laravel log / storage could not be opened: failed to open stream

參考:https://sjkou.net/2016/07/30/how-to-install-laravel5-on-centos7/

除了資料夾權限是設定成 chmod 777 的指令之外:

chmod -R 777 storage

導致此問題發生的原因還有  SELinux


SELinux導致

觀察主機目前是否有啟動 selinux (CentOS 預設是有啟動 selinux)
getenforce 


暫時性的關掉或開啟 selinux
setenforce 0

開啟
setenforce 1

以下步驟請都做:

(一)
因為有使用 selinux 而你新增了一些檔案或目錄到「網頁目錄 /var/www/html」,明明檔案就存在,卻無法正常從瀏覽器觀看,這不是 file permission chmod 的問題,是 selinux 檔案 http 存取權限的問題,你只需要用 使用SELinux允許使用此命令寫入文件

在對應資料夾下使用此指令
sudo chcon -R -t httpd_sys_rw_content_t 我的專案名稱/storage



(二)
對網站加入 apache 所有權,在 Laravel 網站的根目錄下執行:
sudo chown -R apache:apache *  
<-FTP上傳檔案可能會有使用者權限問題  
(三)
CentOS 對內部檔案的權限管理非常嚴謹,當其他使用者在看網頁時,CentOS 內其實是有一名叫做 apache 的使用者在瀏覽您的網頁目錄,雖然如此但 apache 也不是什麼檔案都能看,僅能觀看httpd 相關權限的檔案而已,在還沒修改網站權限時你可以透過 ls -Z 來取得目前的權限。
但是 httpd_sys_content_t 僅是瀏覽的權限而已,依據 laravel 的安裝說明bootstrap/cache 及 storage 這兩個資料夾必須要有寫入的權限,所以需再做以下修改:

sudo chcon -Rv -t httpd_sys_rw_content_t 網站/storage 
sudo chcon -Rv -t httpd_sys_rw_content_t 網站/bootstrap/cache 
sudo chmod -R 777 網站/storage 
sudo chmod -R 777 網站/bootstrap/cache


2019年8月23日 星期五

gcp centos7 laravel

說明:https://www.brilliantcode.net/170/centos-7-install-apache-httpd/


第一次設定root帳號需要打入密碼

sudo passwd root

安裝 EPEL

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

1.安裝Apache and http模組

sudo yum install httpd mod_ssl openssl

啟動Apache,並且設定為開機自動啟動

sudo systemctl start httpd
sudo systemctl enable httpd


確認Apache執行權限
sudo vim /etc/httpd/conf/httpd.conf

更改
User apache
Group apache
(因為會有FTP檔案上傳問題,可以改成自己的user )

設定或修改Apache目錄

sudo vim /etc/httpd/conf/httpd.conf

顯示:
DocumentRoot "/var/www/html"



讓Apache可以支援.htaccess,請加入AllowOverride All


<directory "/var/www/html">
    AllowOverride All
</Directory>


存檔離開
:wq

重啟APACHE
sudo systemctl start httpd

Selinux 安全性說明
https://www.brilliantcode.net/145/centos-7-check-selinux-status-enabled-or-not/

暫時停止SELinux
sudo setenforce 0

暫時啟動SELinux
sudo setenforce 1

sudo vim /etc/selinux/config

永久停止SELinux:將第6行改為SELINUX=disable
永久啟用SELinux:將第6行改為SELINUX=enable

開啟防火牆,讓 web (port:80, 443) 流量可以穿過 firewall

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

重啟Apache服務
sudo systemctl restart httpd.service

2. install mysqld

sudo yum -y install mariadb-server

安全性服務+設定密碼
mysql_secure_installation

3.PHP 安裝 7.2

yum -y install mod_php72w php72w-cli php72w-common php72w-gd php72w-imap php72w-ldap php72w-mbstring php72w-mysql php72w-pdo php72w-pear php72w-xml php72w-xmlrpc

重啟
systemctl restart httpd.service

4.安裝 Composer

複製安裝文件 PHP 檔案
執行安裝 composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

 php composer-setup.php

完成以後,我們要放到全域環境,這樣才能讓任何專案無須從新安裝 composer。記得 Composer 限制不可在最高權限 root 中執行。

mv composer.phar /usr/local/bin/composer

5.安裝 phpMyAdmin

.用 composer 下載 (建議,因為版本最新,解決許多問題)

chmod 777 /var/www/html  <-- 提供寫入權限給 composer 建立路徑

cd /var/www/html
composer create-project phpmyadmin/phpmyadmin

cp -i /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php

GCP登入方式

http://zxcvbnm2749.blogspot.com/2018/07/ssh-ftp-google-cloud.html

6.git安裝

sudo rpm -U https://centos7.iuscommunity.org/ius-release.rpm sudo yum install git2u
sudo yum install git2u

7.權限問題


在對應資料夾下使用此指令
chcon -R -t httpd_sys_rw_content_t 我的專案名稱/storage


CentOS 對內部檔案的權限管理非常嚴謹,當其他使用者在看網頁時,CentOS 內其實是有一名叫做 apache 的使用者在瀏覽您的網頁目錄,雖然如此但 apache 也不是什麼檔案都能看,僅能觀看httpd 相關權限的檔案而已,在還沒修改網站權限時你可以透過 ls -Z 來取得目前的權限。


但是 httpd_sys_content_t 僅是瀏覽的權限而已,依據 laravel 的安裝說明bootstrap/cache 及 storage 這兩個資料夾必須要有寫入的權限,所以需再做以下修改:




1
2
3
4
$ chcon -Rv -t httpd_sys_rw_content_t blog/storage
$ chcon -Rv -t httpd_sys_rw_content_t blog/bootstrap/cache
$ sudo chmod -R 777 blog/storage
$ sudo chmod -R 777 blog/bootstrap/cache


2019年3月11日 星期一

google cloud debian 安裝mariadb

參考文章:
https://www.howtoing.com/how-to-install-mariadb-on-debian-9
https://blog.gtwang.org/linux/mysql-create-database-add-user-table-tutorial/

1.sudo apt install mariadb-server

2.sudo mysql_secure_installation

3.GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

4.mysql -u admin -p 

輸入密碼

# 新增資料庫

CREATE DATABASE `my_db`;


# 新增使用者,設定密碼

CREATE USER 'my_user'@'localhost' IDENTIFIED BY 'my_password';

# 設定使用者權限

GRANT ALL PRIVILEGES ON my_db.* TO 'my_user'@'localhost';