今日は、ハッキングされたアカウントやスパムメールなどの大きな問題につながる可能性のあるトピックに焦点を当てたいと思います。古いJoomlaインストール サーバー上で。
もちろん、これは他のソフトウェアにも当てはまります。上記の方法は、他のソフトウェアでも同様に機能するはずです。 Joomla以降 インターネット全体、特に共有ホスティングで広く普及しています システムCMS(コンテンツ管理システム) 、このハウツーはこれまでのところJoomlaのみをカバーします。
少なくとも、デフォルトで常にインストールされるとは限らないツールbcとsedが必要になります。
最初に1つの質問があります:インストールされたファイルからjoomlaバージョンをどのように認識できますか?
これは、インストールされているJoomlaのバージョンによって異なります。これまで、バージョン情報を含む3つの異なるファイルを見つけました:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php
これらのファイルの最も重要な行は、バージョン番号です。 およびマイナーバージョン 次の変数に含まれています:
var $ RELEASE ='1.0';
var $ DEV_LEVEL ='12';
次のステップでは、公式WebサイトでJoomlaの最新バージョンを検索します。このハウツーを書いている時点では、3つのバージョングループがあります: 1.5 (1.5.26)、 2.5 (2.5.17)および 3.2 (3.2.1)。
すべてのjoomlaインストールに共通するものの1つは、フォルダー名「components」であるため、この名前のすべてのフォルダーを検索します。同時に、サブフォルダー「administrator」に含まれるすべてのコンポーネントフォルダーを無視します。サーバー上のWebサイトがそこにない場合は、ベースパス/ var/wwwを調整する必要があります。
/ var / www / -type d -name'components'を検索してください! -wholename'** / administrator / components'
このコマンドは、それらすべてのフォルダのリストを提供します。コマンドdirnameは、componentsフォルダーを含むパスを取得するのに適しています。これはベースパスです Joomlaインストールの。
見つかったすべてのコンポーネントフォルダに対してループでこれを行います:
`find / var / www / -type d -name'components'のLの場合! -wholename'** / administrator / components'`; do
D =`dirname $L`;
完了
インストールのバージョンを取得するには、コマンド「grep」と「sed」を組み合わせて使用します。
最初に、前述の3つのファイルのどれがインストールパスに存在するかを確認します。
F =$ D / libraries / joomla / version.php;
F2 =$ D / libraries / cms / version / version.php;
F3 =$ D / contains / version.php;
if [[-e "$ F" || -e "$ F2" || -e "$ F3"]];次に
if[[-e "$ F"]];次に
F=$ F;
elif [[-e "$ F2"]];次に
F=$ F2;
elif [[-e "$ F3"]];次に
F=$ F3;
fi
else
echo"joomlaバージョンのファイルが見つかりません。";
fi
次に、このファイルからメジャーバージョンとマイナーバージョンを読み取ります。
VERSION =`grep'$ RELEASE' $ F | sed -r "s /^.*=\s*'(.*)'.*$/\1/g"`;
SUBVERSION =` grep'$ DEV_LEVEL' $ F | sed -r "s /^.*=\s*'(.*)'.*$/\1/g"`;
バージョン番号は整数ではないため、-ltなどを使用してbashスクリプト内で比較することはできません。代わりに、bcという外部プログラムを使用する必要があります。
ISOK =1;
if [[$(echo "if($ {VERSION} <1.5)1 else 0" | bc)-eq 1]];次に
#バージョンが1.5未満です
ISOK =0;
elif [[$(echo "if($ {VERSION} ==1.5)1 else 0" | bc)-eq 1 &&$(echo "if($ {SUBVERSION} <26)1 else 0" | bc)-eq 1]];次に
#バージョンは1.5.xですが、1.5.26未満です
ISOK =0;
###など-さらにバージョンチェック
その他
ISOK=1;
fi
これで、すべてのパーツをすぐに使用できるスクリプトにアセンブルし、いくつかのマイナーな改善を追加する準備が整いました。スクリプトは、指定されたベースパス内のすべてのjoomlaバージョンを検索し、ステータスに関する情報を出力します。もちろん、バージョン 1.5.26について話すことはできません 「現在」として表示されますが、1.5ブランチの最新バージョンであり、2.5または3.xブランチへの更新が非常に複雑な場合があるため、このスクリプトはこのバージョンを「OK」としてマークします。必要に応じてこれを変更できます。
スクリプトの出力例は次のとおりです。
[情報]/var / www/xxxのバージョン1.5.26は問題ありません。
[警告]/var / www/yyyの古いJoomlaバージョン1.0.12
[警告]古いJoomlaバージョン1.5.14 in / var / www / zzz
[警告]古いJoomlaバージョン2.5.8in/ var / www / aaa
[警告]古いJoomlaバージョン1.5.10in/ var / www / bbb
そして今:完全なスクリプト。 「joomlascan.sh」として保存し、
から呼び出します。bash joomlascan.sh
追加の引数としてファイル名を指定すると(bash joomlascan.sh list.csvなど)、古いインストールのすべてのリストを含むlist.csvというファイルが取得されます。
/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
ヒント:
ISPConfig 3を使用する場合は、BASEPATHを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 ;
このスクリプトには1つの既知の問題があります。それは、Mamboを認識できないことです。そのため、バージョンに関係なく、すべてのmamboインストールが「OK」としてマークされます。