LMS Moodle

MySQL

Hide X-Powered-By di Nginx

Terkadang kita perlu menyembunyikan identitas teknologi yang kita gunakan, misalnya identitas web server Nginx yang kita gunakan. Itu akan terlihat seperti di bawah ini:

Disini kita perlu menambahkan atau mengaktifkan pada konfigurasi bagian http di /etc/nginx.conf :

server_tokens off;

Dan juga tambahan library :

sudo apt-get install nginx-extras

setelah itu baru menambahkan kembali bagian http di /etc/nginx.conf konfigurasi di bawah ini:

more_clear_headers Server;

Setelah itu jangan lupa untuk me’reload atau pun restart nginx nya

sudo systemctl reload nginx

Sekarang menjadi seperti ini:

Upgrade Nginx versi 1.18.0 ke versi terbaru (1.27.0) di Ubuntu 22.04

Saat tulisan ini dibuat, ditengarai bahwa Nginx versi 1.18 yang menjadi default versi Nginx di Ubuntu 22.04 sudah dianggap obsolete, dan rentan faktor keamanan. Untuk itu sangat disarankan untuk mengupgrade nya ke versi yang lebih tinggi.

Berikut adalah langkah-langkah upgrade nya menggunakan terminal/console

Pertama kali sebaiknya kita lakukan backup terhadap Nginx yang sekarang ada:

sudo cp -r /etc/nginx /etc/nginx.backup

Lakukan langkah-langkah berikut ini:

sudo apt update && sudo apt upgrade -y

Kita cabut atau hilangkan Nginx yang ada

sudo systemctl stop nginx
sudo apt-get autoremove nginx*

Kemudian tambahkan repository mainline NGinx

sudo add-apt-repository ppa:ondrej/nginx-mainline -y
sudo apt update
sudo apt install nginx-core nginx-common nginx nginx-full -y

Kita cek/periksa Nginx versi Mainline nya, perintah di bawah akan memunculkan versi terakhir yang tersedia di server:

apt-cache policy nginx

Enable/aktifkan layanan Nginx

systemctl status nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Berikut posisi setelah upgrade:

Semoga berhasil !

Menambahkan File JavaScript eksternal (.js) ke Moodle

Terkadang kita perlu menambahkan file javascript (*.js) ke dalam LMS Moodle yang sedang kita kembangkan. Berikut adalah langkah-langkahnya:

Masuk ke Folder Theme Anda
Pertama-tama , masuklah ke direktori /theme/Nama_Theme_Anda. Jika di dalamnya belum ada folder bernama javascript, buatlah folder baru dengan nama tersebut.

Unggah File JavaScript
Letakkan file .js yang ingin ditambahkan ke dalam folder javascript yang baru dibuat.

Edit File config.php
Buka file config.php yang berada di dalam folder theme Anda (/theme/Nama_Theme_Anda/config.php). Di bagian paling bawah file tersebut, tambahkan baris kode berikut untuk menyertakan file JavaScript Anda:

#To load the js files in your header:
$THEME->javascripts = array(‘yourfirstjsfile’,’yoursecondjsfile’); 

#To load the js files in your footer:
$THEME->javascripts_footer = array(‘yourfirstjsfile’,’yoursecondjsfile’);

Perlu dicatat bahwa: Pada saat menambahkan nama file JavaScript dalam konfigurasi, jangan sertakan ekstensi .js. Contohnya, gunakan’youfirstjsfile’ bukan ‘yourfirstjsfile.js’. Agar perubahan tersebut berlaku, maka kita perlu membersihkan cache situs Moodle, kemudian bersihkan cache browser dan reload.

Referensi: https://dzone.com/articles/adding-external-javascript-files-js-into-moodle

Mengenal Plugin Block: Filtered course list

Saat tulisan ini dibuat block ini dapat digunakan pada Moodle versi 3.8 hingga versi 4.3

Plugin ini dapat ditemukan di: https://moodle.org/plugins/block_filtered_course_list

Blok Filtered course list menampilkan daftar course yang dapat dikonfigurasi. Hal ini dimaksudkan sebagai pengganti blok My Course, meskipun keduanya tetap dapat digunakan bersama-sama. Plugin ini dikelola oleh Collaborative Liberal Arts Moodle Project (CLAMP).

Administrator dapat menerapkan berbagai filter yang digunakan untuk mengatur daftar course di blok. Course dapat diurutkan berdasarkan:

  1. kategori,
  2. kecocokan nama pendek,
  3. atau status penyelesaian.
  4. Mendukung Pencocokan regex. Jika semua mata kuliah dalam suatu semester mempunyai nama pendek yang diakhiri dengan kode semester, misalnya, maka administrator dapat menetapkan mata kuliah tersebut untuk muncul di bawah “Mata kuliah saat ini”, “Mata kuliah mendatang” atau judul lainnya.

Administrator dapat menetapkan beberapa judul yang dapat diciutkan dan memilih judul mana, jika ada, yang harus diperluas secara default.

Pilihan lainnya mencakup kemampuan untuk menyembunyikan blokir dari tamu atau pengunjung anonim, untuk memilih apakah admin melihat semua kursus atau miliknya sendiri, dan untuk menyembunyikan atau menampilkan tautan ke pencarian kursus yang lebih komprehensif.

Pengamanan Situs dengan menggunakan headers pada server Nginx

Secure Nginx from Clickjacking with X-FRAME-OPTIONS

Clickjacking

https://owasp.org/www-community/attacks/Clickjacking

X-Frame Options

Header add_header X-Frame-Options “SAMEORIGIN”;

Reference: here

Header X-XSS-Protection

When this header is being sent along with a response and the website contains an XSS attack, the browser will see this XSS attack and stop it from loading. This protection knows 3 levels:

  • X-XSS-Protection: 0; Disables the filter entirely.
  • X-XSS-Protection: 1; Enables the filter but only sanitizes the malicious script
  • X-XSS-Protection: 1; mode=block Enables the filter and completely blocks the page

Example:

add_header X-XSS-Protection "1; mode=block";
atau
add_header X-XSS-Protection "1;";

Reference

https://youtu.be/pV_uX0jDAh4?si=W6gbBjvpvniVDSDB

X-XSS-Protection headers. Protection or vulnerability?

https://webdock.io/en/docs/how-guides/security-guides/how-to-configure-security-headers-in-nginx-and-apache

Linux Bash Tips

  1. Eksekusi perintah pada file-file tertentu

Eksekusi perintah pada file-file tertentu

Rekursif perintah untuk mendafpatkan file-file dengan tipe tertentu, lalu mengeksekusi perintah tertentu pada setiap file tersebut

# find /directory/of/interest/ -type f -iname "*.sh" -exec chmod +x {} \;

Mengubah mod dari sebuah file yang berisi daftar file

# chmod g+w `cat daftar_nama_file.txt`

daftar_nama_file.txt

file1.abc
file2.xyz
dst.abx

How to Get Current Date and Time in Bash Script


#!/bin/bash

current_date_time=$(date)
echo "Current date and time: $current_date_time"

# Output: Current date and time: Sun Feb 28 23:26:13 UTC 2023

Reference: How to Get Current Date and Time in Bash Script

Nginx config tips

Membuat semua file txt, git dan md tidak dapat di akses user

Letakkan script ini dalam file config di bagian atas

location ~.(git|txt|md)$ {
deny all;
return 404;
}

Menyembunyikan versi nginx

Pada /etc/nginx/nginx.conf, tambahkan berikut ini:

server_tokens off;

Tambahan konfigurasi yang tidak standard di Nginx

apt-get install nginx-extras

Setelah itu kita bisa menambahkan kode berikut ini di nginx.conf

server_tokens off;
more_set_headers "Server: Molly Percocet";

Blok semua tipye file tapi tidak untuk file tertentu (misalnya dengan file yang di awali dengan  .well-known )

## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
    deny all;
    access_log off;
    log_not_found off;
}

My Frequent Command on MySQL 8.0 Administration

List of available users

SELECT User, Host FROM mysql.user;

Show privileges of an account

show grants for exampleuser@localhost;

Contoh:

mysql> show grants for epintaruser@localhost;

+------------------------------------------------------------------+
| Grants for epintaruser@localhost |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `epintaruser`@`localhost` |
| GRANT ALL PRIVILEGES ON `epintar`.* TO `epintaruser`@`localhost` |
+------------------------------------------------------------------+
2 rows in set (0.00 sec)

Alter user password

ALTER USER 'userName'@'localhost' IDENTIFIED BY 'New-Password-Here';

Contoh:

mysql> alter user 'moodle_user'@'%' identified by 'p4sswordku';

Query OK, 0 rows affected (0.00 sec)

mysql>

Grant privileges of a database to a user

Syntax:

GRANT <privileges> ON <database>.<object> TO '<user>'@'<host>';

Sebelumnya harus sudah ada terlebih dahulu proses pembuatan user dengan host yang sama

Contoh:

mysql> GRANT ALL PRIVILEGES ON digitoskelasku.* TO 'moodle_user'@'%';
Query OK, 0 rows affected (0.00 sec)

Create alternate Super Admin Users

Using root account for daily activities is not recommended, so we need to have other user account that has superadmin privileges

mysql> create user admin@localhost identified by '@dminpassw0rd';
mysql> grant all privileges on *.* to admin@localhost;

Install php7.4 dan php8.0 di Ubuntu 22.04

Mengapa perlu memasang lebih dari satu versi PHP ?

Pada masa peralihan teknologi ada kalanya kita memerlukan kedua versi exist bersama-sama, karena bisa jadi sebagian aplikasi masih menggunakan php7.4 tapi pada versi aplikasi yang lebih baru atau aplikasi yang lain yang berjalan di server yang sama menggunakan php yang versinya lebih baru, pada tulisan ini kita pakai php8.x. Nanti pengaturan versi PHP mana yang digunakan dilakukan pada file konfigurasi nginx nya walaupun tetap memililh salah satu untuk versi defaultnya

sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https 
LC_ALL=C.UTF-8 sudo add-apt-repository ppa:ondrej/php 
sudo apt update 
sudo apt install php7.4
sudo apt install php8.0

Mengatur default php version

sudo update-alternatives --config php

Akan muncul menu seperti di bawah ini:

There are 2 choices for the alternative php (providing /usr/bin/php).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/php8.0 80 auto mode
1 /usr/bin/php7.4 74 manual mode
2 /usr/bin/php8.0 80 manual mode

Press <enter> to keep the current choice[*], or type selection number:
1 2 3 12