Hari ini saya ingin fokus pada topik yang dapat menyebabkan masalah besar akun yang diretas, email spam, dll.:Instalasi Joomla yang ketinggalan zaman di server Anda.
Tentu saja, ini juga berlaku untuk perangkat lunak lain. Metode yang disebutkan harus bekerja dengan cara yang sama untuk perangkat lunak lain. Sejak Joomla tersebar luas di seluruh internet, terutama di hosting bersama sistem CMS (Sistem Manajemen Konten) , cara ini hanya akan mencakup Joomla sejauh ini.
Prasyarat
Anda memerlukan setidaknya alat bc dan sed yang tidak selalu diinstal secara default.
Mari kita mulai
Pada awalnya ada satu pertanyaan:bagaimana saya bisa mengenali versi joomla dari file yang diinstal?
Ini tergantung pada versi Joomla yang diinstal. Sampai saat ini saya telah menemukan tiga file berbeda yang berisi informasi versi:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php
Baris terpenting dari file ini adalah nomor versi dan versi kecil yang terdapat dalam variabel berikut:
var $RELEASE ='1.0';
var $DEV_LEVEL ='12';
Pada langkah selanjutnya kita mencari versi terbaru Joomla di situs resminya. Pada saat penulisan howto ini ada tiga grup versi:1.5 (1.5.26), 2.5 (2.5.17) dan 3.2 (3.2.1).
Temukan instalasi joomla di server Anda
Satu hal yang semua instalasi joomla memiliki kesamaan adalah nama folder "komponen", jadi kami mencari semua folder dengan nama ini. Pada saat yang sama kami mengabaikan semua folder komponen yang terdapat dalam subfolder "administrator". Jalur dasar /var/www harus disesuaikan jika situs web di server Anda tidak terletak di sana.
temukan /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'
Perintah ini akan memberi Anda daftar semua folder itu. Perintah dirname cocok untuk mendapatkan jalur yang berisi folder komponen. Ini adalah jalur dasar dari instalasi Joomla.
Kami melakukan ini dalam satu lingkaran untuk semua folder komponen yang ditemukan:
untuk L di `find /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'`; lakukan
D=`dirname $L`;
selesai
Dapatkan versi mayor dan minor
Untuk mendapatkan versi instalasi Anda, kami akan menggunakan perintah gabungan "grep" dan "sed".
Pertama kita periksa mana dari tiga file yang saya sebutkan sebelumnya ada di jalur instalasi.
F=$D/libraries/joomla/version.php;
F2=$D/libraries/cms/version/version.php;
F3=$D/includes/version.php;
jika [[ -e "$F" || -e "$F2" || -e "$F3" ]]; lalu
if [[ -e "$F" ]]; lalu
F=$F;
elif [[ -e "$F2" ]]; lalu
F=$F2;
elif [[ -e "$F3" ]]; lalu
F=$F3;
fi
else
echo "No joomla version file found".;
fi
Sekarang kita membaca versi mayor dan minor dari file ini:
VERSION=`grep '$RELEASE' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"`;
SUBVERSION=`grep '$DEV_LEVEL' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"`;
Bandingkan versi
Karena nomor versi bukan bilangan bulat, kita tidak dapat membandingkannya di dalam skrip bash menggunakan -lt dll. Sebagai gantinya, kita perlu menggunakan program eksternal yang disebut bc:
ISOK=1;
if [[ $(echo "if (${VERSION} <1.5) 1 else 0" | bc) -eq 1 ]]; maka
# versi lebih rendah dari 1,5
ISOK=0;
elif [[ $(echo "if (${VERSION} ==1.5) 1 else 0" | bc) -eq 1 &&$(echo "jika (${SUBVERSION} <26) 1 lagi 0" | bc) -eq 1 ]]; lalu
# versi 1.5.x tetapi lebih rendah dari 1.5.26
ISOK=0;
### dan seterusnya - pemeriksaan versi lebih lanjut
lain
ISOK=1;
fi
Skrip lengkap
Sekarang kami siap untuk merakit semua bagian menjadi skrip yang siap digunakan dan menambahkan beberapa perbaikan kecil. Script akan mencari semua versi joomla di jalur dasar yang diberikan dan mencetak informasi tentang statusnya. Tentu saja Anda tidak dapat berbicara tentang versi 1.5.26 sebagai "saat ini" tetapi karena ini adalah versi terbaru dari cabang 1.5 dan pembaruan ke cabang 2.5 atau 3.x sangat rumit dalam beberapa kasus, skrip ini akan menandai versi ini sebagai "OK". Anda dapat mengubah ini jika Anda suka.
Berikut adalah contoh keluaran skrip:
[INFO] versi 1.5.26 di /var/www/xxx tidak masalah.
[PERINGATAN] Joomla versi 1.0.12 kedaluwarsa di /var/www/yyy
[PERINGATAN] Joomla versi 1.5.14 kedaluwarsa di /var/www/zzz
[PERINGATAN] Joomla versi 2.5.8 kedaluwarsa di /var/www/aaa
[PERINGATAN] Joomla versi 1.5.10 usang di /var/www/bbb
Dan sekarang:skrip lengkap. Simpan saja sebagai "joomlascan.sh" dan panggil melalui
bash joomlascan.sh
Jika Anda memberikan nama file sebagai argumen tambahan (seperti bash joomlascan.sh list.csv), Anda akan mendapatkan file bernama list.csv yang berisi daftar semua instalasi usang:
/var/www/yyy;1.0.12;1.5.26
/var/www/zzz;1.5.14;1.5.26
/var/www/aaa;2.5.8;2.5.17
/var/www/bbb;1.5.10;1.5.26
Kiat:
Jika Anda menggunakan ISPConfig 3, Anda harus mengubah BASEPATH menjadi BASEPATH="/var/www/clients/client*/web*".
#!/bin/bash # current version 1.5.x CUR15=26 # aktuelle version 2.5.x CUR25=17 # aktuelle version 3.2.x CUR3=1 #base path of the websites BASEPATH="/var/www/" # write to csv file (optional argument) OUTFILE=$1 if [[ "$OUTFILE" != "" ]] ; then # empty CSV file echo -n "" > $OUTFILE ; fi for L in `find ${BASEPATH} -type d -name 'components' ! -wholename '**/administrator/components' | grep -v '/tmp/'` ; do D=`dirname $L` ; F=$D/libraries/joomla/version.php ; F2=$D/libraries/cms/version/version.php ; F3=$D/includes/version.php ; ISOK=0 ; SHOWNEWEST="" ; IMPORTANCE=0 ; if [[ -e "$F" || -e "$F2" || -e "$F3" ]] ; then if [[ -e "$F" ]] ; then F=$F ; elif [[ -e "$F2" ]] ; then F=$F2 ; elif [[ -e "$F3" ]] ; then F=$F3 ; fi VERSION=`grep '$RELEASE' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"` ; SUBVERSION=`grep '$DEV_LEVEL' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"` ; if [[ $(echo "if (${VERSION} < 1.5) 1 else 0" | bc) -eq 1 ]] ; then # version is lower than 1.5 SHOWNEWEST="1.5.${CUR15}" ; IMPORTANCE=3 ; elif [[ $(echo "if (${VERSION} == 1.5) 1 else 0" | bc) -eq 1 && $(echo "if (${SUBVERSION} < ${CUR15}) 1 else 0" | bc) -eq 1 ]] ; then # version is 1.5.x but not most current version SHOWNEWEST="1.5.${CUR15}" ; IMPORTANCE=2 ; elif [[ $(echo "if (${VERSION} == 1.6) 1 else 0" | bc) -eq 1 ]] ; then # version is 1.6 SHOWNEWEST="2.5.${CUR25}" ; IMPORTANCE=2 ; elif [[ $(echo "if (${VERSION} == 1.7) 1 else 0" | bc) -eq 1 ]] ; then # version is 1.7 SHOWNEWEST="2.5.${CUR25}" ; IMPORTANCE=2 ; elif [[ $(echo "if (${VERSION} > 1.7) 1 else 0" | bc) -eq 1 && $(echo "if (${VERSION} < 2.5) 1 else 0" | bc) -eq 1 ]] ; then # version is somewhere between 1.7 and 2.5 SHOWNEWEST="2.5.${CUR25}" ; IMPORTANCE=2 ; elif [[ $(echo "if (${VERSION} == 2.5) 1 else 0" | bc) -eq 1 && $(echo "if (${SUBVERSION} < ${CUR25}) 1 else 0" | bc) -eq 1 ]] ; then # version is 2.5 but lower than current SHOWNEWEST="2.5.${CUR25}" ; IMPORTANCE=1 ; elif [[ $(echo "if (${VERSION} >= 3) 1 else 0" | bc) -eq 1 && $(echo "if (${VERSION} < 3.2) 1 else 0" | bc) -eq 1 ]] ; then # version is 3.0 or 3.1 SHOWNEWEST="3.2.${CUR3}" ; IMPORTANCE=2 ; elif [[ $(echo "if (${VERSION} == 3.2) 1 else 0" | bc) -eq 1 && $(echo "if (${SUBVERSION} < ${CUR3}) 1 else 0" | bc) -eq 1 ]] ; then # version is 3.2 but lower than current SHOWNEWEST="3.2.${CUR3}" ; IMPORTANCE=1 ; else ISOK=1 ; echo "[INFO] version $VERSION.$SUBVERSION in $D is ok." ; fi else # seems not to bee a joomla version ... ISOK=1 ; fi ; if [[ $ISOK -eq 0 ]] ; then echo "[WARN] outdated Joomla version $VERSION.$SUBVERSION in $D" ; if [[ "$OUTFILE" != "" ]] ; then # write CSV file echo "\"$D\";$VERSION.$SUBVERSION;$SHOWNEWEST;$IMPORTANCE" >> $OUTFILE ; fi fi done exit 0 ;
Ada satu masalah yang diketahui dengan skrip ini:skrip ini tidak dapat mengenali Mambo. Jadi itu akan menandai semua instalasi mambo sebagai "OK" terlepas dari versi mana yang mereka miliki.