發表文章

[Linux] public key is not available: NO_PUBKEY 6B05F25D762E3157

解法: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 762E3157. Ref:  https://travis-ci.community/t/then-sudo-apt-get-update-failed-public-key-is-not-available-no-pubkey-6b05f25d762e3157-in-ubuntu-xenial/1728

[資安] Linux主機被安裝門羅幣挖礦

由於發現主機CPU時常高達400%.. 所以用先檢查一下 top => press c 或是直接 ps aux | grep redis2 發現是一隻 ./redis2 的程式 ./redis2 --donate-level 1 -o ve01.kieuanilam.me:5555 -u tt2re -p tt2re -k -B 大概追查了一下 這個形式蠻像是門羅幣挖礦在用的格式 後來去看一下相關的文章基本上可以肯定就是在挖門羅幣了 https://blog.csdn.net/qq_39919755/article/details/90258890 https://blog.csdn.net/m0_37847558/article/details/93074293 https://kknews.cc/zh-tw/tech/kbmmx98.html 後來直接使用 kill {pid} -9 直接停止 但發現變成了 zombie process (ref:  https://yq.aliyun.com/articles/34967 ) 但沒幾天又被打開挖礦程式,後來使用 find / -name redis2 發現檔案是在 redis 的 container 進去 redis 的 container 看了一下 發現裡面的 authorized_keys 內有個不知名的 key 感覺就是這個了 看起來攻擊手法是透過 redis container 去挖礦 後來改成直接在 local 安裝 redis-server 因為 docker 會讓防火牆設定直接無效 除非特別針對 DOCKER 或是 DOCKER-USER 這個角色去設定 (ref:  https://docs.docker.com/network/iptables/ ) 中間跑去檢查 /etc/passwd 有沒有多可疑用戶 跑去目前所有既有的用戶去看有沒有被新增奇怪的 ssh key 還好最後有找到!

[PHP] 物件化方式的讀檔

一般讀檔的方式 $handler = fopen("file.csv"); while (($line = fgets($handler)) !== false) { // 執行相關邏輯 fwrite($handler, "test\r\n"); } fclose($handler); 物件化讀檔的方式 $filepath = "test.tsv"; $file = new SplFileObject($filepath); while (!$file->eof()) { // 執行相關邏輯 $line = rtrim($file->fgets()); $file->fwrite("12345"); } $file = null; 這樣感覺 code 有比較好看一些 XD Ref: https://stackoverflow.com/questions/13246597/how-to-read-a-large-file-line-by-line https://www.php.net/manual/en/splfileobject.fwrite.php https://www.php.net/manual/en/class.splfileobject.php

[Laravel] 如何自己做套件

圖片
剛好最近公司內部有提需求,希望我自己可以把一些功能包成套件 這樣後面的人需要的話,就可以直接掛在 vendors 底下 就不需要重工了! 有鑑於此,我去看了一下 官方文件 ,好像沒有寫得很清楚 如果有人看到官方哪邊有提供,可以在底下回覆我,我會非常感謝QQ 於是乎,我跟著別人寫好的文章 1. 可以先產一個 laravel 的專案,或是用原有的專案都行,目的只是可以用指令產一些需要的檔案,比較方便 composer composer create-project laravel/laravel TestPackage 2. 在這個專案內新增一個 packages 的目錄,存放要做的套件,我這裡用 neil/text2address 當範例,先建立目錄之後,執行 composer init,初始化套件 mkdir -p packages/neil/text2address && composer init composer 範例可能會像下面 { "name": "neil/text2address", "description": "Translate text to address component of google", "license": "MIT", "authors": [ { "name": "Neil", "email": "neil@test.com" } ], "minimum-stability": "dev", "require": { "php": "^7.1", "illuminate/support": "~5.4|~6.0" }, "autoload...

[wrk] 壓力測試工具 - wrk

Ref:  https://github.com/wg/wrk 基本的指令就不太多闡述,github裡面有 主要是需要在 wrk 送出時新增 header, 可以透過 -s 去呼叫自己寫的 .lua 腳本 現在有個情境,驗證時需要將其他變數md5並放入 header 中,該怎麼做? 範例: -- 這行必須設定,因為 md5.lua 會放在同層目錄,方便引入 package.path = '/Users/neil/Desktop/all_projects/project/wrk/?.lua' -- 引入同層的 md5.lua md5 = require 'md5' a = "a" b = "b" -- 取得系統時間 time = os.time() -- 做 md5, 字串串接是使用 .. checksum = md5.sumhexa(a .. b .. time) wrk.method = "POST" wrk.headers["time"] = time wrk.headers["checksum"] = checksum wrk.headers["a"] = a wrk.headers["b"] = b wrk.headers["Content-Type"] = "application/json" -- 以下是將 response 寫入到檔案中 -- file = io.open('/Users/neil/Desktop/all_projects/project/test.log', 'a') -- io.output(file) -- response = function(status, header, body) -- -- io.write("status:" .. status .. "\n"); -- io.write(body .. "\n"); -- end -- done = function(summa...

[Mac] 使用 wrk 時,出現 Too many open files

Ref:  https://superuser.com/questions/433746/is-there-a-fix-for-the-too-many-open-files-in-system-error-on-os-x-10-7-1 可以使用 sysctl -w kern.maxfiles=60000 sysctl -w kern.maxfilesperproc=60000 來增加可開啟檔案的上限, 如果是一般 linux 的話,可以使用 ulimit -HSn 60000

[MySQL] MySQL 系統參數設定

sql_mode="" 主要為sql內部特殊規則限制,通常方便工程師會特別設定成"",代表空值不做任何限制,因為不保證工程師都能寫出高品質的SQL語句 sync_binlog=0 innodb_flush_log_at_trx_commit = 0 兩個特別是影響資料庫刷盤的參數,第一個指binlog刷盤,第二個指資料異動的刷盤,都設定為0速度最優,通常只有Master需要改成雙0,雙1的話安全性最高但最慢 max_connections = 5000 連線數上限 connect_timeout=10 連線timeout秒數 open_files_limit = 65535 能同時開啟檔案的上限 max_allowed_packet = 500M 能接受的封包最大值 transaction-isolation = REPEATABLE-READ 資料安全性隔離等級 RR為預設 query_cache_size = 0 query_cache_type = 0 過時的快取設定,兩組都設定為0,才能徹底關閉 expire_logs_days = 7 binlog保留天數,如果有硬碟空間問題,可以嘗試減少,但是相對備份檔案的有效保存期限 slow_query_log=1 long_query_time=1 slow_query_log_file=/var/lib/mysql/slow.log log_throttle_queries_not_using_indexes=1000 min_examined_row_limit=1000 log-slow-admin-statements = TRUE 慢查詢相關記錄設定,基本上有點能力的DBA才能處理優化,目前只需要開啟紀錄即可 innodb_file_per_table = 1 讓innodb的data實體檔案 .ibd文件從ibdata1獨立出來,分散寫入改善整體效能 innodb_buffer_pool_size = 3G *最重要影響資料庫讀取效能沒有之一 innodb引擎的快取層吃多少記憶體的設定,通常試情況設定為實體80%左右佔成