In https://yopmail.com, you can choose any email account like 'test123', if not conflict with others, you will get a email account test123@yopmail.com without personal information registered.
星期二, 10月 28, 2025
星期五, 11月 22, 2024
Replace ldap-utils with cURL
- docker run -d --name openldap -p 1389:1389 bitnami/openldap:2.6.8
- docker ps
- openldap up and running
- docker exec -it openldap ldapsearch -H ldap://localhost:1389 -x -b dc=example,dc=org
- numEntries: 5
- ldapsearch -H ldap://localhost:1389 -x -b dc=example,dc=org
- ldapsearch: No such file or directory
- curl ldap://localhost:1389/dc=example,dc=org??sub
- numEntries: 5
星期二, 11月 19, 2024
星期二, 11月 05, 2024
Jenkins Agent Connect Fail: Did not receive X-Remoting-Capability header
Jenkins node name is case-sensitive.
星期二, 3月 28, 2023
Spring HTTP Strict Transport Security Guide
1. demo site
1.
2. generate, download, unzip, cd
3. docker run -it --rm --name my-maven-project -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven:3.9.0-eclipse-temurin-17 mvn clean install
4. java -jar target/demo-0.0.1-SNAPSHOT.jar
5. get generated security password
6. visit http://localhost:8080 with username user and generated password
7.
2. index page
1. create src/main/java/com/example/demo/controller/WebController.java
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class WebController {
@RequestMapping(value = "/index")
public String index() {
return "index";
}
}
2. create src/main/resources/templates/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1" />
<title>Spring Boot Application</title>
</head>
<body>
<h4>Welcome to Thymeleaf Spring Boot web application</h4>
</body>
</html>
3. repeat 1.3 ~ 1.6
4.
3. https
1. create self-signed keystore: demo.keystore
keytool -genkeypair -alias demo -keyalg RSA -keystore demo.keystore -storetype JKS -dname "CN=localhost" -keypass keyPass -storepass storePass
2. create spring config: demo.yml
server:
port: 8443
ssl:
enabled: true
key-alias: demo
key-store: "/your/path/to/demo.keystore"
key-store-type: jks
key-store-password: storePass
key-password: keyPass
3. java -jar demo-0.0.1-SNAPSHOT.jar --spring.config.location=demo.yml
4. repeat 1.5
5. visit https://localhost:8443 with username user and generated password, ignore self-signed certificate warning.
6.
星期六, 1月 07, 2023
Docker CAS 6.6.x with AD (just like LDAP)
- cas.authn.ldap[0].ldap-url=ldaps://azuread.abc.com.tw
- cas.authn.ldap[0].base-dn=ou=AADDC\ Users,dc=abc,dc=com,dc=tw
- cas.authn.ldap[0].type=AUTHENTICATED
- cas.authn.ldap[0].bind-dn=your_account@abc.com.tw
- cas.authn.ldap[0].bind-credential=yourPassword
- cas.authn.ldap[0].search-filter=(&(objectClass=user)(sAMAccountName={user}))
- cas.authn.ldap[0].principal-attribute-list=cn,displayName,sAMAccountName
Docker CAS 6.6.x with LDAP, not Anonymous
change
- cas.authn.ldap[0].type=ANONYMOUS
to
- cas.authn.ldap[0].type=AUTHENTICATED
- cas.authn.ldap[0].bind-dn=CN=user01,ou=users,dc=example,dc=org
- cas.authn.ldap[0].bind-credential=bitnami1
Docker CAS 6.6.x with LDAP
之前我們已確認了 Docker CAS 可以運作,預設帳密是 casuser / Mellon 這組,姑且稱之為「靜態帳密表」。接著利用這篇所述(注意版本,行文時已升到 2.6.3),來試試 CAS 如何與後端 LDAP 合作。首先開好 LDAP 與之前的 CAS,並進去確認連往 LDAP 的網路通暢:
- docker run -d --name cas -p 8080:8080 -v ./cas.properties:/etc/cas/config/cas.properties apereo/cas:6.6.4
- docker exec -it cas /bin/bash
- echo < /dev/tcp/172.18.8.166/1389 && echo on || echo off
- on
接著在 cas.properties 加入以下幾行:
- cas.authn.ldap[0].ldap-url=ldap://172.18.8.166:1389
- cas.authn.ldap[0].base-dn=ou=users,dc=example,dc=org
- cas.authn.ldap[0].type=ANONYMOUS
- cas.authn.ldap[0].search-filter=(&(objectClass=posixAccount)(cn={user}))
重啟帶有新設定的 CAS 雖然順利,但仍僅能驗證 casuser / Mellon 而不能驗證 LDAP user01 / bitnami1 這組帳密。注意看,log 裡面有這段:
- user01 not found in backing map.
意思是 CAS 把輸入的 user01 / bitnami1 這組帳密交給「靜態帳密表」了。為防止混淆,可以關掉它。在 cas.properties 加入一行:
- cas.authn.accept.users=
重啟之後情況不變?這時得把 log4j2.xml 抓出來改設定,看看發生了什麼問題?
- docker cp cas:/etc/cas/config/log4j2.xml .
- vi log4j2.xml
- <Property name="cas.log.level">debug</Property>
- vi cas.properties
- logging.config=file:/etc/cas/config/log4j2.xml
- docker stop cas
- docker rm cas
- lsof -i :8080
- <PID>
- kill <PID>
- docker run -d --name cas -p 8080:8080 -v ./cas.properties:/etc/cas/config/cas.properties -v ./log4j2.xml:/etc/cas/config/log4j2.xml apereo/cas:6.6.4
在海一般的訊息之中,唯一有幫助的是這條:
- <Authentication handler [HttpBasedServiceCredentialsAuthenticationHandler] does not support the credential type [UsernamePasswordCredential(username=user01, source=null, customFields={})].>
這意思很難懂?沒錯,它其實要表達的是「現在這個 Docker CAS 並不支援 LDAP」。我們得學習這篇的做法,在這裡挑 6.6 或你想要的分支下載,在 build.gradle 檔案中找到 dependencies 段落,在其中新增一行:
- implementation "org.apereo.cas:cas-server-support-ldap"
這裡千萬要注意拼字是否正確?原文把 implementation 拼錯,複製貼上並不管用,也不會有錯誤訊息,我就這樣又去多走彎路了。然後在同目錄執行指令:
- gradlew clean build
幾分鐘後,可以看到一個新的 cas.war 在 build/libs 目錄下,大小應該會比 Docker Image 裡面那個要大一些,我們要用這個新的:
- docker run -d --name cas -p 8080:8080 -v ./cas.properties:/etc/cas/config/cas.properties -v ./log4j2.xml:/etc/cas/config/log4j2.xml -v ./cas.war:/docker/cas/war/cas.war apereo/cas:6.6.4
這次要有耐心一點,原本一分鐘就能開好的 CAS 可能要拉長到三分多鐘,不是壞了。能驗證 LDAP 的帳密,算是值得吧?
星期三, 1月 04, 2023
Docker CAS 6.6.x without SSL
- vi cas.properties
- server.port=8080
- server.ssl.enabled=false
- docker run -d --name cas -p 8080:8080 -v ./cas.properties:/etc/cas/config/cas.properties apereo/cas:6.6.4
星期二, 1月 03, 2023
Docker CAS 6.6.x needs /etc/cas/thekeystore
We can create the /etc/cas/thekeystore immediately like this:
docker run -d --name cas -p 8443:8443 apereo/cas:6.6.4; docker exec -it cas keytool -genkeypair -alias cas -keyalg RSA -keypass changeit -storepass changeit -keystore /etc/cas/thekeystore -dname "CN=localhost"
星期六, 10月 01, 2022
解決 mRemoteNG Log4NET 資安弱點
- 下載 Log4NET 2.0.15 並解壓縮,將 net45 目錄下的 log4net.dll 複製到 C:\Program Files (x86)\mRemoteNG,取代舊版。
- 修改 C:\Program Files (x86)\mRemoteNG\mRemoteNG.exe.config,在 configuration\runtime\generatePublisherEvidence\assemblyBinding 新增一個 dependentAssembly,publicKeyToken="669e0ddf0bb1aa2a",oldVersion="0.0.0.0-2.0.8.0",newVersion="2.0.15.0"。
星期一, 6月 20, 2022
以 AD 管理 Linux 的帳密(以 CentOS 7 為例)
過去筆者手下眾多 Linux 都是用本機帳號維運,每到稽核規定的密碼修改週期就是一次不小的工程。既然公司是以 AD 為主,不如來研究看看如何讓 Linux 也加入 AD Domain,並且授權為 Linux 上的管理者。
在 CentOS 7,要先安裝一些套件:
sudo yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
然後是決定要加入的網域與帳號,我的帳號是 david_chou,要加入 dev.gss 這個網域。
sudo realm join --user=david_chou dev.gss
打完正確的密碼後,可以用 realm list 確認一下,像我的結果會是這樣:
上圖也可以在提示符號看出,hostname 是 QAC-ELASTALERT,這待會兒要用到。接下來我們要先修正幾個問題,細節在這,懶人請直接跟我來。sudo vi /etc/sssd/sssd.conf 編輯一個設定檔:
存檔後重啟服務 systemctl restart sssd 就會生效。換成網域帳號登入看看:
因為我們有設 default_domain_suffix 的關係,帳號只要 david_chou 而不用 david_chou@dev.gss 這麼長。最後記得再用舊的本機管理權限帳號登入,授權給網域帳號 sudo usermod -aG wheel david_chou@dev.gss,以後就可以只靠網域帳號做事了。
附帶一提,當網域密碼變更後,可能因快取的關係導致新密碼不能登入,可採取以下步驟:
- login (old password)
- sudo sss_cache -E (old password)
- systemctl restart sssd (old password)
- logout
- login (new password)
星期五, 4月 22, 2022
OpenLDAP on Docker
- docker run -d --name openldap -p 1389:1389 [-e LDAP_USERS=user01,user02 -e LDAP_PASSWORDS=bitnami1,bitnami2] bitnami/openldap:2.6.1
- ldapsearch -H ldap://localhost:1389 -x -b dc=example,dc=org
星期六, 12月 25, 2021
修改 Docker Container 預設使用 STDOUT / STDERR 以致不易查看的問題
每一個 Dockerfile 都可能或多或少地「定義」了一些應用程式本身與外在環境的關係,這次我們以 Nginx 為例,各位可以把它看做是一個輕量級的網頁伺服器。當我們把 Nginx 塞到 Docker 裡面,可能有許多細節我們不會想花時間去了解太深入,畢竟以 Scrum 的精神先讓事情發生,所以用以下的指令把它跑起來:
- docker run -d --name nginx -p 8080:80 nginx
- /var/lib/docker/containers/<containerId>/<containerId>-json.log
星期一, 4月 19, 2021
From Dynamic to Static IP Address on CentOS 7
Get the current network status related on some Network Interface (ex: ens192):
Now we get some important information:
- 192.168.109.56/23 => IP 192.168.109.56 & MASK 255.255.254.0
- GATEWAY=192.168.109.254
We keep all the settings except "dynamic", in /etc/sysconfig/network-scripts/ifcfg-ens192:
- ONBOOT=yes
- NM_CONTROLLED=no
- BOOTPROTO=static
- IPADDR=192.168.109.56
- NETMASK=255.255.254.0
- GATEWAY=192.168.109.254
After configuration saved, restart network service and verify:
- service network restart
- ip a show ens192
星期三, 4月 14, 2021
vm.max_map_count too low (65536)
- sudo sh -c 'echo "vm.max_map_count=262144" >> /etc/sysctl.conf'
- sudo sysctl -p
星期二, 3月 23, 2021
NFS on CentOS 7
- Server Side (server.nfs.net)
- install
- yum install nfs-utils
- share /var/share
- mkdir /var/share
- chmod 755 /var/share
- chown nfsnobody:nfsnobody /var/share
- service
- systemctl start rpcbind
- systemctl start nfs-server
- systemctl enable rpcbind
- systemctl enable nfs-server
- vi /etc/exports
- /var/share *(ro,wdelay)
- /var/share client.nfs.net(rw,sync)
- restart
- systemctl restart nfs-server
- firewall
- firewall-cmd --permanent --add-service=nfs
- firewall-cmd --permanent --add-service=mountd
- firewall-cmd --permanent --add-service=rpc-bind
- firewall-cmd --reload
- Client Side (client.nfs.net)
- install
- yum install nfs-utils
- share mapping
- mkdir -p /mnt/nfs/var/share
- mount -t nfs server.nfs.net:/var/share /mnt/nfs/var/share
- vi /etc/fstab (optional, auto mount after reboot)
- server.nfs.net:/var/share /mnt/nfs/var/share nfs defaults 0 0
星期五, 9月 18, 2020
星期二, 5月 19, 2020
Building private and cheaper ngrok-like tunnels
- In mrvm.net, you can cost USD$4 / year for 1 IPv4 address and 20 ports. In my case, 198.204.227.x 21001 ~ 21020.
- The ssh for mrvm.net is using another port. So you can control your VPS like ssh user@198.204.227.x -p 21021.
- In noip.com, you can register 3 free domain names like abc.hopto.org or xyz.ddns.net.
- Using inlets, you can expose your intranet service on the cloud:
- VPS
- export token=$(head -c 16 /dev/urandom | sha1sum | cut -d" " -f1)
- inlets server --port=21001 --token=$token
- DEV
- python -m SimpleHTTPServer 8000 (or your service)
- inlets client --remote=abc.hopto.org:21001 --upstream=http://localhost:8000 --token=...
- Client
- curl http://abc.hopto.org:21001
星期四, 5月 14, 2020
Install Appium on CentOS 7
- Refer this guide, install Node.js and npm.
- If you following this guide immediately, Appium install will fail caused by EACCES. So refer this guide for reinstall nvm forcibly.
- Relogin.
- Reinstall npm and Node.js by nvm, command: "nvm install node".
- Now you can install Appium without error.







