1. MOOdle SHell Moosh stands for MOOdle SHell. It is a commandline tool that will allow you to perform most
Moodle Tools (Advance)
1. MOOdle SHell
Moosh stands for MOOdle SHell. It is a commandline tool that will allow you to perform most common Moodle tasks.
2. Course Delete CLI
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:
- kategori,
- kecocokan nama pendek,
- atau status penyelesaian.
- 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
Linux Bash Tips
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
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:
Mengatur batas maximum Upload File di Nginx
Pada konfigurasi virtualhost, tepatnya pada blok server {} , tambahkan parameter ini:
client_max_body_size 128m;
Dan pada location ~ .php$ {} , tambahkan parameter berikut:
fastcgi_param PHP_VALUE "upload_max_filesize=128M \n post_max_size=128M";
Setelah itu nginx dapat di restart/reload
$ sudo systemctl restart nginx.service
Tips untuk mengamankan server Moodle
Berikut beberapa tips untuk mengamankan sebuah Moodle Server. Pendekatannya dapat dari arah Operating System, Server-server (web server, db server, cache, dll), Instalasi Moodle, server setup dan configuration
#1 Anti clickjacking
Menambahkan X-Frame-Options dalam HTTP header berguna untuk mengamankan NGINX dari serangan Clickjacking
The X-Frame-Options pada HTTP response header dapat digunakan untuk mengindikasikan apakah browser diizinkan untuk membuka sebuah halaman web luar ke dalam sebuah frame atau iframe .
Apakah anda pernah mencoba untuk meng”embed” situs Google.com di website anda dalam sebuah frame ? Dipasikan itu tidak bisa Anda lakukan karena memang di protect, dan hal yang sama dapat Anda lakukan juga pada website Anda.
Ada tiga pilihan pengaturan untuk X-Frame-Options:
- SAMEORIGIN: This setting will allow the page to be displayed in a frame on the same origin as the page itself.
- DENY: This setting will prevent a page displaying in a frame or iframe.
- ALLOW-FROM URI: This setting will allow a page to be displayed only on the specified origin.
Berikut contoh penulisan pada file konfigurasi nginx di block [server]
add_header X-Frame-Options "SAMEORIGIN";
#2 Mengamankan direktori-direktori yang terbuka
Biasanya direktori yang ada di Moodle kebanyakan di isi dengan file index.html yang kosong untuk memberikan kesan bahwa direktori tersebut walaupun ada, tapi isinya kosong. Untuk itu disaranakn mengahpus semua file index.html dari direktori-direktori dimaksud.
#3 Mengamankan file-file tertentu dari akses melalui browser
Walaupun file-file seperti *.txt, *.md tidak berisi informasi-iinformasi yang sensitif, tapi demi kemanan yang lebih baik, akses terhadap file-file seperti ini sebaiknya tetap dihindari. Karena letak file-file tersebut tersebar di berbagai direktori dibawah direktori utama moodle, maka secara cepat, kita dapat melakukan pembatasan itu dengan cara pengaturan file konfigurasi di Nginx config atau di nginx virtual host configuration file(s)
Konfigirasi berikut ini akan mengamankan file-file dengan ekstensi *.txt|git|md|json. Letakkan kode berikut di file config dari virtualhost config nya, yang biasanya diletakkan di /etc/nginx/site-enable/*
location ~.(git|txt|md|json)$ {
deny all;
return 404;
}
#4 Menutup akses ke direktori-direktori yang di hidden
Demikian pula direktori-direktori yang di hidden, biasanya nama direktori di awalai dengan tanda “.” (titik). Tapi ada juga direktori yang diawalai tanda titik, tapi tidak boleh di block/deny, misalnya direktori .well-known. Direktori ini digunakan oleh Let’s Encrypt
Maka konfigirasi file konfigurasi nginx perlu ditambahkan perintah sebagai berikut:
location ~ /\.(?!well-known).* {
deny all;
access_log off;
log_not_found off;
}
#5 Menyembunyikan identitas web server yang digunakan yang akan muncul ketika terjadi error
…
Masih akan berlanjut ….
Reference:
Cross-site Scripting (XSS) in Moodle
https://geekflare.com/add-x-frame-options-nginx/
https://pdfs.semanticscholar.org/1aed/91301bea6030195332a990fd8d666693072c.pdf
SQL Injection false positive (https://github.com/zaproxy/zaproxy/issues/3662)
Moodle File Permissions Recomendation
1. moodledata directory dan semua all konten-kontennya (dan subdirectories, termausk sessions):
owner: apache user (apache, httpd, www-data, whatever; see above) group: apache group (apache, httpd, www-data, whatever; see above) permissions: 700 on directories, 600 on files
2. moodle directory dan semua konten-kontent nya dan subdirektori (termasuk: config.php):
owner: root group: root permissions: 755 on directories, 644 on files.
Jika dimungkinkan login secara lokal oleh user biasa, maka ada 2 (dua) hal yang perlu diatur:
owner: root group: apache group (apache, httpd, www-data, whatever; see above) permissions: 750 on directories, 640 on files.
Reference:
https://docs.moodle.org/403/en/Security_recommendations#Most_secure.2Fparanoid_file_permissions