Category: Open Source Software & Freeware

  • ติดตั้ง FOG Project บน Ubuntu 18.04 Server

    FOG Project A free open-source network computer cloning and management solution

    บทความนี้เป็นคำแนะนำ การติดตั้ง FOG Project บน Ubuntu 18.04 Server และบอกเล่าถึงวิธีการเลือกตั้งค่าในขั้นตอนติดตั้ง แยกบทความออกเป็น 2 บทความ

    หลังจากเรามี Ubuntu 18.04 Server พร้อมแล้ว

    สร้างไดเรกทอรีชื่อ fog

    mkdir fog
    cd fog

    ดาวน์โหลดไฟล์

    wget https://github.com/FOGProject/fogproject/archive/1.5.7.tar.gz

    แตกไฟล์

    tar -xzvf 1.5.7.tar.gz

    หลังจาก แตกไฟล์ มาเสร็จแล้ว เข้าไปไดเรกทอรี

    cd fogproject-1.5.7/
    cd bin/

    ต่อไปก็มาดูขั้นตอนติดตั้ง

    sudo  ./installfog.sh

    ในหน้าจอการติดตั้งจะมีคำถามให้ตอบ Y หรือ N ไปเรื่อย ๆ ซึ่ง เราจะต้องเลือกว่าจะใช้งาน fogproject แบบใด ระหว่าง 2 แบบนี้

    แบบที่ 1
    ติดตั้ง FOG Project แบบมี DHCP Server ด้วย เหมาะสำหรับห้องคอมพิวเตอร์ที่ผู้ดูแลจัดการ network และ IP ของ Windows ได้เอง หรือ เหมาะสำหรับผู้ที่ต้องการจะตั้ง DHCP SERVER เพื่อให้บริการ IP แก่ Windows ด้วยตนเอง

    แบบที่ 2
    ติดตั้ง FOG Project แบบใช้ Proxy DHCP เหมาะสำหรับห้องคอมพิวเตอร์ที่ผู้ดูแลไม่ได้จัดการ network และ Windows จะได้รับ IP จาก DHCP Server ของ network หรือ ไม่สามารถตั้ง DHCP Server ขึ้นมาใช้งานเองได้

    วิธีลบ FOG อย่างสมบูรณ์
    หากต้องการย้อนการทำงาน กลับไปเริ่มต้นขั้นตอนติดตั้งใหม่ ให้ทำคำสั่งนี้

    delete fog database

    sudo mv /opt/fog/.fogsettings /opt/fog/fogsettings-firstInstall
    sudo userdel fogproject
    sudo rm /etc/systemd/system/multiuser.target.wants/FOGImageReplicator.service
    sudo rm /etc/systemd/system/multiuser.target.wants/FOGMulticastManager.service 
    sudo rm /etc/systemd/system/multi-user.target.wants/FOGScheduler.service 
    sudo mysql
    drop database fog;
    quit

    Remove files

    sudo rm -rf /var/www/fog
    sudo rm -rf /var/www/html/fog
    sudo rm -rf /opt/fog
    sudo rm -rf /tftpboot
    sudo rm -rf /images #Warning, this line deletes any existing images.

    ทำขั้นตอนติดตั้งใหม่

    sudo  ./installfog.sh

    หวังว่าจะเป็นประโยชน์

  • จับภาพ แชร์ภาพ ด้วย shareX Ep1

    Blog ที่4 นี้ขอนำเสนอโปรแกรมจับภาพหน้าจอฟรี ย้ำนะว่าฟรี !! มีชื่อว่า shareX ซึ่งสามารถจับภาพหน้าจอเพื่อนำไปใช้งานต่อในหลากหลายรูปแบบ เช่น ทำคู่มือ ทำวีดีโอ เอาไปลงในเว็บไซต์ หรื่ออื่นๆ ถือเป็นโปรแกรมฟรีแบบ Open Source ที่จัดเต็มในเรื่องของเครื่องมือต่างๆ ที่ติดตั้งมาให้แบบครบครันนนนนน

    จริงๆแล้วโปรแกรมฟรีที่สามารถจับภาพหน้าจอ record วีดีโอนี่ก็มีมากมายเลยแหละ อยู่ที่ใครชอบแบบไหน เอาเป็นว่าวันนี้ลองมาทำความรู้จักกับอีก 1 ตัว ที่มีชื่อว่า shareX กันหน่อยละกันนะ “จะได้รู้ว่าดีกว่าที่ใช้อยู่เนี่ย มันก็มีนะ !!” (อันนี้ผู้เขียนบอกตัวเองนะ 55+)

    shareX สามารถดาวน์โหลดได้ที่ https://getsharex.com/ หรือจะหาผ่าน window store ก็ได้เหมือนกัน เมื่อดาวน์โหลดเรียบร้อยแล้ว ก็ทำการติดตั้งบนเครื่องของเราได้เลย

    สำหรับ shareX ก็จะมี feature หลักๆ คือ

    • รองรับการจัดภาพหน้าจอแบบเต็มจอ เฉพาะหน้าต่าง หรือเฉพาะส่วน
    • สามารถตั้งให้เปิดแก้ไขภาพในโปรแกรมอื่นๆ ก่อนที่จะอัพโหลดได้
    • save file อัตโนมัติเอาไว้ในเครื่อง
    • upload ภาพขึ้นไปยัง services ต่างๆ
    • สามารถ copy code ต่างๆได้จากในตัวโปรแกรม เช่น html สำหรับแทรกภาพ หรือ BBCode สำหรับแปะในเว็บบอร์ด
    • รองรับการย่อ URL ในตัว
    • รองรับการ upload ข้อความขึ้นเว็บ
    • รองรับการ upload file ขึ้นอินเตอร์เน็ต
    • แชร์สิ่งที่อัพโหลดไปยังแหล่งอื่นๆ ได้
    • ตั้งค่า hotkey สำหรับจับภาพได้

    เหล่านี้ถือเป็น feature คร่าวๆ ของเจ้า shareX นะ จริงๆ แล้ว services ต่างๆที่ตัวโปรแกรมเชื่อมต่อได้นั้นมีเยอะมากๆ เดี๋ยวเราจะลองไปดูกัน

    เมื่อติดตั้งเสร็จเรียบร้อยแล้วเราก็จะเจอกับหน้าตาเจ้าตัว shareX ประมาณนี้ …..

    จะเห็นได้ว่าข้อความที่ขึ้นบอกไว้นั้นคือ ปุ่มใช้งานมาตรฐานที่โปรแกรมกำหนดมาให้ หากเราต้องการปุ่มอื่นๆ ถามว่าเปลี่ยนได้มั้ย ตอบเลยว่า …. ได้ !! แต่เดี๋ยวจะอธิบายไว้ในส่วนของ Hotkey settings ด้านล่างนะ

    ——————————————————————————————————————————————–

    Capture

    มากันที่ Feature หลักอันแรกคือ “Capture” หรือการจับภาพหน้าจอนั่นเอง shareX จะรองรับการจับภาพในหลายรูปแบบ ย้ำว่าหลากหลาย จริงๆ

    Fullscreen          จับภาพหน้าจอแบบ Fullscreen
    window               จับภาพหน้าจอแบบ Window ซึ่งสามารถเลือกได้จากหน้าจอทั้งหมดที่เราเปิดไว้ในเครื่องได้เลย
    monitor               หากมีมากกว่า 1 จอ ก็จะสามารถเลือกได้ว่าจะจับหน้าจอใด
    Region                 จับภาพหน้าจอแบบเลือกเฉพาะส่วน
    Last region        จับภาพในส่วนล่าสุดที่เราเพิ่งจับภาพไป
    Screen recording      บันทึกภาพหน้าจอ
    Screen recording (GIF)           บันทึกภาพหน้าจอแบบ GIF
    Scrolling capture        จับภาพหน้าจอที่มีความยาวมากเกินกว่าที่จะสามารถแสดงบนหน้าจอได้ทีเดียวหมด (ต้อง Scroll mouse ขึ้นลงนั่นเอง)
    Text capture (OCR)    จับภาพโดยเลือกเฉพาะตัวอักษรในภาพนั้น
    Auto capture           สามารถตั้งเวลาได้ ว่าจะให้จับภาพหน้าจอ ทุกๆ กี่วินาที
    Show Cursor          สามารถเลือกได้ว่าภาพหน้าจอที่เรา capture ไปเนี่ย จะให้แสดง cursor หรือไม่
    Screenshot delay: 0s สามารถเลือกความ delay ของการ capture หน้าจอได้

    Upload Feature

    Workflows

    แสดง Hotkey นั่นแหละ โดยส่วนหลักตัวโปรแกรมก็จะกำหนดมาให้อยู่แล้ว แต่เราสามารถปรับเปลี่ยน Hotkey ได้เอง และยังสามารถเพิ่ม workflows ได้อีกด้วยตัวอย่างจะอธิบายในส่วนของ Hotkey settings นะ

    • Capture region คือการจับภาพโดยเลือกพื้นที่ ๆ เราต้องการ
    • Capture entire screen คือการจับภาพแบบเต็มหน้าจอ
    • Capture active window คือการจับภาพจากหน้าต่างที่เราเลือก หรือกำลังทำงาน
    • Start/Stop screen recording using custom region คือการบันทึกหน้าจอโดยบันทึกจากพื้นที่ที่เราได้เลือกหรือกำหนดเอาไว้
    • Start/Stop screen recording (GIF) using custom region  คือการบันทึกหน้าจอโดยบันทึกจากพื้นที่ที่เราได้เลือกหรือกำหนดเอาไว้โดยผลลัพธ์ที่ได้จะอยู่ในรูปแบบไฟล์ GIF นั่นเอง

    Tools

    เครื่องมือเพิ่มเติม หรือส่วนเสริมของตัวโปรแกรมที่ทำให้เจ้า shareX เนี่ย ล้ำกว่าโปรแกรมอื่นไปอีก Step ขอยกตัวอย่างเป็นบางเครื่องมือละกัน เนื่องจากผู้เขียนก็ยังใช้ไม่ครบทุกเมนูเล้ยยยยย ตัวอย่างเช่น

    • Color picker           สามารถเลือกสีได้ ว่าต้องการสีอะไร
    • Screen color picker… เลือกสีบนหน้าจอเราได้เลยว่าต้องการสีอะไร โดยโปรแกรมจะ copy code สีเราให้ทันที เราสามารถนำไป code สีดังกล่าวไปใช้ต่อได้
    • Image editor           หน้าจอสำหรับปรับแต่งแก้ไขรูปภาพของเรา เช่น บันทึก upload print, select and move, สามารถใส่ข้อความลงในภาพได้ ทั้งแบบตัวอักษร หรือ free hand ใส่ step ในรูปภาพได้, Hilight, zoom, ใส่ emotion ได้, crop รูปภาพ แทรกรูปภาพ เป็นต้น
    • Image effects…       สำหรับใส่ effects ให้กับภาพได้ เช่น เพิ่ม filter ภาพ, ปรับ Adjustment, เพิ่ม text watermark หรือ image watermark เป็นต้น
    • Ruler…                เลือกเพื่อวัดขนาดของส่วนหน้าจอที่เราเลือกได้ ดังรูป
    • Image combiner…           อันนี้ก็เจ๋งดี เราสามารถเลือกภาพหน้าจอที่เราได้ capture ไว้เนี่ย นำมาผสมกันได้ ให้อยู่ในรูปเดียวกัน และยังเลือกแสดงผลได้อีกว่าจะให้แสดงในแนวนอน หรือแนวตั้ง เป็นต้น

    After capture tasks

    สามารถตั้งค่าได้ว่าหลังจากที่จับภาพเสร็จแล้วให้โปรแกรมทำอะไรต่อไป ตัวอย่างตามภาพด้านล่างเลย เช่น บันทึกเป็นไฟล์ภาพทันที, ใส่เอฟเฟกต์, ใส่ลายน้ำ, บันทึกเป็นภาพขนาดย่อ, คัดลอกในคลิปบอร์ด อัพโหลดไปยังเว็บ หรือ print เป็นต้น อยากเลือกอันไหนบ้างก็คลิกบนรายการ หรือบน icon ได้เลย

    After upload tasks

    สามารถตั้งค่าได้ว่าหลังจากที่อัพโหลดภาพแล้วให้โปรแกรมทำอะไรต่อไป เช่น แสดง shorten URL, Show QR code หรือ Copy URL to Clipboard เป็นต้น

    Destinations

    คือส่วนที่เราสามารถเข้ามาเลือกได้ว่าปลายทางที่เราจะเก็บไฟล์ภาพ ไฟล์ตัวอักษร หรือแปลง URL shortener เนี่ย เราจะเลือกอะไร คือเอาจริงๆ มันเยอะมากกกกกก หลักๆ ถ้าเป็นรูปผู้เขียนก็จะเลือก upload ไว้ที่ google photo หากเป็น file ก็จะไว้ที่ google drive เป็นต้น เอาเป็นว่าการตั้งค่าเนี่ยจะมาเล่าในตอนต่อๆ ไปละกันนะ มันเยอะจริงๆ

    Task settings…..

    การตั้งค่าในการบันทึกหน้าจอ เมื่อคลิก “Task settings” ก็จะปรากฏหน้าต่างขึ้นมา จริงๆ การตั้งค่าหลักๆ โปรแกรมก็จะตั้งมาให้เรียบร้อยอยู่แล้ว

    Application settings

    เป็นส่วนสำหรับตั้งค่าต่างๆ ของตัวโปรแกรม shareX หลักๆ ก็จะมีภาษา ตั้งค่า path ที่เก็บไฟล์ การแสดงผลของ History หรือต้องการให้โปรแกรมแสดงหรือไม่แสดงในส่วนไหน เป็นต้น แล้วแต่ผู้ใช้แต่ละคนนะ ก็ลองเข้ามาตั้งค่ากันดูได้

    Hotkey settings

    1. เลือกเมนู “Hotkey setting
    2. เลือกรายการที่ต้องการเปลี่ยน
    3. คลิกบน hotkey เดิม จากนั้นก็จะปรากฏหน้าจอด้านล่างเพื่อให้เราสามารถ select hotkey…. ใหม่ตามที่เราต้องการได้เลย

    แต่หากไม่ต้องการเปลี่ยนแปลงใดๆ Hotkey ที่ให้มาก็จำง่ายอยู่แล้วก็ข้ามเมนูนี้ไปได้เล้ย

    Screenshots folder…..

    เมนูนี้ใช้สำหรับเปิด Folder ที่เก็บภาพหน้าจอที่เราได้ Capture เอาไว้นั่นเอง หากต้องการเปลี่ยน path ที่เก็บสามารถเปลี่ยนได้โดยเลือกไปที่เมนู “Application settings” นะ

    History

    ใช้สำหรับเรียกดูประวัติการใช้งานย้อนหลังทั้งหมดของเรา โดยจะแยกให้เห็นเลยว่า total รวมเป็นเท่าไหร่ และเป็นประเภท image , text , URL อย่างละกี่ไฟล์ เป็นต้น

    Image history…..

    ใช้สำหรับเรียกดูประวัติการจับภาพหน้าจอย้อนหลังของเราทั้งหมด

    News

    ข่าวประกาศจากทาง shareX

    Debug

    ส่วนสำหรับข้อมูลการพัฒนา และมีในส่วนของการทดสอบเครื่องมือต่างๆ ไว้ด้วยเช่น test text upload, test images upload เป็นต้น

    Donate

    ถ้าใครคิดว่าใช้งานโปรแกรมนี้จนประทับใจแล้วก็สามารถไปบริจาคเพื่อเป็นกำลังใจให้ทีมงานของ ShareX กันได้

    About

    แสดงรายละเอียดเกี่ยวกับโปรแกรม shareX

    ——————————————————————————————————————————————–

    สำหรับ Blog นี้ผู้เขียนขอแนะนำโปรแกรม shareX  โดยอธิบายคุณสมบัติหลักๆ แต่ละตัว แบบไม่ได้ลงลึกเอาไว้ก่อน Blog หน้า จะกลับมาเล่าให้ฟังเพิ่มเติมทั้งในส่วนของการ connect ไปยังปลายทางที่เราเลือกสำหรับ upload ภาพ หรือการ Generate ออกมาเป็น QR Code หรืออื่นๆ เท่าที่ผู้เขียนจะอธิบายได้ละนะ 555 อย่าลืมไปลองใช้กันดูละ จิ๋วแต่แจ๋ว นะจะบอกให้

    อ้างอิง : bit.ly/refblog4

  • ELK #09 Anomaly Detection (Case Study)

    ระบบ PSU Email ให้บริการผู้ใช้ของมหาวิทยาลัยสงขลานครินทร์ ซึ่งมีการใช้งานจากทั่วโลก ทั้งระบบประกอบขึ้นจากคอมพิวเตอร์หลายเครื่อง การจะตรวจสอบ Log เมื่อเกิด Incident ขึ้น อาจจะต้องใช้ระยะเวลานาน และเป็นการยากพอสมควรที่จะเชื่อมโยงความสัมพันธ์ของเหตุการณ์ และสรุปออกมาเป็นรายงานได้ จึงเริ่มใช้ ELK สำหรับรวบรวม Log ของทั้งระบบไว้ที่ส่วนกลาง และพัฒนาต่อยอดเพื่อการตรวจจับความผิดปรกติต่าง ๆ ได้

    ในบทความนี้ จะนำเสนอวิธีการใช้ ELK เพื่อตรวจจับ การ Login ที่ผิดปรกติบน PSU Email โดยจะสนใจ ผู้ใช้ที่มีการ Login จากนอกประเทศเป็นหลัก

    การส่ง Log จาก Server เข้า ELK

    ที่เครื่อง Server แต่ละเครื่อง กำหนดให้ส่ง Log จาก /etc/rsyslog.d/50-default.conf เข้าไปที่ your.logstash.server:port ตามที่กำหนดไว้

    การสร้าง Logstash Filter

    ที่ Logstash Server

    • Input เพื่อรับข้อมูลจาก syslog ที่ port ที่ต้องการ เช่นในที่นี้เป็น 5516 เป็นต้น
    • Filter ใช้ Grok Plugin เพื่อจับข้อมูล จาก message แบ่งเป็นส่วน ๆ ตามลักษณะ แล้วตั้งชื่อตาม Field ตามต้องการ ในที่นี้คือ description, username, domainname, clientip, actiondate, actiontime เป็นต้น (ตัวที่สำคัญในตอนนี้คือ username และ clientip)
    • Output ตั้งว่าให้ส่งผลไปยัง Elasticsearch ที่ “your.elasticsearch.server” ที่ port 9200

    [ตรงนี้มีกระบวนการบางอย่าง ซึ่งค่อยมาลงรายละเอียด]

    เมื่อมี Log ไหลเข้าสู่ Logstash และ ถูกประมวลผลแล้ว ก็จะเข้าสู่ Elasticsearch แล้ว ก็นำไปใช้งานบน Kibana

    หลังจากนั้น สามารถ Search ข้อมูล และใส่ Fields ที่สนใจ เช่น Time, Username, geoip.country_name และ description ได้ แล้ว Save เอาไว้ใช้งานต่อ ในที่นี้ ตั้งชื่อว่า squirrelmail-geoip

    จากนั้น สามารถเอาไปสร้างเป็น Visualization แบบ Coordinate Map ได้ เช่น ดูว่า มีการ Login Success / Failed Login / Sent จากที่ไหนบ้างในโลก

    จะเห็นได้ว่า ส่วนใหญ่ ใช้งานจากในประเทศไทย (วงกลมสีแดงเข้ม ๆ) ส่วนนอกประเทศ จะเป็นวงสีเหลืองเล็ก ๆ

    การตรวจหาการใช้งานที่ผิดปรกติ

    สร้าง Search ใหม่ กรองเฉพาะ ที่มี (exist) Username และ ไม่เป็น N/A และ มี (exist) geoip.country_code และ ไม่ใช่ Thailand แล้ว Save ไว้ใช้งานต่อไป ในที่ตั้งชื่อว่า squirrelmail-geoip-outside-th

    จากนั้น เอาไปสร้าง Visualization แบบ Vertical Bar
    กำหนดให้
    Y Axis เป็นจำนวน
    X Axis เป็น Username
    โดยที่ Group by geoip.country_name และ description
    ก็จะทำให้รู้ว่า ใครบ้างที่ มีการใช้งานนอกประเทศ และ เป็นการใช้งานแบบไหน

    จะเห็นได้ว่า จะมีบางคนที่ แสดงสีแค่สีเดียว กับบางคนมีหลายสี เนื่องจาก มีหลายประเทศ และ หลายประเภทการใช้งาน เราสามารถ กรองเอาเฉพาะ ข้อมูลที่สนใจได้ โดยคลิกที่ Inspect แล้วกดเครื่องหมาย + กับข้อมูลที่ต้องการ เช่น description ที่เป็น “Failed webmail login” ก็ได้

    ก็จะกรองเฉพาะ Username ที่มีการ Login จากต่างประเทศ แต่ไม่สำเร็จ จากภาพด้านล่าง แสดงว่า 3 คนนี้ น่าจะโดนอะไรเข้าแล้ว

    หรือ ถ้าจะกรองข้อมูล เฉพาะคนที่ “Failed webmail login” และ “Message sent via webmail” ก็ได้ แต่ต้องเปลี่ยน ชนิดการ Filter เป็น “is one of”

    ผลที่ได้ดังภาพ แต่เนื่องจาก ก็ยังเป็น 3 คนนี้อยู่ จะเห็นได้ว่า คน ๆ เดียว (ซ้ายสุด) มีการ Login จากหลายประเทศ ภายใน 24 ชั่วโมง

    ต่อไป ถ้าเราสนใจเฉพาะ คนที่ “ส่งอีเมล” จากนอกประเทศ ในเวลาที่กำหนด จะได้ผลประมาณนี้

    พบว่า คนซ้ายสุด คนเดิมนั่นแหล่ะ แต่เราจะมาดูรายละเอียด ก็คลิกที่ปุ่ม Inspect แล้ว เลือก Include เฉพาะ Username นั้น

    ก็พบว่า คนนี้มีการส่ง email ออกจากประเทศ USA, Canada, Panama, Argentina, Mexico แล้วบินมา UK ภายในวันเดียว –> ทำได้ไง !!! (ดังภาพด้านล่าง)

    เมื่อลองตรวจสอบ ก็จะพบว่า Username นี้ มีพฤติกรรม ส่ง Spam จริง ๆ ก็จะจัดการ “จำกัดความเสียหาย” ต่อไป

    วิธีการที่กล่าวมาข้างต้น สามารถสร้างเป็น Process อัตโนมัติ (เว้นแต่ขั้นตอนการ จำกัดความเสียหาย จะ Automatic ก็ได้ แต่ตอนนี้ขอ Manual ก่อน) เอาไว้สำหรับ Monitoring ได้ โดยอาจจะสั่งให้ เฝ้าดู 1 ชั่วโมงล่าสุด และ Refresh ทุก 1 นาที ดังภาพ

    หวังว่าจะเป็นประโยชน์

    ส่วนรายละเอียด คอยติดตามตอนต่อไปครับ

  • ปิดช่องโหว่เหลือค้าง

    • หลังจากไม่ได้ตรวจสอบช่องโหว่มานาน วันนี้ Nessus ทำใหม่แล้วลองสแกนซักหน่อย
    Nessus Scan Report
    • ซึ่งจะพบว่ามี Medium สองรายการ คือ Browsable Web Directory และ WordPress User Enumeration โดย
      • Browsable Web Directory คือ สามารถเข้าถึงรายการใน directory ได้ เช่น ชื่อไฟล์ มีไฟล์อะไรบ้าง ขนาดเท่าไหร่ เป็นต้น เมื่อตรวจสอบก็พบว่าเป็น directory ที่ผู้ใช้ไม่จำเป็นต้องเข้าถึง
      • WordPress User Enumeration คือ สามารถเข้าถึง username ได้ว่ามี user อะไรบ้าง

    ปิด Directory Browsing

    ทำได้ 2 วิธีคือ

    • แก้ไขแฟ้ม config ของ site ที่ต้องการปิด โดยทั่วไปแฟ้มจะอยู่ที่ /etc/apache2/site-enabled/site.conf โดย site.conf คือชื่อไฟล์ที่ต้องการ โดยเพิ่มในส่วนของ Directory ของไซต์นั้น ตัวอย่างเป็น /var/www/html/aaeee ให้ทำการแก้ไขหรือเพิ่มข้อความตามตัวอย่าง ส่วนสำคัญคือ Options ต้องไม่มีคำว่า Indexes เมื่อแก้ไขเสร็จ ให้ reload หรือ restart apache2 ด้วยคำสั่ง sudo systemctl reload apache2 หรือ sudo systemctl restart apache2
    <Directory /var/www/html/aaeee>
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    • สำหรับวิธีที่สองนี้ ต้องมีการระบุ AllowOverride All ในแฟ้มของไซต์ ด้วยจึงจะใช้งานได้ (หากแก้ไขไฟล์ไซต์ของ apache2 ต้อง reload หรือ restart ด้วย) เช่น
    <Directory /var/www/html/aaeee>
            AllowOverride All
    </Directory>
    • สร้างแฟ้ม .htaccess เอาไว้ใน Directory (จากตัวอย่างนี้คือ /var/www/html/aaeee) ที่ต้องการ โดยเพิ่มข้อความข้างล่างนี้วิธีนี้ มีผลทันทีไม่ต้อง reload หรือ restart apache2
    Options -Indexes

    ปิด WordPress User Enumeration

    • ในไซต์ของ WordPress จะมีแฟ้ม .htaccess อยู่ให้เพิ่มข้อความต่อไปนี้ลงไป โดย yoursite.name คือชื่อเว็บไซต์
    #user enumeration
    RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    RewriteRule .* https://yoursite.name/? [L,R=302]
    • เมื่อทำสองอย่างแล้วให้ nessus เข้าตรวจสอบอีกครั้ง
    Nessus Scan Report
    • เย่….หายไปละ
    • จบขอให้สนุก
  • ELK #08 Oracle Audit Trail

    ต่อจา ELK #07 – Logstash คราวนี้ มาใช้งานจริง โดยใช้ ELK เพื่อเก็บ Log ของ Oracle Audit Trail

    1. Oracle Audit Trail บน Database Server เก็บ Log ในรูปแบบ XML โดยแต่ละ Event จะมี tag <AuditRecord> … </AuditRecord> คุมอยู่ ที่แตกต่างจาก Log ทั่วไปคือ ในแต่ละ Event จะมีเครื่องหมาย CRLF (การขึ้นบรรทัดใหม่) เป็นระยะ ๆ
    2. ออกแบบให้ Logstash รับข้อมูล (Input Plugin) จาก TCP Port 5515 ซึ่งต้องใช้ Codec ในการรวบ Multiline ในแต่ละ Event เข้าด้วยกัน โดยหา pattern “<AuditRecord>” เป็นจุดเริ่มต้น ส่วนบรรทัดที่ไม่เจอ Pattern ดังกล่าวนั้นการตั้งค่า negate => “true” เป็นการบอกว่า “ให้ดำเนินการต่อไป” โดยจะเอาบรรทัดที่ตามมาจากนี้ ต่อท้าย ด้วยการตั้งค่า what=> “previous”
    3. ในส่วนของ Filter Plugin จะอ่านค่าจาก “message” และ ส่งสิ่งที่ถอดจาก XML ได้ ไปยัง “doc”
    4. ในส่วของ Output Plugin จะส่งออกไปยัง ElasticSearch ที่ TCP port 9200

    ดัง Configuration ต่อไปนี้

    input {
       syslog {
          port => 5515
          codec => multiline {
               pattern => "<AuditRecord>"
               negate  => "true"
               what    => "previous"
          }
       }
    }
    filter {
       xml {
          source => "message"
          target => "doc"
       }
    }
    output {
      elasticsearch {
         hosts => ["elk.server:9200"]
      }
    }

    จากนั้น ทาง Oracle Database Server ทำการเปิด Audit Trail แล้วเขียน Log ลงไฟล์ แล้วเขียน Cron เพื่อ Netcat ไฟล์ส่งมาให้ Lostash ที่เปิด Port TCP 5515 ไว้รอรับ

    ผลที่ได้คือ

    โดยวิธีนี้ จะเป็นการนำ Log ซึ่งจากเดิมเป็น Text Format นำมาเป็น NoSQL ได้ ซึ่งจะสามารถ Query ข้อมูลได้ง่ายยิ่งขึ้น

    หวังว่าจะเป็นประโยชน์ครับ

  • อัปเดต Apache2 ให้ได้เวอร์ชั่นล่าสุดด้วย Third-Party PPA ของ ondrej

    พบว่า ubuntu 16.04 จะใช้ apache2 v 2.4.18 แม้ว่าเราจะสั่ง apt update; apt upgrade แล้วก็ตามเมื่อเช็คด้วยคำสั่ง apache2 -v จะพบว่ายังคงเป็นเวอร์ชั่น 2.4.18 เช่นเดียวกับ ubuntu 18.04 จะใช้ apache2 v 2.4.29 เท่านั้น หลังจากหาข้อมูลอยู่ทั้งวัน มีผู้ให้ข้อมูลใน google search ว่า ทีมพัฒนาจะไม่เปลี่ยนเวอร์ชั่นใน ubuntu ตาม upstream developer จนกว่าจะทดสอบและออก ubuntu next release

    หากต้องการเป็นเวอร์ชั่น 2.4.39 ณ วันนี้ (4 เม.ย. 62 หลังจากข่าวช่องโหว่ apache2 2 วัน) ก็ต้องใช้ Third-Party PPA ของ ondrej (ผู้พัฒนาคนหนึ่งที่ทำ Debian Package)

    เพิ่มเติมล่าสุด (5 เม.ย. 62) ทำใน ubuntu server อีกเครื่องที่ยังไม่ได้ทำแบบ PPA

    $ sudo apt-get update ; sudo apt-get dist-upgrade
    $ apache2 -v
    Server version: Apache/2.4.18 (Ubuntu)
    Server built: 2019-04-03T13:34:47

    $ dpkg -l | grep apache2
    ii apache2 2.4.18-2ubuntu3.10 amd64 Apache HTTP Server

    พบว่ามีการปรับปรุงเวอร์ชั่น Server built 2019-04-03 ซึ่งตามหลัง patch PPA ไม่กี่ชั่วโมง ใครยังไม่สนใจจะเปลี่ยนเป็นเวอร์ชั่น 2.4.39 ก็น่าจะไม่ต้องทำแบบ PPA ตามข้อมูลใน link นี้
    https://usn.ubuntu.com/3937-1/ และ
    https://launchpad.net/ubuntu/xenial/+source/apache2/+changelog

    ข้อควรระวัง ให้ตรวจสอบว่ามีการเข้าไปปรับแต่งไฟล์ apache2.conf ไว้หรือไม่ ต้องมีการทำ backup ไว้ก่อนอัปเดต เช่น บางท่านอาจไปเขียน Rewrite Rule ในไฟล์นี้ เป็นต้น ก็ต้องแก้ไขหลังจากอัปเดต รวมถึง Apache configuration files อื่น ๆ ที่เราใช้ เราต้องมี backup

    อย่างไรก็ตามก่อนทำอัปเดต ต้องมั่นใจว่าถ้า server เราเป็น VM ก็ต้องมีการ backup VM ไว้ก่อน จะอุ่นใจขึ้น

    sudo add-apt-repository ppa:ondrej/apache2
    sudo apt-get update
    sudo apt-get upgrade

    หลังจากอัปเดต เช็คเวอร์ชั่นด้วยคำสั่ง apache2 -v ได้เวอร์ชั่นล่าสุด

    Server version: Apache/2.4.39 (Ubuntu)
    Server built: 2019-04-02T20:30:08

    หากพบว่า ยังคงได้ version เดิม ตรวจสอบดู output จะพบว่า

    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Calculating upgrade… Done
    The following packages have been kept back:
    apache2 apache2-bin apache2-data apache2-utils libaprutil1
    libaprutil1-dbd-sqlite3 libaprutil1-ldap openssl
    0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.

    ทำคำสั่งนี้แทน

    sudo apt-get dist-upgrade
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Calculating upgrade… Done
    The following package was automatically installed and is no longer required:
    liblua5.1-0
    Use 'apt autoremove' to remove it.
    The following NEW packages will be installed:
    libbrotli1 libjansson4 liblua5.2-0 libnghttp2-14 libssl1.1
    The following packages will be upgraded:
    apache2 apache2-bin apache2-data apache2-utils libaprutil1
    libaprutil1-dbd-sqlite3 libaprutil1-ldap openssl
    8 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
    Need to get 4,628 kB of archives.
    After this operation, 6,757 kB of additional disk space will be used.
    Do you want to continue? [Y/n]

    กด Enter (เพื่อเลือก Y) แล้วจะมีการติดตั้งให้

    ตอนนี้ก็เฝ้าระวังกันต่อไปว่า หลังจากทำวิธีนี้จะมีผลกระทบอะไรตามมาในอนาคตบ้างมั้ย หวังว่าจะไม่มี เพราะพยายามหาข้อมูลว่ามีใครแจ้งปัญหาจากวิธีการนี้ก็ไม่พบ พบแต่คำแนะนำวิธีนี้

    ผมคงไม่สามารถรับประกันความปลอดภัยใด ๆ หรือผลที่ตามมาจากการทำขั้นตอนในโพสต์นี้นะครับ


    สำหรับวิธีไม่ใช้ PPA จะกลับไปใช้ของเดิม

    sudo apt-get install ppa-purge
    sudo ppa-purge ppa:ondrej/apache2

    ตรวจสอบ version ของ apache2

    apache2 -v
    dpkg -l | grep apache2

    และล้างไฟล์ใน sources.list.d

    ls -l /etc/apt/sources.list.d/
    sudo add-apt-repository --remove ppa:ondrej/apache2

    ลิงค์ที่เกี่ยวข้อง

  • การเชื่อมต่อ OAuth2 ด้วย WordPress

    อยาก  Login ด้วย OAuth2 กับ WordPress ต้องทำอย่างไร

    สำหรับตัวอย่างนี้จะทำการติดตั้งบน WordPress 5.1 ผ่าน Plugin Simple Single Sign On

    • หลังจากติดตั้ง WordPress เสร็จ เข้าหน้า Administrator แล้วทำการกด Install เพื่อเข้าไปยังหน้าติดตั้ง Extension เพิ่มเติม ทำการเพิ่มปลั๊กอินใหม่ดังรูป

    • ทำการค้นหา single sign on และทำการ Install Now

    • จากนั้นทำการกด Activate

    • จากนั้นทำการตั้งค่าโดยข้าม Step 1 ไปตั้งค่า Step 2 เนื่องจากได้มีการตั้งค่า WP OAuth Server ให้รองรับไว้อยู่แล้ว

    • หลังจากนั้นทำการทดสอบ Login โดยกดปุ่ม Single Sign On

    เพิ่งเท่านี้ก็จะสามารถใช้งานได้ แต่ยังเป็นแบบเลือกได้ว่าจะ Login แบบ Local หรือผ่าน OAuth โดยอาจจะทำเป็นปุ่มในหน้าแรกเพื่อให้กด Login ก็ได้เช่นกัน

  • การเชื่อมต่อ OAuth2 ด้วย Joomla

    อยาก  Login ด้วย OAuth2 กับ Joomla ต้องทำอย่างไร

                 สำหรับตัวอย่างนี้จะทำการติดตั้งบน Joomla 3.9.3 ผ่าน Plugin MiniOrange OAuth Client

    • หลังจากติดตั้ง Joomla เสร็จ เข้าหน้า Administrator แล้วทำการกด Install เพื่อเข้าไปยังหน้าติดตั้ง Extension เพิ่มเติม

    • หลังจากนั้นกด Add Install from Web

    • ค้นหาชื่อ oauth

    • ติดตั้ง miniOrange OAuth Client 

    • หลังจากติดตั้งเสร็จให้ทำการเปิด Plugins เพิ่มเติมดังรูป

    • จากนั้นทำการตั้งค่าโดยสำหรับ miniOrange ต้องสมัครใช้งานก่อน เพราะมีทั้งแบบฟรีและไม่ฟรี แต่เราจะใช้เฉพาะในส่วนของฟรี

    • ในการสมัครต้องใส่ email และตั้งรหัสผ่าน

    • หลังจากติดตั้ง Joomla เสร็จให้ทำการกด Install เพื่อเข้าไปยังหน้าติดตั้ง Extension เพิ่มเติม

    • จากนั้นทำการตั้งค่าเกี่ยวกับ OAuth

    • สามารถกดทดสอบการ Authen ได้ที่ปุ่ม Test Configuration

    • จะปรากฎหน้า Login เพื่อเข้าสู่ระบบ

     

    •  

    • หลังจาก Login เสร็จจะคืนค่า User Profile ดังรูป

              ในการเอาไปใช้งานต่อให้ทำการสร้างปุ่ม ชี้ไปยัง http://localhost/joomla/?morequest=oauthredirect&app_name=other เพื่อเข้าใช้งาน OAuth ลองไปทำต่อดูครับ

  • ทดสอบเชื่อมต่อ OAuth2 ด้วย Postman

    ต้องการทดสอบใช้งาน OAuth2 แต่ยังไม่รู้เลยว่าต้องทำยังไง

                 ถ้าต้องการทดสอบเบื้องต้นว่า OAuth2 ใช้งานอย่างไร หรือต้องการทดสอบอะไรบางอย่างก็สามารถใช้  Postman ทดสอบได้เลยครับ โดยไม่ต้องเขียนโปรแกรม ซึ่งก่อนอื่นต้องทำการติดตั้งโปรแกรมให้เรียบร้อยก่อนจาก Link : https://sysadmin.psu.ac.th/2017/04/23/postman

    •  ตัวอย่างการเชื่อมต่อแบบ Authorization Code

    • จากนั้นทำการกรอกรายละเอียด ซึ่งรายละเอียดทางผู้ดูแลจะแจ้งให้ทราบเมื่อขอเปิดใช้บริการ

    • จากนั้นจะปรากฎหน้าให้ Login เข้าสู่ระบบ
    • หลังจาก Login ก็จะปรากฎหน้า Token นำไปใช้ขอบริการข้อมูล
    • จะได้ access_token ไปใช้งาน โดยจากตัวอย่างจะเห็นว่ามีระยะเวลาหมดอายุ 3600 วินาที หรือ 1 ชม.นั่นเอง ส่วนคำว่า bearer เป็นชนิดของ Token ซึ่งชนิดมีผลต่อรูปแบบความปลอดภัยที่แตกต่างกัน ซึ่งจะไม่ได้กล่าวถึงรายละเอียด ลองไปศึกษาดูครับ


    ในส่วนของ OAuth2 แบบอื่น ๆ ศึกษาเพิ่มเติมได้จาก https://sysadmin.psu.ac.th/2017/04/23/what-is-oauth2/ รวมถึงตัวอย่างการเชื่อมต่อ OAuth2 กับ UserGrid ได้ที่ https://sysadmin.psu.ac.th/2017/04/19/auth-role-usergrid/

    ======================

    References :

    [1] https://sysadmin.psu.ac.th/2017/04/23/postman

    [2] https://sysadmin.psu.ac.th/2017/04/23/what-is-oauth2/

    [3] https://sysadmin.psu.ac.th/2017/04/19/auth-role-usergrid/