本來測試安裝 Python3.8.2,但很3.8.2無法安裝 Pandas,因此退而求其次選擇 3.7.7
由於未安裝compile工具,從此開始安裝
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
*** 接著一定要記著先裝好 openssl ,否則 pip 不能用,又要重新 build
wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz
tar -xzf openssl-1.1.1e.tar.gz
cd openssl-1.1.1e
./config --prefix=/usr/local/openssl no-zlib
make
make install
放置openssl lib
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl/ /usr/include/openssl.bak
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
echo /usr/local/lib >> /etc/ld.so.conf.d/openssl.conf
下載Python 及解壓縮
wget --no-check-certificate https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz
tar -xzvf Python-3.7.7.tgz
cd Python-3.7.7
安裝。
./configure --with-openssl=/usr/local/openssl/
make
make install
安裝完畢,執行檔位於 /usr/local/bin 下面, python3 & pip3
2020年3月18日 星期三
2020年3月5日 星期四
使用 letsencrypt 與 Certbot 申請網頁 ssl 憑證
近日透過 nctu.me 免費申請了一個 domain name,想讓家裡的桌機網頁可以透過 https 連線。
於是選擇了 https://letsencrypt.org/zh-tw/ 免費的 ssl 的申請機制。
依照 letsencrypt 官網推薦的方式,使用Certbot 來自動建立憑證。但很不幸的 Certbot 並不支援windows 環境,因此耍了點小手段,先在桌機run了 VM,執行了 CentOS7,然後調整寬頻分享器,先把 CentOS7 的 web server 對應到對外的 web server,如此可以讓 CentOS7 自動建立憑證。完成之後,再把憑證 copy 到桌機的 apache server 來用。
PS : 但原本的自動更新憑證機制,則無法在本機執行,所以憑證僅有3個月效期,之後還是得再透過 VM 來更新。
CentOS 獲得的憑證,權限如下:
drwxr-xr-x /etc/pki/site/certs/
-rw-r--r--. 1 root root 1911 2020-03-04 22:19 cert.pem
-rw-r--r--. 1 root root 1647 2020-03-04 22:19 chain.pem
-rw-r--r--. 1 root root 3558 2020-03-04 22:19 fullchain.pem
-rw-------. 1 root root 1708 2020-03-04 22:19 privkey.pem
若要直接搬移到其他 CentOS機器,請注意 SELinux 的安全性,可能讓 apache server 找不到憑證。若有發生設定正確,卻始終找不到憑證的情況,可以試著設定整個目錄的權限:
restorecon -Rv /etc/pki/site/certs/
接著複製到windows上,將apache server 的設定指向這些憑證,也就成功了。
補充:
要開啟 apache server 的 https service,設定動作如下:
conf/httpd.conf
打開 mod_ssl.so 與 socache_shmcb_module (與ssl cache有關) 模組
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
引入 httpd-ssl.conf,打開下面設定。
Include conf/extra/httpd-ssl.conf
於是選擇了 https://letsencrypt.org/zh-tw/ 免費的 ssl 的申請機制。
依照 letsencrypt 官網推薦的方式,使用Certbot 來自動建立憑證。但很不幸的 Certbot 並不支援windows 環境,因此耍了點小手段,先在桌機run了 VM,執行了 CentOS7,然後調整寬頻分享器,先把 CentOS7 的 web server 對應到對外的 web server,如此可以讓 CentOS7 自動建立憑證。完成之後,再把憑證 copy 到桌機的 apache server 來用。
PS : 但原本的自動更新憑證機制,則無法在本機執行,所以憑證僅有3個月效期,之後還是得再透過 VM 來更新。
CentOS 獲得的憑證,權限如下:
drwxr-xr-x /etc/pki/site/certs/
-rw-r--r--. 1 root root 1911 2020-03-04 22:19 cert.pem
-rw-r--r--. 1 root root 1647 2020-03-04 22:19 chain.pem
-rw-r--r--. 1 root root 3558 2020-03-04 22:19 fullchain.pem
-rw-------. 1 root root 1708 2020-03-04 22:19 privkey.pem
若要直接搬移到其他 CentOS機器,請注意 SELinux 的安全性,可能讓 apache server 找不到憑證。若有發生設定正確,卻始終找不到憑證的情況,可以試著設定整個目錄的權限:
restorecon -Rv /etc/pki/site/certs/
接著複製到windows上,將apache server 的設定指向這些憑證,也就成功了。
補充:
要開啟 apache server 的 https service,設定動作如下:
conf/httpd.conf
打開 mod_ssl.so 與 socache_shmcb_module (與ssl cache有關) 模組
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
引入 httpd-ssl.conf,打開下面設定。
Include conf/extra/httpd-ssl.conf
conf/extra/httpd-ssl.conf
設定憑證檔還有 Key 的位置
SSLCertificateFile "D:/Program/Apache24/conf/site/certs/cert.pem"
SSLCertificateKeyFile "D:/Program/Apache24/conf/site/certs/privkey.pem"
執行 bin/ApacheMonitor.exe
用監控程式,重新啟動 apache
2019年12月4日 星期三
使用python透過firebase發送ios推播
為了簡化推播的困難度,通常會透過firebase等平台進行推播,以下為一段透過firebase後台送出推播到ios機器的sample:
詳細的payload內容可以參考firebase的說明網頁:
Firebase Cloud Messaging HTTP protocol
https://firebase.google.com/docs/cloud-messaging/http-server-ref
from urllib import request
import json
to = <fmc token>
url = 'https://fcm.googleapis.com/fcm/send'
key = <firebase key>
headers = {
'Content-Type' : 'application/json',
'Authorization' : 'key=' + key,
}
data = {
"to": to,
"content_available" : True,
"data": {
'info' : 'data to background mode',
},
'notification' : {
'title' : 'this is title',
'body' : 'this is body',
},
}
dataJson = json.dumps(data).encode('utf-8')
r = request.Request(url, dataJson, headers = headers)
result = request.urlopen(r)
result.getcode()
詳細的payload內容可以參考firebase的說明網頁:
Firebase Cloud Messaging HTTP protocol
https://firebase.google.com/docs/cloud-messaging/http-server-ref
2019年10月25日 星期五
centos 下 conda 使用簡易提示
conda env list => 列出已經有的環境
conda create --name <env> => 建立某個環境
conda create --name <env> python=3.7 => 指定python版本
conda env create --name <env> -f <yml file> => 依照指定環境建立
conda env remove --name <env> => 移除某個環境
source activate <env> => 切換到某個env
source deactivate => 離開env
切換到環境下,可以做下面的動作:
conda list => 列出安裝的package
conda env export --file <yml file> => 將環境設定輸出到 yml檔
conda create --name <env> => 建立某個環境
conda create --name <env> python=3.7 => 指定python版本
conda env create --name <env> -f <yml file> => 依照指定環境建立
conda env remove --name <env> => 移除某個環境
source activate <env> => 切換到某個env
source deactivate => 離開env
切換到環境下,可以做下面的動作:
conda list => 列出安裝的package
conda env export --file <yml file> => 將環境設定輸出到 yml檔
2019年6月15日 星期六
centos7 架設 vsftpd (virtual user 使用 mysql 與 local account 並存)
先前使用過 mysql 當作帳號驗證,若想要混合 linux local account 及 mysql 中的帳號,需要考慮兩個部分。1. 登入認證。 2. 目錄及權限。
登入認證:
考慮使用者先使用 mysql 驗證,若無法通過則使用原來的 linux 帳號認證,因此 pam 檔使用原先兩個 pam 混合。需要注意式 mysql 的部分,required 要更換成 sufficient,也就是 mysql 的認證通過後,就不再檢查後續的認證。
編輯 pam 檔 /etc/pam.d/vsftpd_mix:
這些項目僅能針對 virtual user,因此利用 user_config_dir的設定,依照登入帳號,如果是 local account,就反向取消這些設定。
在 /etc/vsftpd/user_conf 下面,針對每個 local account 增加設定檔,例如 local account : xyz
PS:亦可反向思考,local account的設定寫在 vsftpd.conf中,每個 virtual user 建立一個檔案在 /user_conf 之下。可考慮哪種方式比較容易處理。
登入認證:
考慮使用者先使用 mysql 驗證,若無法通過則使用原來的 linux 帳號認證,因此 pam 檔使用原先兩個 pam 混合。需要注意式 mysql 的部分,required 要更換成 sufficient,也就是 mysql 的認證通過後,就不再檢查後續的認證。
編輯 pam 檔 /etc/pam.d/vsftpd_mix:
#%PAM-1.0 auth sufficient pam_mysql.so db=vsftpd user=vsftpd passwd=42fdsFDE3$ host=localhost table=accounts usercolumn=username passwdcolumn=password crypt=3 account sufficient pam_mysql.so db=vsftpd user=vsftpd passwd=42fdsFDE3$ host=localhost table=accounts usercolumn=username passwdcolumn=password crypt=3 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth
並在 vsftpd.conf 中,調整設定:
pam_service_name=vsftpd_mix
目錄及權限:
原先使用 mysql 中 user時,vsftpd.conf 增加了以下設定:
virtual_use_local_privs=YES guest_enable=YES guest_username=vuser user_sub_token=$USER local_root=/home/vuser/$USER
這些項目僅能針對 virtual user,因此利用 user_config_dir的設定,依照登入帳號,如果是 local account,就反向取消這些設定。
vsftpd.conf 增加設定
user_config_dir = /etc/vsftpd/user_conf
在 /etc/vsftpd/user_conf 下面,針對每個 local account 增加設定檔,例如 local account : xyz
增加 /etc/vsftpd/user_conf/xyz,內容為
virtual_use_local_privs=NO guest_enable=NO user_sub_token=$USER local_root=/home/$USER
PS:亦可反向思考,local account的設定寫在 vsftpd.conf中,每個 virtual user 建立一個檔案在 /user_conf 之下。可考慮哪種方式比較容易處理。
2019年5月15日 星期三
firewall-cmd 參數速記
*. zone name limited 17 chars
*. firealld-cmd 的參數:
共用參數
--permanent 查詢、設定 硬碟中儲存的設定
zone查詢、設定相關
--get-default-zone 查詢預設的zone
--set-default-zone=... 指定預設的zone
--get-zones 列出所有的zones
--list-all-zones 列出所有zones的詳細設定
--zone=... --list-all 指定對某個zone列出詳細設定
active zone相關
--get-active-zones 查詢各網路介面運作中的zone
--zone=... --change-interface=... 設定網路介面運作中的zone
service相關
--get-services 列出已經定義的服務名稱
--reload 重新讀入服務名稱。
(user 可以在 /etc/firewalld/services下增加自己的service設定,
可參考/usr/lib/firewalld/services下,原有的各種service寫法)
--zone=... --list-services 列出zone目前打開firewall的服務
--zone=... --add-service=... 增加打開firewall的服務
--zone=... --remove-service=... 關閉firewall的服務
--zone=... --add-port=[port,port-port]/['tcp','udp'] ...增加打開某個指定的port
--zone=... --remove-port=[port,port-port]/['tcp','udp'] ...增加打開某個指定的port
連線過濾相關
--zone=... --list-rich-rules 列出連線過濾設定
--zone=... --add-rich-rule=... 增加連線過濾設定
--zone=... --remove-rich-rule=... 刪除連線過濾設定
sample:
'rule family="ipv4" source address="192.168.111.0/24" port port="22" protocol="tcp" reject'
'rule family="ipv4" source address="192.168.111.0/24" service name="http" accept'
*. firealld-cmd 的參數:
共用參數
--permanent 查詢、設定 硬碟中儲存的設定
zone查詢、設定相關
--get-default-zone 查詢預設的zone
--set-default-zone=... 指定預設的zone
--get-zones 列出所有的zones
--list-all-zones 列出所有zones的詳細設定
--zone=... --list-all 指定對某個zone列出詳細設定
active zone相關
--get-active-zones 查詢各網路介面運作中的zone
--zone=... --change-interface=... 設定網路介面運作中的zone
service相關
--get-services 列出已經定義的服務名稱
--reload 重新讀入服務名稱。
(user 可以在 /etc/firewalld/services下增加自己的service設定,
可參考/usr/lib/firewalld/services下,原有的各種service寫法)
--zone=... --list-services 列出zone目前打開firewall的服務
--zone=... --add-service=... 增加打開firewall的服務
--zone=... --remove-service=... 關閉firewall的服務
--zone=... --add-port=[port,port-port]/['tcp','udp'] ...增加打開某個指定的port
--zone=... --remove-port=[port,port-port]/['tcp','udp'] ...增加打開某個指定的port
連線過濾相關
--zone=... --list-rich-rules 列出連線過濾設定
--zone=... --add-rich-rule=... 增加連線過濾設定
--zone=... --remove-rich-rule=... 刪除連線過濾設定
sample:
'rule family="ipv4" source address="192.168.111.0/24" port port="22" protocol="tcp" reject'
'rule family="ipv4" source address="192.168.111.0/24" service name="http" accept'
2019年5月14日 星期二
lftp 使用簡介
lftp是linux上一套常用的ftp client軟體,支援FTP、SFTP、FTPS等。
假設抓取 readme.txt,結束後離開:
使用SFTP時:
lftp -e "get -c readme.txt; exit" -u <user>,<password> sftp://<domain or ip>
使用FTP時:
lftp -e "get -c readme.txt; exit" -u <user>,<password> ftp://<domain or ip>
使用FTPS時:
lftp -u <user>,<password> ftp://<domain or ip> -e "\
set ftp:ssl-force true; set ftp:ssl-protect-data true; set ssl:verify-certificate no;\
get -c readme.txt; exit"
PS:此時先使用FTP連上,再強制使用SSL傳遞帳密及資料。
訂閱:
文章 (Atom)