Category: Operating System

  • Regular Expression สำหรับ Email Address Validation

    หา valid email address

    ^(?!\b[a-zA-Z0-9._-]+@ [a-zA-Z0-9_.-]+\.[a-zA-Z0-9]{2,}\b).*$

    หาก invalid email address

    ^(?=\b[a-zA-Z0-9._-]+@ [a-zA-Z0-9_.-]+\.[a-zA-Z0-9]{2,}\b).*$
  • อยากรู้ว่า Windows 10 Firewall Inbound Rules เปิดหรือปิด SMBv1, SMBv2 หรือไม่

    อยากรู้ว่า Windows 10 Firewall Inbound Rules เปิดหรือปิด SMBv1, SMBv2 หรือไม่

    ทดสอบจากเครื่อง Linux ที่ตั้งอยู่ใน network เดียวกัน ทำ nmap ค้นหา SMB (TCP Port 445) ไปที่เครื่อง Windows IP 192.168.x.yy

     

    ครั้งที่ 1
    รายการ File and Printer Sharing (SMB-In) ใน Firewall Inbound Rules เมื่อตั้งค่า Enabled = No
    ผลลัพธ์
    $ nmap -A -T4 -Pn -p445 192.168.x.yy
    Starting Nmap 7.01 ( https://nmap.org ) at 2017-05-15 13:52 ICT
    Nmap scan report for 192.168.x.yy
    Host is up.
    PORT STATE SERVICE VERSION
    445/tcp filtered microsoft-ds
    Nmap done: 1 IP address (1 host up) scanned in 2.39 seconds

    ครั้งที่ 2
    รายการ File and Printer Sharing (SMB-In) ใน Firewall Inbound Rules เมื่อตั้งค่า Enabled = Yes
    ผลลัพธ์
    $ nmap -A -T4 -Pn -p445 192.168.x.yy
    Starting Nmap 7.01 ( https://nmap.org ) at 2017-05-15 13:55 ICT
    Nmap scan report for 192.168.x.yy
    Host is up (0.00048s latency).
    PORT STATE SERVICE VERSION
    445/tcp open microsoft-ds Microsoft Windows 10 microsoft-ds
    Service Info: OS: Windows 10; CPE: cpe:/o:microsoft:windows_10
    Host script results:
    | smb-security-mode:
    | account_used: guest
    | authentication_level: user
    | challenge_response: supported
    |_ message_signing: disabled (dangerous, but default)
    |_smbv2-enabled: Server supports SMBv2 protocol
    Nmap done: 1 IP address (1 host up) scanned in 47.82 seconds

    ครั้งที่ 3
    รายการ File and Printer Sharing (SMB-In) ใน Firewall Inbound Rules เมื่อตั้งค่า Enabled = Yes
    และ
    ได้ปิด SMBv1 ตามคำแนะนำ เรื่อง “วิธีปิด SMBv1 เพื่อป้องกันตัวเองจากมัลแวร์เรียกค่าไถ่ WannaCry (ทำเถอะ ไม่ถึง 5 นาที)” https://www.blognone.com/node/92410
    ผลลัพธ์
    $ nmap -A -T4 -Pn -p445 192.168.x.yy
    Starting Nmap 7.01 ( https://nmap.org ) at 2017-05-15 13:55 ICT
    Nmap scan report for 192.168.x.yy
    Host is up (0.00051s latency).
    PORT STATE SERVICE VERSION
    445/tcp open microsoft-ds?
    Host script results:
    |_smbv2-enabled: Server supports SMBv2 protocol
    Nmap done: 1 IP address (1 host up) scanned in 47.87 seconds
    จากผลลัพธ์ในครั้งที่ 3 จะมีเพียง SMBv2

    สรุปว่า รายการ File and Printer Sharing (SMB-In) ใน Windows 10 Firewall Inbound Rules นั้นหากตรวจดูพบว่าคอลัมน์ Enabled มีค่า No ก็คือ ไม่ได้อนุญาตการเข้าถึง

    ในตัวอย่างนี้ก็คือไม่อนุญาตการเข้าถึง SMB (TCP Port 445) ซึ่งเป็นช่องทางเข้าโจมตีจาก Ransomware ที่ชื่อ WannaCrypt (บางทีเรียกย่อ ๆ ว่า WannaCry)

  • TODO: สำหรับผู้ใช้ Microsoft Windows เพื่อป้องกัน Wana Decrypt0r Ransomware

    สิ่งที่ต้องทำ สำหรับ ผู้ใช้ Microsoft Windows

    และ สำหรับผู้ดูแลระบบของหน่วยงาน

    1. Backup หรือ สำรองข้อมูลสำคัญ ไว้ใน External Harddisk, USB Drive, Cloud Drive
    2. กรณี Windows Vista, Windows XP, Windows 8
      ให้ไปที่ Website นี้ เพื่อ Download ตัว Update ที่ตรงกับ Windows ของตน มาติดตั้ง (MS17-101 หรือ KB4012598)
      http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012598
    3. กรณี Windows 7
      http://www.catalog.update.microsoft.com/search.aspx?q=4012212
    4. กรณี Windows 8.1
      http://catalog.update.microsoft.com/v7/site/search.aspx?q=4012213
    5. กรณี Windows 10
      Start > พิมพ์ Windows Update

    สำหรับคนที่ยังใช้ Windows XP ควรพิจารณา Upgrade มาเป็น Windows 10

    โดยติดตั้ง Microsoft Windows รุ่นล่าสุดของมหาวิทยาลัยสงขลานครินทร์

    (ต้องมี PSU Passport)ได้ที่
    https://licensing.psu.ac.th/windows-10-education-version-1703-updated-march-2017-microsoft-imagine/

     

    ขอให้โชคดี

     

  • COMODO Certificates บรรทัดที่หายไปใน Google Chrome บน Ubuntu

    ผมทำ Zeroshell Firewall สำหรับเป็น network authentication หลังจากผม setup ส่วนที่เกี่ยวกับ Certificate ที่จะใช้กับ https ผมได้ import COMODO Certificates (ที่มหาวิทยาลัยใช้บริการ)

    เมื่อทดสอบการใช้งาน เข้าโปรแกรม Firefox บน Ubuntu เมื่อผู้ใช้ใส่ URL เพื่อไปเว็บไซต์ใด ๆ จะพบกับหน้า network authentication และ https ถูกต้อง (เป็นสีเขียว) แต่เมื่อเปิดด้วย Google Chrome จะพบว่า https จะไม่ถูกต้อง (เป็นขีด / สีแดง) ทำไมจึงเป็นเช่นนั้น

    เปิดเข้าไปดูรายการ Certificates ที่อยู่ใน Browser Firefox เทียบกับ Google Chrome ก็พบว่ามีความแตกต่างต่างกันที่บรรทัด คือ COMODO RSA Domain Validation Secure Server CA ดังนี้

    รูปข้างล่างนี้เป็นรายการ Certificates ของ COMODO ใน Firefox บน Ubuntu 16.04 ซึ่ง มี บรรทัดที่ว่านี้

    รูปข้างล่างนี้เป็นรายการ Certificates ของ Comodo ใน Google Chrome บน Ubuntu 16.04 ซึ่ง ไม่มี

    รูปข้างล่างนี้เป็นรายการ Certificates ของ COMODO ใน Google Chrome for Windows 10 ซึ่ง มี บรรทัดดังกล่าวอยู่ในแท็บ Intermediate Certification Authorities ซึ่งผมพบว่ารายการมันจะเกิดขึ้นหลังจากเคยไปเว็บไซต์ใด ๆ ที่ติดตั้ง COMODO Certs ไว้

    ผมก็ไป export “COMODO RSA Domain Validation Secure Server CA” จาก Firefox แล้วนำไป import ใน Google Chrome บน Ubuntu 16.04 เพื่อทดสอบว่ามันเกี่ยวกันมั้ย มันเกี่ยวกันจริง ๆ ด้วย แต่ผมไม่รู้ว่าทำไมจึงเป็นเช่นนั้น จึงต้องการจะบันทึกไว้ เผื่อใครที่รู้จะมาช่วยอธิบาย

    ในหน้า Login นั้น สัญลักษณ์ https แสดงเป็นสีเขียว ถูกต้องได้ ตามรูป

    ใครรู้มาเฉลยที

    เพิ่มเติมท่อนข้างล่างนี้เมื่อ 11 พ.ค. 60 ครับ

    ตอนนี้ผมได้คำตอบมาอัปเดตแล้วครับ จากที่ได้ความช่วยเหลือจากคุณพรพิทักษ์ สันติภาพถาวร ผู้ดูแล PSU CERTS เราพบว่าในหน้าคอนฟิกของ Zeroshell นั้น ในเมนู Captive Portal X.509 Authentication นั้นหลังจากเรา import #1 Trusted CA จากไฟล์ STAR_psu_ac_th.ca-bundle ดังรูป

    แล้วเราจะได้บรรทัด COMODO RSA Domain Validation Secure Server CA เพิ่มขึ้นมา ดังรูป

    และ #2 Imported Certificates and Keys ด้วยไฟล์ STAR_psu_ac_th.crt และ STAR_psu_ac_th_nopass.key ดังรูป

    แล้วเราจะได้บรรทัด OU=Domain Control Validated, OU=PositiveSSL Wildcard, CN=*.psu.ac.th มาดังรูป

    จากนั้น เราจะต้องไปคลิกตัวเลือก Authentication เพื่อ เลือก Allow the X.509 login with the certificates signed by the following Trusted CAs: ด้วย COMODO RSA Domain Validation Secure Server CA ดังรูป

    สรุปว่าผมยังตั้งค่าไม่ครบถ้วนนั่นเอง คือ ขาดการตั้งค่าเรื่อง Authentication นี่เองว่าให้อนุญาตการ login ด้วย certificate ที่ signed โดย Trusted CAs ที่เรา import เข้าไปนั่นเอง

    ขอให้บทความนี้มีประโยชน์ สร้างความเข้าใจ และ เป็นการบันทึกไว้ว่า หากเรานำ PSU CERTs ไปติดตั้งทำเป็น Captive Portal ในระดับคณะ ก็สามารถทำได้โดยอาจจะนำบทความนี้ไปเป็นตัวอย่างประกอบครับ

  • วิธีสร้าง CoreOS Cluster

    จะสร้าง CoreOS ให้กลายเป็น Cluster Docker Container ได้อย่างไร

                 จากบทความที่แล้วที่แนะนำเกี่ยวกับ CoreOS และการติดตั้งบน Vmware[1] ไปแล้วนั้น เราก็สามารถสร้างให้เป็นในรูปแบบ Cluster ได้ โดยมองว่าเครื่องแต่ละเครื่องที่สร้างนั้นเป็น Node หนึ่ง ๆ ใน Cluster โดยใช้ etcd เป็นตัวเก็บข้อมูลของ Node และ Fleet เป็นตัว Deploy docker ให้กระจายไปยัง Node ต่าง ๆ อย่างเหมาะสม โดยที่จะสามารถย้ายตัวเองได้เมื่อมีเครื่องใดเครื่องหนึ่งมีปัญหา (Recommend จำนวนเลขคี่ และอย่างต่ำต้อง 3 node ขึ้นไป ยิ่งเยอะ โอกาสล่มก็ยิ่งต่ำ)


                etcd ในปัจจุบันเป็น Version 3 ซึ่งจะมีประสิทธิภาพเพิ่มขึ้นจาก Version 2 (แต่ใน document web ยังเป็น etcd2 เป็นส่วนมาก) โดยใช้สำหรับเก็บข้อมูลแต่ละ Node ทำให้รู้ว่าในแต่ละ Cluster มีเครื่องใด IP อะไรบ้าง มีทั้งหมด 3 วิธีคือ 

    1. Static เป็นวิธีที่ระบุลงไปเลยในแต่ละเครื่องว่ามีเครื่องไหนบ้างที่อยู่ใน Cluster วิธีการนี้ข้อเสียคือถ้าเพิ่มต้องเพิ่มทุกเครื่อง
    2. etcd Discovery เป็นวิธีที่จะให้ Discovery Service เป็นคนทำหน้าที่เก็บข้อมูล (เหมือน tracker torrent) เมื่อเพิ่มเครื่องใหม่ ก็แค่ชี้ไป Discovery URL ก็เสร็จ
    3. DNS Discovery เป็นวิธีการใช้วิธีการจด DNS ในรูปแบบ SRV record เพื่อบอกว่า บริการนี้มีเครื่องอะไรอยู่บ้าง ซึ่งจะมีการอ้างอิงอยู่กับ Domain Name โดยวิธีนี้จำเป็นต้องจดชื่อ Domain ทุกเครื่อง

                ในบทความนี้จะอธิบายวิธีที่ 1 ซึ่งแม้ยุ่งยาก แต่เหมาะกับระบบที่ Internet Public ไม่ค่อยเสถียร และ ถ้าใครต้องการลองวิธีอื่นสามารถตามอ่านได้ใน Web CoreOS[2] ครับ

      วิธีการตั้งค่า etcd2

    • ทำการสร้าง service etcd2 service ด้วย systemd ดังนี้
      sudo vim /etc/systemd/system/etcd2.service
    • ข้อความในไฟล์มีดังนี้ (ถ้าต้องการความปลอดภัยสามารถใช้ https ได้ครับ แต่ต้องมีการทำ certificate เพิ่มเติม ซึ่งไม่ขออธิบายครับ)
      [Unit]
      Description=etcd2
      Conflicts=etcd.service
      
      [Service]
      User=etcd
      Type=notify
      Environment=ETCD_DATA_DIR=/var/lib/etcd
      ExecStart=/usr/bin/etcd2 --name node01 --initial-advertise-peer-urls http://[IP]:2380 \
       --listen-peer-urls http://[IP]:2380 \
       --listen-client-urls http://[IP]:2379,http://127.0.0.1:2379 \
       --advertise-client-urls http://[IP]:2379 \
       --initial-cluster-token etcd-cluster-1 \
       --initial-cluster node01=http://[IP_node01]:2380,node02=http://[IP_node02]:2380,node03=http://[IP_node03]:2380 \
       --initial-cluster-state new
      
      Restart=always
      RestartSec=10s
      LimitNOFILE=40000
      TimeoutStartSec=0
      
      [Install]
      WantedBy=multi-user.target
      
    • Enable etcd2 service เพื่อให้รันทุกครั้งที่เปิดเครื่อง
      sudo systemctl enable etcd2
    • Start etcd2 service
      sudo systemctl start etcd2
    • ตรวจดูสถานะการทำงานของ etcd2 service
      sudo systemctl status etcd2
    • เราสามารถดูข้อมูลสมาชิกได้ดังนี้
      etcdctl member list

     วิธีการตั้งค่า Fleet

    • ทำการสร้าง service fleet โดยการตั้งค่าใน systemd ดังนี้
      sudo vim /etc/systemd/system/fleet.service
    • ข้อความในไฟล์มีดังนี้ (จะเห็นว่า config ตั้งค่าให้ Start หลัง etcd2)
      [Unit]
      Description=fleet daemon
      
      After=etcd2.service
      
      Wants=fleet.socket
      After=fleet.socket
      
      [Service]
      User=fleet
      Environment=GOMAXPROCS=1
      Environment="FLEET_PUBLIC_IP=[IP]"
      ExecStart=/usr/bin/fleetd
      Restart=always
      RestartSec=10s
      
      [Install]
      WantedBy=multi-user.target
    • Enable fleet service เพื่อให้รันทุกครั้งที่เปิดเครื่อง
      sudo systemctl enable fleet
    • Start fleet service
      sudo systemctl start fleet
    • ตรวจดูสถานะการทำงานของ fleet service
      sudo systemctl status fleet
    • วิธีตรวจดูสถานะแต่ละ Node ทำได้ดังนี้
      fleetctl list-machines
    • จะได้ผลลัพธ์หน้าตาประมาณนี้ครับ

           ให้ทำการติดตั้งไปเรื่อย ๆ ทั้ง CoreOS->Etcd2->Fleet จนครบ 3 เครื่อง หรือ 5,7,9 เครื่องแล้วแต่จะต้องการว่าจะสร้างกี่ Node ครับ ยกตัวอย่างถ้าครบ 3 เครื่องก็จะได้ประมาณนี้ครับ

    ทดสอบการสร้าง WordPress ผ่าน Fleet[3]

    • วิธีการทำแน่นอนครับ หนีไม่พ้นไฟล์รูปแบบ systemd (อีกแล้ว) แต่ไม่ต้องรันด้วย systemctl นะครับ ทำที่เครื่องใดเครื่องหนึ่ง สร้างที่ /home/core ก็ได้ดังนี้
    • ก่อนอื่นต้องติดตั้ง docker mysql โดยสร้างไฟล์ mysql.service ดังนี้
      vim mysql.service
    • ข้อความในไฟล์ประมาณนี้ครับ
      [Unit]
      Description=MySQL DataBase
      After=etcd.service
      After=docker.service
      
      [Service]
      TimeoutStartSec=0
      ExecStartPre=-/usr/bin/docker kill mysql
      ExecStartPre=-/usr/bin/docker rm mysql
      ExecStartPre=/usr/bin/docker pull mysql:5.7
      ExecStart=/usr/bin/docker run --name mysql -e MYSQL_ROOT_PASSWORD="wordpress" -e MYSQL_DATABASE="wordpress" -e MYSQL_USER="wordpress" -e MYSQL_PASSWORD="wordpress" mysql:5.7
      ExecStop=/usr/bin/docker stop mysql
    • สร้างไฟล์ wordpress.service ดังนี้
      vim wordpress.service
    • ข้อความในไฟล์ประมาณนี้ครับ
      [Unit]
      Description=WordPress
      After=mysql.service
      
      [Service]
      TimeoutStartSec=0
      ExecStartPre=-/usr/bin/docker kill wordpress
      ExecStartPre=-/usr/bin/docker rm wordpress
      ExecStartPre=/usr/bin/docker pull wordpress
      ExecStart=/usr/bin/docker run --name wordpress --link mysql -p 8880:80 -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=wordpress wordpress
      ExecStop=/usr/bin/docker stop wordpress
      
      [X-Fleet]
      X-ConditionMachineOf=mysql.service
    • สั่ง Start mysql service ด้วย fleetctl ดังนี้
      fleetctl start mysql.service

    • สั่ง Start wordpress service ด้วย fleetctl ดังนี้
      fleetctl start wordpress.service

    • สั่งคำสั่งเพื่อตรวจสอบสถานะดังนี้ (ซึ่งจะบอกว่าติดตั้งที่ Node ใด และสถานะการใช้งาน หรือการติดตั้งเป็นอย่างไร)
      fleetctl list-units

    • เสร็จแล้วลองสั่ง fleetctl list-units ที่ Node อื่น ๆ ดูครับก็จะได้ผลลัพธ์เหมือน ๆ กัน
    • ก็จะได้ web wordpress เอาไว้ใช้งานแล้ว
    • จากนั้นทดสอบลองปิด Node ดูครับ สำหรับระบบที่มี 3 Node พังได้แค่ Node เดียวครับ ถ้าอยากได้มากกว่านั้นต้องเพิ่มจำนวน Node ขึ้นไป 
    • จะพบว่าเครื่องจะย้ายไป Start อีก Node ทันที (มันจะสั่ง start ใหม่นะครับ ไม่ได้ย้ายไปแบบ vmware) เท่าที่ทดสอบข้อมูลไม่ได้มาด้วยครับ อีกทั้งยังได้ ip ที่เครื่องใหม่ เพราะฉะนั้นต้องหาวิธีทำ map volume และ proxy web เอาเองครับ

    (Optional) วิธีการ Fix IP แทน DHCP

    • ในกรณีที่ต้องการ Fix IP แทน DHCP ให้เข้าไปสร้าง systemd network config โดยสร้างไฟล์ดังนี้
      sudo vim /etc/systemd/network/static.network
    • ข้อความในไฟล์ประมาณนี้ครับ
      [Match]
      Name=[Interface Name]
      
      [Network]
      Address=[IP/Mask]
      Gateway=[IP Gateway]
      DNS=[DNS IP มีหลาย IP ให้เว้นวรรค เช่น 10.0.0.1 10.0.0.2]
    • จากนั้นให้ทำการ Restart เครื่อง (จริง ๆ restart service ก็น่าจะได้ แต่ลองแล้วไม่ได้ครับ)

                 สำหรับ CoreOS Cluster ก็มีเท่านี้ครับ แต่จะเห็นว่ายังขาด Docker Management ที่เป็น GUI รวมถึง Docker Gateway และระบบ Storage ติดตามในตอนต่อ ๆ ไปแล้วกันครับ

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

    Reference :

    [1] มารู้จักกับ CoreOS Linux และวิธีติดตั้ง CoreOS Linux บน Vmware : https://sysadmin.psu.ac.th/2017/05/03/coreos-linux-install-vmware/

    [2] CoreOS Clustering Guide : https://coreos.com/etcd/docs/latest/op-guide/clustering.html#etcd-discovery

    [3] Deploy WordPress in CoreOS Cluster using Fleet : https://wenfeng-gao.github.io/2016/06/03/deploy-wordpress-in-coreos-cluster-using-fleet.html

  • มารู้จักกับ CoreOS Linux และวิธีติดตั้ง CoreOS Linux บน Vmware

    CoreOS Linux คืออะไร เอาไปใช้ทำอะไร

                 ในโลกของ Containner ในปัจจุบันมีหลายตัวเลือกให้ใช้งาน แต่การใช้งานที่สมบูรณ์จำเป็นต้องมี 3 อย่างรวมกันคือ Containner (ยกตัวอย่าง Docker,Rocket,Lxd), OS ขนาดเล็ก (ยกตัวอย่าง CoreOS, RancherOS, PhotonOS, Snappy Ubuntu Core, Redhat Project Atomic), และสุดท้ายคือโปรแกรมบริหารจัดการ Containner (ยกตัวอย่าง Kubernete, Admiral, Rancher, Kitematic)

                 สำหรับ CoreOS[1] เองรองรับการงานทั้งใน Cloud(AWS,Digital Ocean,Azure,Google Cloud Platform) หรือใน Virtualization Platform (ยกตัวอย่าง OpenStack, VMWare, Vagrant) และยังสามารถติดตั้งลงบนเครื่อง Physical (Bare Metal) ได้อีกด้วย
                 CoreOS มีจุดเด่นอีกอย่างคือระบบ CoreOS Cluster[2] ที่สามารถออกแบบเป็น Cluster ช่วยให้สามารถบริการ Docker Containner กระจายไปยัง Node ต่าง ๆ โดยใช้ etcd ในการจัดการระบบและใช้ fleet ในการสร้าง Docker ที่อยู่บน CoreOS Cluster ซึ่งจะกล่าวต่อไปในบทความต่อไปครับ


                 การติดตั้ง ติดตั้งได้หลากหลายช่องทาง เขียนแผ่นติดตั้งก็ได้ ผ่าน iso ก็ได้ แต่ถ้าเป็น Image จะไม่มี User (จริง ๆ มีแต่ไม่มี Password) ต้องสร้างด้วยสิ่งที่เรียกว่า cloud-config ซึ่งจำเป็นต้องตั้งค่าก่อนติดตั้ง หรืออีกแบบที่จะขอแนะนำ เป็นวิธีที่ใช้สำหรับ Image ที่เป็น ova ของ Vmware ซึ่งใช้วิธี Bypass เข้า Auto Login Mode[1] แล้วเข้าไป Add User เอาเองภายหลัง (สามารถนำไปประยุกต์กับวิธีติดตั้ง Image แบบอื่นได้เช่นเดียวกัน) 

    การติดตั้ง CoreOS ด้วย OVA Image ผ่าน vSphere Client 6.0[3]

    • โหลดไฟล์ติดตั้งจาก https://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_ova.ova
      (ุถ้า Link เปลี่ยนไปหาดูเอาเองนะครับ)
    • เปิด vSphere Client เลือก deploy OVF Template จากนั้นทำการ Browse File เลือกเครื่อง เลือก DataStore ตามปกติ

     

    • เมื่อถึงหน้าตั้งค่าใส่ Hostname และการตั้งค่า Network เบื้องต้น (ในที่นี้ผมใส่แค่ Hostname และ ชื่อ Network Interface โดยรับ IP จาก DHCP)


    • จากนั้นเมื่อสร้างเสร็จและเปิดเครื่องขึ้นมารีบกดปุ่มลูกศรลงในหน้า Grub ป้องกัน Auto Boot (เร็วมาก ถ้าไม่ทันก็ให้รีเครื่องใหม่)

    • จากนั้นให้เลือก CoreOS default แล้วกด e และพิมพ์ coreos.autologin (ไม่ต้องพิมพ์ \ ก่อนขึ้นบรรทัดใหม่ ระบบจะใส่ให้เอง)

    • จากนั้นกด F10 ก็จะทำการ Boot และ ได้ Prompt สำหรับ adduser ตั้งรหัสผ่านได้เลย ซึ่งจริง ๆ แล้วจะมี User ตั้งต้นอยู่แล้วชื่อ core จะตั้งเฉพาะรหัสผ่าน core ก็ได้เช่นเดียวกัน)
    • ทดสอบ Login จาก ssh เครื่องอื่น ก็จะสามารถใช้งานได้แล้ว

               ตอนต่อไปจะมาดูกันว่าเราจะสร้าง CoreOS Cluster ได้อย่างไร….

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

    Reference :

    [1] มาเล่น CoreOS กัน : http://thaiopensource.org/%E0%B8%A1%E0%B8%B2%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99-coreos-%E0%B8%81%E0%B8%B1%E0%B8%99/

    [2] CoreOS Cluster บน DigitalOcean : http://thaiopensource.org/tag/coreos/

    [3] How-To Install and Configure CoreOS OVA Image on ESXi : https://www.vladan.fr/how-to-install-and-configure-coreos-ova-image-on-esxi/

  • pGina fork 3.2.4.1 configuration

    ในตอนที่แล้วได้พูดถึงว่า pGina fork คืออะไรไปแล้ว ในครั้งนี้จะพูดถึงการตั้งค่าสำหรับทำเป็น Windows Authentication ในเครื่องคอมที่เป็น Windows 10 ผมได้ทำ screen capture มาเฉพาะที่ผมได้ใช้งาน ซึ่งก็คือ Local Machine, RADIUS plugin, Single User plugin และ LDAP plugin ครับ ตามดูกันมานะครับ

    หน้าแรกคือแท็บ General จะแสดงให้เห็นว่าโปรแกรมพร้อมทำงาน ให้ดูที่ข้อความที่แสดงเป็นสีเขียวใต้ข้อความ pGina Service status

    และตัวเลือกที่ผมเลือกใช้คือ Use original username to unlock computer (เพราะว่าผมจะใช้ Single User plugin ร่วมด้วย)

    แท็บถัดไปคือ แท็บ Plugin Selection อันแรกที่จะใช้คือ Local Machine คือ user ที่สร้างขึ้นภายใน Windows นั่นเอง สังเกตจะมีตัวเลือกที่ Authentication และ Gateway

    แก้ไขรูปภาพ Local Machine Plugin ต้อง ติ๊ก Notification ด้วย จึงจะมีผลกับ option Remove account and profile after logout

    จากนั้นให้คลิกปุ่ม Configure จะได้ค่าดีฟอลต์ ดังรูปข้างล่างนี้

    ผมจะใช้ค่าตัวเลือก Remove account and profile after logout when account does not exist prior to logon เพื่อที่ไม่ต้องเก็บ user profile ที่เป็น user จาก user database ภายนอก เช่น จาก RADIUS server เป็นต้น และ หากต้องการให้ user นั้นมีสิทธิมากกว่า User ทั่วไป ก็ตั้ง Mandatory Group เช่น ตั้งเป็น Administrators เป็นต้น

    ต่อไปก็มาถึง RADIUS plugin เลือก Authentication และ Notification จากนั้นคลิกปุ่ม Configure

    จะได้ค่าดีฟอลต์ ดังรูป

    ผมจะเลือกใช้และใส่ค่าต่าง ๆ เหล่านี้ครับ

    เลือก Enable Authentication เพื่อสอบถาม username/password

    เลือก Enable Accounting เพื่อส่งข้อมูลบันทึกค่า Acct-Status-Type ไปยัง RADIUS Server

    แล้วระบุ Server IP และ Shared Secret ที่จะต้องตรงกันกับที่ระบุอยู่ใน config ที่ RADIUS server เช่น FreeRADIUS จะอยู่ในไฟล์ /etc/freeradius/clients.conf เป็นต้น

    (13 ก.ค. 2561) เลือก Called-Station-ID ด้วย หากต้องการเลข MAC Address เก็บด้วยนอกจากเก็บ IP

    (10 ก.ค. 2561) พบว่าจำเป็นต้องเลือก Accounting Options หัวข้อ Send Interim Updates เพื่อให้มีการส่งค่า accounting ได้ (โดยใช้ค่า Send update every 900 seconds ตามที่เป็นค่า default)

    แล้วระบุ IP Address Suggestion เช่น 192.168.1. หมายถึงระบุว่าจะใช้ข้อมูลของ network นี้ เพราะว่าในเครื่องอาจมีการติดตั้งซอฟต์แวร์ที่จำลอง network interface เพิ่มขึ้นมาอีกอัน เป็นต้น

    ส่วนค่าอื่น ๆ ปล่อยไว้ตามเดิม

    ต่อไปก็เป็น Single User plugin ที่เราจะใช้เพื่อให้เป็น Windows User Profile หลักของ user ทุกคนที่มาจาก RADIUS plugin หรือ LDAP plugin จะทำให้เมื่อเป็น User ที่ไม่เคยเข้าใช้เครื่องนี้มาก่อน จะเข้าได้อย่างรวดเร็วกว่าการที่จะให้ Windows สร้าง new user profile

    ให้คลิกที่ Gateway แล้วคลิกปุ่ม Configure จะได้ค่าดีฟอลต์ ดังรูป

    ให้ใส่ Username ที่ได้สร้างไว้ใน Windows ตัวอย่างเช่น ผมสร้าง user ชื่อ labuser ไว้ มี password คือ 123456 เป็นต้น ตรงค่า Domain ไม่ได้แก้ไข แล้วไปลอกตัวเลข RADIUS plugin (หากใช้) หรือ LDAP plugin (หากใช้) มาใส่ โดยให้คลิกเลือก Only substute if any แล้วคลิกช่องว่าง เพื่อวางตัวเลข ดังรูป

    ถัดไปคือแท็บ Plugin Order ผมไม่ได้แก้ไขใด ๆ คงค่าเดิมไว้

    ตอนนี้ก็ได้เวลาทดสอบด้วยแท็บ Simulation

    ทดสอบใส่ username และ password มันจะตรวจสอบ ทุก ๆ plugin ที่มี แล้วแสดงค่าสุดท้าย(ในช่องด้านขวา) Final User Data ที่ใช้ในการเข้าใช้ Windows หากได้ผลลัพธ์แบบนี้ ก็ถือได้ว่า ถูกต้อง

    หรือแบบนี้ก็ถูกต้อง แม้ว่าจะมีข้อความบนแถบสีแดงในบรรทัด Local Machine plugin และเป็นค่า False ก็แสดงว่า user คนนี้ไม่เคยเข้าใช้เครื่องนี้มาก่อน 

    แต่หากเราจะเลือกใช้ LDAP plugin แทน RADIUS plugin ก็กลับไปที่แท็บ Plugin Selection แล้วเลือก LDAP plugin และคลิกเลือก Authentication อย่างเดียว จากนั้นคลิกปุ่ม Configure จะได้ค่าดีฟอลต์ ดังรูป

    ที่ผมทดสอบใช้งานกับ LDAPS ที่ติดตั้งไว้ที่เครื่อง Microsoft AD ผมใส่ค่าในช่องต่าง ๆ ดังรูป

    LDAP Host(s) ใส่ได้มากกว่า 1 ชื่อ เว้นช่องว่างระหว่างชื่อ

    LDAP Post ใช้ 636 และเลือก Use SSL

    สำหรับ Search DN และ Search Password จะได้จากผู้ดูแล Microsoft AD ของหน่วยงานให้กับเรามาครับ

    ไม่เลือก Allow Empty Passwords

    เลือก Search for DN และใส่ค่าในช่อง Search Filter และ Search Context(s) ตามข้อมูลที่ได้รับจากผู้ดูแล Microsoft AD ของท่าน

    แล้วหากต้องการใช้ Single User plugin ด้วยก็ให้นำ UID ของ LDAP plugin (ดูที่แท็บ Plugin Selection ที่คอลัมน์ขวาสุดของรายการ LDAP plugin) ไปคีย์ใส่ในช่องว่างใน Single User plugin ด้วย

    นอกจากนี้ เราจะต้องใช้โปรแกรมประเภท System Restore เพื่อคืนค่ากลับเหมือนเดิม เมื่อ User ได้ Logout/Shutdown ไปแล้ว เพื่อป้องกันมิให้ระบบ Windows เปลี่ยนแปลงจากการใช้งานของ User คนก่อนหน้า

    คิดว่าคงจะได้นำไปใช้งานกันนะครับ

    เพิ่มเติมเนื้อหา

    คัดลอกเนื้อหามาจากเพจเดิม เรื่อง การตั้งค่า pGina และ FreeRADIUS เพื่อส่งค่า RADIUS Accounting ไปยัง Firewall ของมหาวิทยาลัย

    FreeRADIUS Version 2.2.8 แก้ไขไฟล์ /etc/freeradius/proxy.conf อาจด้วยคำสั่ง vi หรือ nano ตามชอบ

    FreeRADIUS Version 3.0.16 แก้ไขไฟล์ /etc/freeradius/3.0/proxy.conf

    เพื่อให้มีค่า realm NULL (ประมาณบรรทัดที่ 672) ที่กำหนดค่า Accounting Port เพียงอย่างเดียวส่งไปยังเครื่อง Firewall

    pgina06
    รูปก่อนแก้ไข

    pgina07
    รูปหลังแก้ไข

    ในรูปตัวอย่างเครื่อง Firewall คือ radius.hatyai.psu.ac.th และต้องรู้ค่า secret ที่ตั้งเพื่อใช้สำหรับเครื่อง FreeRADIUS และ Firewall ในที่นี้คือ yoursecret (อันนี้ต้องมีการติดต่อกับ network administrator ของมหาวิทยาลัยเพื่อร่วมกันตั้งค่านี้)

    และแก้ไขอีกแฟ้มคือ

    FreeRADIUS Version 2.2.8 แก้ไขที่แฟ้ม /etc/freeradius/sites-available/default
    FreeRADIUS Version 3.0.16 แก้ไขที่แฟ้ม /etc/freeradius/3.0/sites-available/default

    ประมาณบรรทัดที่ 325 Pre-accounting ใน module ชื่อ preacct

    preacct {
                   preprocess
                   เพิ่ม
    }

    หากยังไม่มีบรรทัดเหล่านี้ ให้เพิ่มด้วยต่อท้ายบรรทัด preprocess

    # append update for pGina no attribute Framed-IP-Address
    if (NAS-IP-Address != 127.0.0.1) {
           update request {
                 Framed-IP-Address = "%{NAS-IP-Address}"
           }
    }

    แล้ว restart FreeRADIUS ใหม่

    pgina08
    sudo service freeradius stop
    sudo service freeradius start

    จากนั้นรอให้ทางฝั่งผู้ดูแล Firewall ตั้งค่าโปรแกรมที่ดึงข้อมูลที่ FreeRADIUS ของเราส่งไปนำไปใส่ใน Firewall Rule อนุญาตเครื่องไคลเอ็นต์ไม่ต้อง login ซ้ำ

  • pGina fork Open Source Windows Authentication

    เราใช้งาน pGina for Windows เวอร์ชั่น 3.1.8.0 มาสักระยะหนึ่งแล้ว คิดว่าแอดมินดูแลห้องคอมคงจะรู้จักกันดีว่าเป็นโปรแกรมสำหรับให้ผู้ใช้งานใส่ username และ password ของ user database ภายนอกได้ เวอร์ชั่นนี้ก็ยังคงใช้งานได้ดีอยู่ครับ แต่ตอนนี้หากเราจะให้ pGina ส่ง RADIUS Accounting ไปยัง RADIUS Server จะทำได้ไม่สมบูรณ์

    ผมค้นหาอยู่ว่าจะมีเวอร์ชั่นที่ใหม่กว่ามั้ย ก็พบว่าปัจจุบันนี้ เว็บไซต์เดิม pGina นั้นจะมีถึงเพียงแค่เวอร์ชั่นเก่า

    แต่มีคนนำไปทำเพิ่มเติมจาก project เดิม เรียกว่าการ fork project จึงเกิดเป็นเว็บไซต์อีกอันคือ pGina fork

     ซึ่งเวอร์ชั่นปัจจุบันที่ผมทดสอบแล้วว่าใช้งานกับ Windows 10 ได้ คือเวอร์ชั่น 3.2.4.1 แม้ว่าจะมีเวอร์ชั่นล่าสุดกว่านี้ (3.9.9.7) แต่ Windows 10 มันแจ้งเตือนว่าเป็นเวอร์ชั่นที่ไม่ได้ระบุ Publisher ที่แน่ชัด Windows 10 จึงเตือนให้อย่าติดตั้ง ผมก็ไม่แน่ใจว่าเพราะเหตุใด 

    สรุปว่า pGina fork ก็คือ pGina ที่มีคนนำไปพัฒนาต่อโดยการ fork จาก project เดิม และมาเป็น project อีกอันที่นี่ http://mutonufoai.github.io/pgina/ หรือ ที่นี่ก็ได้ https://github.com/MutonUfoAI/pgina/

    ดาวน์โหลดเวอร์ชั่น 3.2.4.1 ได้ที่นี่ https://github.com/MutonUfoAI/pgina/releases/download/3.2.4.1/pGinaSetup-3.2.4.1.exe

    ในตอนถัดไปจะมาพูดถึง pGina fork 3.2.4.1 configuration ครับ

     

  • การแต่งภาพให้มีมิติด้วย PowerPoint

    วันนี้มานำเสนอการแต่งภาพง่าย ๆ โดยไม่ต้องใช้โปรแกรมตกแต่งภาพ แค่มีโปรแกรมนำเสนอผลงานอย่าง Power Point ก็สามารถทำได้ไม่ยากเลย โดยวันนี้ขอเสนอการแต่งภาพให้มีมิติ ไปดูกันเลยจร้า

    1.เปิดโปรแกรม Power point จากนั้นไปที่เมนู Insert คลิก Pictures เลือกภาพที่ต้องการ

    2.คลิกที่ภาพที่ Insert เข้ามา จากนั้นกด ctrl ค้างไว้ แล้วลากภาพออกมา จะได้เพิ่มขึ้นมาอีกภาพนึง

    3.เอาภาพพื้นหลังออก คลิกที่ภาพที่ต้องการเอาพื้นหลังออก ไปที่เมนู Format คลิก Remove Background แล้วปรับขนาดให้ได้ตามต้องการ

    4.จากนั้นที่เมนู Format คลิก Keep Changes ภาพพื้นหลังก็จะหายไป

    5.ภาพตั้งต้นเราทำการใส่กรอบเข้าไป ไปที่เมนู Format คลิก Metal Frame

    1. แล้ว Crop ตัดเป็นรูปร่าง ที่เมนู Format คลิก Crop to Shape .ในส่วนของการทำรูป Pop out ขึ้นมาด้านบน เลือก Trapizoid จากนั้นคลิก Crop
    2. ลดขนาดของภาพลงมาเหลือสักครึ่งหนึ่ง ให้คาบเกี่ยวกับส่วนของดอกบัวที่จะแสดงออกมาสักครึ่งนึง จากนั้นกดปุ่ม Crop
    3. จากนั้นนำดอกบัวภาพที่นำพื้นหลังออกมาประกบลงในภาพที่1 ก็จะได้รูปดอกไม้ที่ลอยเด่นขึ้นมา

    9.กรณีที่ 2 ให้รูปดอกบัวปรากฏเด่นมาด้านข้าง ที่เมนู Format คลิก Crop to Shape เลือก Flowchart Manual Input จากนั้นคลิก Crop

    10.เลื่อนขนาด และเลื่อนด้านข้างเข้ามา เพื่อให้ดอกบัวปรากฏขึ้นมาทั้งด้านบนและด้านข้าง จากนั้นคลิก Crop

    11.จากนั้นนำดอกบัวภาพที่นำพื้นหลังออกมาประกบลงในภาพที่1