FTP แบ่ง directory ให้แต่ละ user

โดยปกติ 1 เว็บเราก็จะมี 1 FTP user แต่หากเราต้องการมีอีก FTP user ให้มาทำงานเฉพาะ upload file บางอย่างใน path ที่เรากำหนดเท่านั้น เราจะทำอย่างไร
1. Creating new user and password

useradd user_upload
passwd user_upload

2. Add an Existing User Account to a Group (หากไม่ได้ทำขั้นตอนนี้ อาจจะพบ Permission Denied)

usermod -a -G test_group user_upload

3. chmod directory ให้สิทธิ์กับ Group Permission อย่าง 775 จะทำให้ Group มีสิทธิ์เขียนไฟล์ ลบไฟล์ได้ด้วย

4. Changing the home directory for ftp user (กำหนด directory home ให้กับแต่ละ user เวลาเข้า FTP จะอยู่ในของตัวเองเท่านั้น)

usermod -d /your_home_upload_path user_upload

5. Restrict ftp access to a directory (don’t leave home) (config ไม่ให้ย้ายตำแหน่งออกจาก home ของตัวเอง)
ProFtpd edit /etc/proftpd.conf

DefaultRoot ~
service proftpd restart

VSFTPD edit /vsftpd.conf

chroot_local_user=YES
service vsftpd restart
Posted in ไม่มีหมวดหมู่ | Leave a comment

crontab ทำหน่วยวินาทีไม่ได้ ใช้ sh แทนได้

crontab ไม่สามารถทำหน่วยวินาทีได้ เราสามารถใช้ sh แทนได้

vi every-5-sec.sh

ตัวอย่างรันทุกๆ 5 วิ แบบเขียน log ทับของเดิม

#!/bin/bash
while true
do
 SERVICE='httpd'
 if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
 echo "$dt $SERVICE service running, everything is fine"
 else
 /sbin/service httpd start
 fi
SERVICE='mysqld'
 if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
 echo "$dt $SERVICE service running, everything is fine"
 else
 /sbin/service mysqld start
 fi

if [ ! "$(docker ps -q -f id=ab2c8fdeb9db)" ]; then
    # run your container
    docker start ab2c8fdeb9db
    echo "AUTORESTART docker elasticsearch"
else

echo "$dt docker elasticsearch is running, everything is fine"
fi
 sleep 5
 > /home/self-healing.log
done

รัน background

nohup ./every-5-sec.sh &

หากต้องใช้ curl และเทียบ string

 response=$(curl --connect-timeout 10 localhost:8081);
 if [ "xxx" == "${response}" ];
then
 ..
 else
 ..
 fi
Posted in centos6 | Leave a comment

kthrotlds cpu ขึ้น คืออะไร

เราเจอกับ hacker แล้ว crontab โดน hack ใช้ขุดบิทคอย mining crypto โดยผ่าน command kthrotlds เป็น kernel thread process อะไรที่เราใช้ crontab มันจะลบทิ้งหมด แล้วกลายเป็นโค้ดที่ใช้ขุดเหมือง โดยรันผ่าน kthrotlds สร้าง thread จำนวนมากทำงานไปขุดบิทคอยนั่นเอง

ตัว command kthrotlds มันจะอยู่ที่ /usr/etc/[kthrotlds]

หากเราลอง top แล้ว kill process มันไป มันจะกลับมาใหม่เรื่อยๆ สาเหตุเพราะ crontab มันแอบทำงานอยู่

เราต้องปิด service crond stop และหันไปใช้ sh แทน

ถึงแม้เราจะปิด crontab ไปแล้ว มันก็ยังไม่หายไป ผมไม่แน่ใจเหมือนกันว่าเพราะอะไร นั่งสู้กับมันอยู่ 10 ชม. ได้

วิธีจัดการ process ประหลาด ขุดบิทคอย ทำ CPU ขึ้น ให้ลบ crontab ทุกอย่าง

ที่โดนก็คือตัว kthrotlds กิน CPU อย่างหนัก โดน hack crontab ตอนนี้แก้ได้แล้ว

whereis crond

yum remove /usr/sbin/crond (คือยอมเลิกใช้งาน cron ไปเลย)

และทำการเปิดใช้งาน Firewall ssh ระบุ ip ใช้งานเฉพาะเครื่องที่เราอนุญาติพอ

สุดท้ายให้ เปลี่ยนรหัส root แล้วก็ restart server ซักรอบ แล้วก็ ปิด cron.d หากมันรันตอนเริ่ม

reference https://www.milesweb.com/forums/errors-and-solutions/crontab-error-renaming-varspoolcrontmp-xxxxky5zhv-to-varspoolcronroot/

reference https://www.srv24x7.com/kthrotlds-cve-2019-10149-exim/

Posted in ไม่มีหมวดหมู่ | Leave a comment

OpenID VS OAUTH ต่างกันยังไง

OpenID is about authentication (ie. proving who you are)
OAuth is about authorisation (ie. to grant access to functionality/data/etc.. without having to deal with the original authentication).

OpenID Connect (OIDC) Combines the features of OpenID and OAuth i.e. does both Authentication and Authorization.

A common pattern for OpenID Connect API is three steps:
1) Get a code
2) Get tokens like the access_token, refresh_token, and id_token
3) Get user info which contains claims like username, email, etc.

**The big difference between OpenID Connect and OAuth2 is the id_token

Reference1 : https://security.stackexchange.com/questions/44611/difference-between-oauth-openid-and-openid-connect-in-very-simple-term
Reference2 : https://stackoverflow.com/questions/1087031/whats-the-difference-between-openid-and-oauth
Reference3 : https://www.gluu.org/blog/oauth-vs-openid-whats-the-difference/

Posted in ไม่มีหมวดหมู่ | Leave a comment

JWT jti claim คืออะไร


jti คือ unique JWT ID ใช้ป้องกันการ replay attack ในการใช้ JWT ที่ถูก revoke ไปแล้ว โดยทาง server จะต้องทำ cache หรือ database ในการเก็บ jti คู่กับ aud (client_id) ในการทำ blacklist JWT ไม่ให้สามารถ replay attack มาได้ โดย jti จะมีค่า exp และ iat ของตัวเองเก็บใน storage โดยตั้งให้มากกว่า exp claim ของ JWT เพื่อปิดช่องว่างเวลา ที่ hacker สามารถเอา JWT ไปใช้งานได้

โดยจะต้องระมัดระวังในเรื่อง performance ให้ดี จาก stateless จะเป็น stateful เพราะว่า client จะต้องเรียกมาเช็ค blacklist JWT เพราะฉะนั้น บางเรื่องบาง feature ที่ต้องระมัดระวังเรื่อง security เท่านั้นควรใช้งาน หรือถ้า server เราเทพมากๆ ก็ใช้ทุกจุดได้เลย แต่มันก็ดูจะไม่ต่างจาก access_token แบบเก่าซักเท่าไร ที่ต้องมา hit server ทุก request

ตัวอย่าง jwt claim ของ keycloak system

{
  "jti": "d5b7bc5c-ec7d-4bbb-9d22-669ee07a7f2c",
  "exp": 1565756977,
  "nbf": 0,
  "iat": 1565755177,
  "iss": "http://192.168.99.100:8080/auth/realms/master",
  "aud": "http://192.168.99.100:8080/auth/realms/master",
  "sub": "1c7cdc50-e237-435e-a811-38bfb4cb7b2b",
  "typ": "Refresh",
  "azp": "security-admin-console",
  "auth_time": 0,
  "session_state": "c968be85-73b4-4e4e-b5eb-ed45193d09cb",
  "scope": "profile email"
}

azp คือ Authorized party ชื่อของ client ผู้สร้าง JWT
amr คือ Authentication Methods References ไม่มี standard สำหรับ amr value ใส่เองได้เลย เป็นค่าที่บอกว่า user login ด้วยวิธีไหน เช่น password,otp,pin,facerecog,qrcode

reference1 : https://auth0.com/blog/blacklist-json-web-token-api-keys/
reference2 : https://stackoverflow.com/questions/28907831/how-to-use-jti-claim-in-a-jwt
reference3 : https://security.stackexchange.com/questions/64541/can-i-prevent-a-replay-attack-of-my-signed-jwts

Posted in json web token (jwt) | Leave a comment