Friday, October 11, 2024

Set enforce complex password Ubunut 22.04

1) Install the libpam-pwquality package
sudo apt update
sudo apt install libpam-pwquality
2) Edit the PAM password configuration file  open the /etc/pam.d/common-password file for editing:
sudo nano /etc/pam.d/common-password
3) Add or modify the pwquality settings:
password requisite pam_pwquality.so retry=3
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
retry=3: Allows 3 retries if the user enters an invalid password.
minlen=12: Requires a minimum password length of 12 characters.
dcredit=-1: Requires at least 1 digit.
ucredit=-1: Requires at least 1 uppercase letter.
lcredit=-1: Requires at least 1 lowercase letter.
ocredit=-1: Requires at least 1 special character (e.g., @, #, $).
4) Optional: Add additional password strength rules:
sudo nano /etc/security/pwquality.conf
Here you can add options like:
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 2       # Prevent repeated characters
maxclassrepeat = 2  # Prevent excessive character class repetition
5) Save and exit: After editing
6) Test the configuration: 
sudo passwd <username>
Ref
  • https://chatgpt.com/share/6708c50a-d480-8010-8ea4-418483178302

Set policy password expire and warning Ubuntu 22.04

Check current password expiration settings
sudo chage -l <username>
Force password change on next login
sudo chage -d 0 <username>
Set a password expiration policy
sudo chage -M 90 <username>
(Optional) Set password warning period
sudo chage -W 7 <username>
Verify changes
sudo chage -l <username>

Ref
  • https://chatgpt.com/share/6708c50a-d480-8010-8ea4-418483178302

Wednesday, October 9, 2024

Use docker container run Slim Framework 4 on Ubuntu 18.04

  • ประเด็นคือ ย้าย Slim Framework 4++ จากเครื่อง มาอีกเครื่องซึ่ง  php มันเป็น 7.0 ทำให้ api ใช้งานไม่ได้เพราะเค้าต้องการ 7.4

Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.4.0".

  • แต่เราจะไม่ไปยุ่งกับ Environment เครื่องหลัก เราแก้ปัญหาโดยติดตั้ง docker และใช้งาน container แทน

Step

  • ที่เครื่องปลายทางที่ต้องการจะย้ายไป ให้ ssh เข้าไปตั้งค่าได้เลย
  • ติดตั้ง docker-ce ให้เรียบร้อย และเช็คสถานะ systemctl status docker
  • จากนั้นเราไปสร้าง Dockerfile ใน user เรา

$ cd /home/myuser & mkdir mydocker

$ cd mydocker

  • คัดลอกโปรเจค slim framework ลงมา

$ scp -r user@server:/path/myslim ./

  • เราจะได้ folder ชื่อ myslim ที่ client แล้ว
  • สร้าง Docker file

$ nano Dockerfile

# Use the official PHP 7.4 with Apache base image

FROM php:7.4-apache


# Enable Apache mod_rewrite

RUN a2enmod rewrite


# Install GD extension and MySQL extension

RUN apt-get update && apt-get install -y \

    libfreetype6-dev \

    libjpeg62-turbo-dev \

    libpng-dev \

    libzip-dev \

    && docker-php-ext-configure gd --with-freetype --with-jpeg \

    && docker-php-ext-install gd \

    && docker-php-ext-install mysqli pdo pdo_mysql zip


# Set up Apache configuration (optional: can adjust according to your needs)

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf


# Restart Apache to ensure the modules and settings are applied

CMD ["apache2-foreground"]

  • build image ใหม่จากต้นฉบับให้เป็นแบบคอนฟิกตามเราก่อนรัน และตั้งชื่อใหม่ จาก Dockerfile ที่เราได้ตั้งค่าต่างๆ ไว้ด้วยคำสั่ง

$ docker build -t php74-apache .

  • ได้ image ของเราแล้วที่คอนฟิกพร้อม ตามต้องการของเรา จากนั้น สร้าง และ รัน container จาก image ของเรา
  • กรณีรันโดยไม่ map web root folder ใน container
$ docker run -d -p 8080:80 --name my_php74_container php74-apache
  • ทดสอบสร้างไฟล์ info.php ใน container
$ docker exec -it my_php74_container bash
root@1fxxxx:/var/www/html# echo "<?php phpinfo(); ?>" >> info.php
root@1fxxxx:/var/www/html# exit
  • กรณีเราจะ map volumen กับ  /home/myuser/mydocker/myslim ที่เครื่อง host
$ docker run -d -p 8080:80 --name my_php74_container \
-v /home/myuser/mydocker/myslim:/var/www/html php74-apache
  •     ทดสอบใช้งานโดย http://localhost:8080/endpoint
เพิ่มเติม
  • กรณีนี้ เราทำ api เป็น sub folder แต่ย้ายมาแล้วเราเอาวางไว้ root web container เลยให้ทำการแล้วไขไฟล์ /home/myuser/mydocker/myslim
$ nano /home/myuser/mydocker/myslim/index.php
  • ปิดการใช้แบบ subfolder ให้ comment ไว้เลย
/** set path for app subdirectory */
// $app->setBasePath('/mysubapp');
Ref

  • https://chatgpt.com/share/6705face-c598-8010-b864-51a1763d4042