cutycapt: cannot connect to X server hatası ve çözümü

cutycapt: cannot connect to X server hatası ve çözümü

Bir url listesinin screenshot larını almam gerekti ve bunun için çözüm ararken cutycapt denemeye karar vermiştim ancak bir bsit bir linux vps te x screen olmadığı için ssh tan komutu çalıştırdığımda “cutycapt: cannot connect to X server” hatası aldım. Tabi cahillik olsa gerek hızlıc bir çok deneysel çözüm denedim ancak hatadan kurtulmanın en kolay çözümü benim için xvfb kurmaktan geçti.

root@ayhanarda:/home/arda# cutycapt –url=http://www.ayhanarda.com/ –out=ayhanarda.png
cutycapt: cannot connect to X server

root@ayhanarda:/home/arda# apt-get install xvfb

Yukarıdaki komut ubuntu debian türevleri için , eğer centos redhat kullanıyor iseniz yum install xvfb kullanabilirsiniz. Tabi artık cutycat ı kullanma komutumuz da değişiyor , şimdi artık aşağıdaki komut örneğini kullanabilirsiniz.

root@ayhanarda:/home/arda# xvfb-run –server-args=”-screen 0, 1280x1200x24″ cutycapt –url=http://www.hostrazzi.com –out=hostrazzi.png

Vesta panel kurulu sunucunun dns çözümleyememesi sorunu ve çözümü

Sunucunuz herhangi bir ip yi pingleyebiliyor ama isim çözemiyor durumda ise , /etc/resolv.conf dosyanızda ki dns serverlar erişilebilir durumda ise , iptables kullanıyor iseniz muhtemelen resolv.conf dosyanızda yazan ip lere doğru 53 portunun gidişine izin vermeniz gerekecektir.

Vesta iptables kural dizisini aşağıdaki şekilde görebilirsiniz.

nano $VESTA/data/firewall/rules.conf

Kural değiştirdikten sonra update etmek için aşağıdaki komutu kullanabilirsiniz.

vupdatefirewall

Örneğin resolv.conf dosyanızda google ın 8.8.8.8 ve 8.8.4.4 dns leri var , bu durumda aşağıdaki komutlar çalıştırabilirsiniz.

/sbin/iptables A OUTPUT p udp d 8.8.8.8 dport 53 m state state NEW,ESTABLISHED j ACCEPT

/sbin/iptables A INPUT  p udp s 8.8.8.8 sport 53 m state state ESTABLISHED     j ACCEPT

/sbin/iptables A OUTPUT p tcp d 8.8.4.4 dport 53 m state state NEW,ESTABLISHED j ACCEPT

/sbin/iptables A INPUT  p tcp s 8.8.4.4 sport 53 m state state ESTABLISHED     j ACCEPT

Bunu her seferinde tek tek yapmamak için küçük bir bash script kullanabilirsiniz. Örneği aşağıdaki gibidir.

#!/bin/bash
Firewall="/sbin/iptables"
 
# Ayhan ARDA - http://www.ayhanarda.com
DNS_SUNUCU=$(cat /etc/resolv.conf  | grep -v '^#' | grep nameserver | awk '{print $2}')
 
for ip in $DNS_SUNUCU
do
        echo "(tcp, udp port 53) '$ip' adresleri için izinler veriliyor"
        $Firewall -A OUTPUT -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
        $Firewall -A INPUT  -p udp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
        $Firewall -A OUTPUT -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
        $Firewall -A INPUT  -p tcp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
done

Ayhan ARDA

/bin/bash^M: bad interpreter: No such file or directory hatası ve çözümü

Bazı bash scriptleri çalıştırmak isterken /bin/bash^M: bad interpreter: No such file or directory hatası alabilirsiniz , benim başıma gelme sebebi scripti windows ortamında hazırlayıp linux e indirerek çalıştırma denemem sonucunda oluştu. Çözüm için bash scriptinizi vi editörü ile açınız , aşağıdaki satırı yapıştırıp yine esc ve :wq ile kaydedip çıkınız  i şimdi bash scriptiniz çalışacaktır

:set fileformat=unix

Linux’te en çok dosya barındıran 10 klasörün tespiti (inode)

Aşağıdaki bash scripti kullanabiliriz.

Kullanımı aşağıdaki bash scripti bir dosyaya yazın , örneğin   nano inode.sh  , içeriği yapıştırın , ctrl +x ile kaydedin , chmod +x inode.sh ile çalıştırma izni verin , sonra ./inode.sh /home şeklinde kullanabilirsiniz.

#!/bin/bash
 
if [ $# -ne 1 ];then
  echo "Usage: `basename $0` DIRECTORY"
  exit 1
fi
 
echo "Lutfen sonucu gormek icin biraz bekleyin... Ayhan ARDA..."
 
find "$@" -type d -print0 2>/dev/null | while IFS= read -r -d '' file; do 
    echo -e `ls -A "$file" 2>/dev/null | wc -l` "files in:\t $file"
done | sort -nr | head | awk '{print NR".", "\t", $0}'
 
exit 0

 

Sonuç aşağıdaki gibi gözükecektir.

root@ayhanarda:~# ./inode-arda.sh /home
Lutfen sonucu gormek icin biraz bekleyin… Ayhan ARDA…
1. 18507 files in: /home/orneksite/httpdocs/resimler/urun
2. 9370 files in: /home/orneksite2/httpdocs/images/resimler201203
3. 8729 files in: /home/orneksite3/httpdocs/urunler
4. 4828 files in: /home/orneksite4/httpdocs/wp-content/uploads
5. 4699 files in: /home/orneksite5/httpdocs/testi/images
6. 3162 files in: /home/orneksite6/httpdocs/Galeri/Foto
7. 2715 files in: /home/orneksite7/httpdocs/media/k2/users
8. 2250 files in: /home/orneksite8/httpdocs/deneme/par
9. 2230 files in: /home/orneksite9/tmp
10. 2039 files in: /home/orneksite10/tmp

 

Ayhan ARDA

docker compose

Centos 7 ‘de Docker ve Docker Compose Kurulumu ile Kullanımı

Docker Compose, multi-container uygulamalarınızı gereksinimleri ile birlikte tek bir dosyaya tanımlayarak akabinde tek bir komut ile reçetesini yazdığınız container ı ayağa kaldırmanızı sağlamaktadır.

Şimdi elimizde sıfır kurulu ve updateleri yapılmış bir centos 7 var , bir public ip verdim ( burada bolca var 🙂 ) , siz private ip de verebilirsiniz , sonuç olarak ssh erişimim de var ve makina bir şekilde internete çıkıyor, buraya kadar tamam ise konuya girebiliriz.

Bu arada docker compose eski fig in yerini aldı , fig duyar iseniz artık o deprecated oldu ve resmi olarak docker compose diye anılıyor.

Öncelikle Docker imajları hakkında bilgi verelim , Her bir docker container ı , bir docker imajının yerel bir kopyasıdır. Docker imajlarını bir linux işletim sistemi gibi düşünebilirsiniz ancak şöşnde sadece minimal gereksinimler bulunmaktadır ve bu imajlar ana host un kernel ini kullanırlar fakat çalışan bir container ın içine girerseniz sadece o container ın dosya sistemini görürsünüz.

En çok kullanılan imaj ları docker hub da bulabilirsiniz , Bunlar docker team tarafından kontrol edilir ve bazı imajların altında official ibaresini görür iseniz bu imajlara güvenebilirsiniz çünkü docker team bunları test etmiştir.

Şimdi docker kurarak başlayalım , bu iş için yine docker team ın hazırladığı bir shell script i çağırıp çalıştıracağız.

Centos 7 de wget öntanımlı gelmiyor , aşağıdaki komut ile indirebilirsiniz.

yum install wget

Şimdi scriptimizi çekiyor ve çalıştırıyoruz.

[root@ayhanarda-containers ~]# wget -qO- https://get.docker.com/ | sh

Yaklaşık 30 sn içinde kurulum tamamlandı , şimdi kurulup kurulmadığını aşağıdaki şekilde doğrulayabiliriz.

[root@ayhanarda-containers ~]# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 15:39:25 2016
OS/Arch: linux/amd64

Eğer docker ı root olmayan bir kullanıcı ile kullanacak iseniz aşağıdaki komutla kendinizi docker grubuna dahil edebilirsiniz.

usermod -aG docker $(whoami)

Eğer root iseniz yukarıdaki komutu kullanmanıza gerek yok , şimdi docker ı başlatalım ve bundan sonraki rebootlar sonunda tekrar çalışacak hale getirelim , aşağıdaki 2 komutu kullanabilirsiniz.

[root@ayhanarda-containers ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@ayhanarda-containers ~]# systemctl start docker.service

Artık docker çalışır durumda. Şimdi docker compose kurulumuna geçebiliriz.

Öncelikle python-pip kuruyorum çünkü docker compose u pip ile kuracağım.

[root@ayhanarda-containers ~]# yum install epel-release

[root@ayhanarda-containers ~]# yum install -y python-pip

Şimdi docker compose u kuruyoruz.

[root@ayhanarda-containers ~]# pip install docker-compose

Kurulum tamamlandı.Şimdi hemen docker compose ile bir container ayağa kaldıralım.

Şimdi yaml dosyamız için bir klasör açıp içine giriyorum.

[root@ayhanarda-containers ~]# mkdir hello-world
[root@ayhanarda-containers ~]# cd hello-world

docker-compose.yml isimli dosyamızı oluşturup içine reçetemizi yazacağız. Ben favori editör olarak nano kullanıyorum , Siz farklı bir editor kullanabilirsiniz.

[root@ayhanarda-containers hello-world]# nano docker-compose.yml

içine aşağıdaki satırları yazabilir ve kaydedebilirsiniz.

ayhanarda-test:
image: hello-world

Yani aşağıdaki gibi gözükmeli.

[root@ayhanarda-containers hello-world]# cat docker-compose.yml
ayhanarda-test:
image: hello-world

Şimdi yapmamız gereken tek bir hareket kaldı , bu prospektüsün yazılı olduğu containerı up etmek , hala hello-world klasörümüzün içinde iken aşağıdaki komutu kullanabilirsiniz.

[root@ayhanarda-containers hello-world]# docker-compose up
Pulling ayhanarda-test (hello-world:latest)…
latest: Pulling from library/hello-world
03f4658f8b78: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest
Creating helloworld_ayhanarda-test_1
Attaching to helloworld_ayhanarda-test_1
ayhanarda-test_1 |
ayhanarda-test_1 | Hello from Docker.

..

Şimdi belirttiğimiz image ı indirdik , hadi bunu doğrulayalım.

[root@ayhanarda-containers hello-world]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 690ed74de00f 5 months ago 960 B

Şimdi aynı yöntemle bir de nginx kuruyorum , bunu yazmayacağım , şimdi docker hub da offical nginx i bulup adını doğrulayıp aynı yöntem ile oluşturabilirsiniz. Docker ps ile çalıştığını görebilirsiniz.

[root@ayhanarda-containers ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e37b79df162b nginx “nginx -g ‘daemon off” About a minute ago Up About a minute 80/tcp, 443/tcp nginx_nginx_1

Yukarıda bir Container id göreceksiniz , her çalışan container ın bir id si vardır, yani eğer biz bu container ın dosya sistemine girmek ister isek aşağıdaki gibi o makinanın içine erişebiliriz , hatta nginx in conf dosyasında değişiklik yapabiliriz , işimiz bitince exit yazarak çıkabiliriz.

[root@ayhanarda-containers ~]# docker exec -it e37b79df162b /bin/bash
root@e37b79df162b:/# cd etc/nginx/conf.d/
root@e37b79df162b:/etc/nginx/conf.d# ls
default.conf

Farklı docker-compose ve multi-container örnekleri ile yakında görüşmek üzere..

Ayhan ARDA

CryptoPHP PHP malware tespiti ve temizleme

CryptoPHP malware i , komut ve kontrol sunucuları ile public key şifrelemesi kullanarak iletişime geçen bir zararlıdır ve bilindik içerik kontrol sistemleri olan wordpress , joomla , drupal gibi sistemler ile kolaylıkla entegre olabilir. Yasadışı arama motoru optimizasyonu yapanlar tarafından kullanılır. Bu script genellikle kendini güncelleyecek şekilde yapılandırılır ve sahibi diler ise onu uzaktan güncelleyebilir ya da yeni özellikler ekleyebilir.

Fox it , bununla ilgili detaylı bir analiz yapmıştır ve https://foxitsecurity.files.wordpress.com/2014/11/cryptophp-whitepaper-foxsrt-v4.pdf adresinden inceleyebilirsiniz.

Tespiti için yine fox it in hazırladığı phyton scriptini kullanabiliriz. Sırasıyla önce scripti indiriyoruz , çalışma hakkı tanıyoruz ve /home dizinimizin altındaki dosyaları taramasını istiyoruz.

root@ayhanarda.com:~# wget https://raw.githubusercontent.com/fox-it/cryptophp/master/scripts/check_filesystem.py
root@ayhanarda.com:~# chmod +x check_filesystem.py
root@ayhanarda.com:~# ./check_filesystem.py /home

 

Sonuçlara göz atmak gerekirse çıktı aşağıdakine benzer olacaktır.

File matching patterns: ['*.png', '*.gif', '*.jpg', '*.bmp']
Recursively scanning directory: /home
 /home/guvenlikgeregigizlenmistir1.com/httpdocs/wp-content/themes/VideoThemeRes/images/social.png: CRYPTOPHP DETECTED! (version: 0.2)
 /home/guvenlikgeregizlenmistir2.com/httpdocs/wp-content/plugins/_revslider/images/social.png: CRYPTOPHP DETECTED! (version: 0.2)

Tespit ettikten sonra silmek için aşağıdaki silme komutunu kullanabilirsiniz.

root@ayhanarda.com:~# rm -rf /home/guvenlikgeregigizlenmistir1.com/httpdocs/wp-content/themes/VideoThemeRes/images/social.png

Bu phyton scriptini kullanmak istemiyor iseniz aşağıda belirttiğim betiği de kullanabilirsiniz.

root@ayhanarda.com:~# find /home/ -name "social*.png" -exec grep -E -o 'php.{0,80}' {} \; -print

Sunucunuza ücretli tarama ve temizleme yaptırmak için bu gibi işlemleri yapan Cpanel Güvenlik sitesi ile iletişime geçebilirsiniz.

Ayhan ARDA

 

Linux sunucularda kabukta çalışırken ctrl+d ile istemsiz çıkışları engellemek

Kabukta çalışırken control+d kombinasyonuna yanlışlıkla basıp anında çıkmak mümkündür fakat bu bazen istenmeyen durumlara sebep olmaktadır , bunun önüne geçmek için aşağıdaki işlemleri uygulayabiliriz.

Örneğin bir defa değilde 5 defa arka arkaya basınca çıksın demek için

export IGNOREEOF=5

komutunu kullanabiliriz , 5 rakamını değiştirmek tercihinize bağlı.

Peki farklı bir komut var mı  , tabiki , aşağıdaki komuta göz atınız.

set -o ignoreeof

Yukarıdaki komut o oturum için işlevi englleyecektir , peki açmak istersek?

set +o ignoreeof

komutu ile de tekrar açabiliyoruz.

Buraya kadar güzel fakat ya tekrar bağlandığımızda durum ne olacak ?, Hiç bir şey , yani komutu tekrar girmeniz gerek , Siz de bunu her seferinde tekrar tekrar girmek yerine başka yöntem arıyor iseniz bunun çözümü bashhrc dosyasında , bu dosyayı bir metin editor ile açınız ve içinde en alt satıra aşağıdaki komutu ekleyin  , tabi rakam yine tercihinize kalmış.

nano .bashrc ile dosyayı açınız.

IGNOREEOF=10

ve şimdi kaydedin , tekrar girdiğinizde 10 defa ctrl+d ye basmadan çıkmayacaktır.

Ayhan ARDA

Shell Script ile Otomatik WordPress Kuralım

wordpress Bu yazımızda shell script ile otomatik olarak localimize wordpress kuracağız , sisteminizde mamp kurulu olduğunu varsayıyorum , mamp nedir diyenler buradan inceleyebilir , genel olarak bahsetmek gerekirse apache , php , mysql gibi uygulamaların tümünü içinde barındıran bir pakettir.

Bu script ne işe yarar;

* Son sürüm wordpress i indirir ,

* wp-config.php dosyasını düzenler ,

* Mysql veritabanı oluşturur ,

* hosts dosyasını günceller

 

Normalde bu işlem 10-15 dk yı alır ike bu script ile 1 dk içinde kurulum gerçekleştirebilirsiniz , bu işlem webhosting paketi kullananlar için geçerli değildir , onlar panel üzerinden işlemlerini yapacaklardır , wordpress kurulu bir site isteyenler ise webhosting sitesi ile iletişime geçebilirler.

Scripti buradan indirebilirsiniz.

Çalışması için chmod ile execute hakkı vermeyi unutmayınız.

Komut :    ./WPkur.sh root root MerhahaWPDB MerhahaWPsite MerhahaWP.local hw

#!/bin/bash
##########
## Kurulum: Sisteminizde MAMP kurulu olduğunu varsayıyorum
## Kendinize göre geliştirebilirsiniz , problem değil
## Aşağıda Bunları Bul ve Kendince Değiştir: MYSQLUSER / MYSQLPASS
##
# ayhanarda.com - webhostingsitesi.com
##
#########
# Çalışma için geçici bir klasör oluşturalım
mkdir /tmp/getWP
cd /tmp/getWP
## Son sürüm wordpress'i indirelim
curl -O http://wordpress.org/latest.tar.gz
## Açalım
tar -xf latest.tar.gz
cd /tmp/getWP/wordpress/
## wp-config dosyasını düzenleyelim
mv wp-config-sample.php wp-config.php
sed -i .bak "s/username_here/MYSQLUSER/g" wp-config.php
sed -i .bak "s/password_here/MYSQLPASS/g" wp-config.php
sed -i .bak "s/database_name_here/$1/g" wp-config.php
## Veritabanı Oluşturalım
CMD="create database $1"
/Applications/MAMP/Library/bin/mysql --host=localhost -uMYSQLUSER -pMYSQLPASS -e "$CMD"
## Geçici klasörden gerçek klasöre taşıyalım
mv /tmp/getWP/wordpress ~/Sites/$1
## Firefox u açıp test edelim
open -a Firefox http://local

Ayhan ARDA

Plesk File Manager Açığı Hakkında (km0ae9gr6m)

Parallels firmasının Plesk ürünü için 2012 şubat ayında yayınladığı bildiriyi uygulamayan sunucu yöneticileri vhosts klasörü altındaki sitelere ait bir çok .js uzantılı dosyanın en altına uzun bir kod eklendiğini farketti ve bu siteler kısa süre içinde google tarafından da tespit edilip , ziyaretçilerine uyarılar yapılmakta. Şubat ayında yayınlanan ilgili bildiri için burayı inceleyebilirsiniz.

Etkilenen Plesk sürüm listesi aşağıdaki gibidir.

Plesk 7.5.x Reloaded
Plesk 7.1.x Reloaded
Plesk 7.0.x
Parallels Plesk Panel 9.x for Linux/Unix
Parallels Plesk Panel 8.x for Linux/Unix
Plesk 7.x for Windows
Parallels Plesk Panel 9.x for Windows
Parallels Plesk Panel 8.x for Windows
Parallels Plesk Panel 10.3 for Windows
Parallels Plesk Panel 10.2 for Windows
Parallels Plesk Panel 10.1 for Windows
Parallels Plesk Panel 10.0.x for Windows
Parallels Plesk Panel 10.3 for Linux/Unix
Parallels Plesk Panel 10.2 for Linux/Unix
Parallels Plesk Panel 10.1 for Linux/Unix
Parallels Plesk Panel 10.0.x for Linux/Unix

Detay için burayı inceleyebilirsiniz.

Zararlı kod /*km0ae9gr6m*/ ile başlayıp /*qhk6sa6g1c*/ ile bitmektedir.

Eğer Plesk in ilgili patch ini uygular iseniz açık kapatılmış olacaktır.Açığı tam olarak kapamak için farklı bir yol izlemek isteyebilirsiniz , bunlardan biri de filemanager ı devre dışı bırakmak olacaktır , aşağıdaki komutları çalıştırarak bu işlemi yapabilirsiniz.

cd /usr/local/psa/admin/htdocs/filemanager/
mv filemanager.php filemanager_yedek.php
cd /usr/local/psa/admin/bin/
mv filemng filemng.bak

Peki diyelim ki açıktan etkilendik ve yüzlerce dosya arasında tek tek nasıl bu uzun ve zararlı kodu temizleyeceğiz , cevabı için aşağıdaki komutu kullanabilirsiniz.

find /var/www/vhosts/*/httpdocs/ -type f -name ‘*.js’ -print0 | xargs -0 perl -i -0777pe ‘s|/\*km0ae9gr6m\*/.*?/\*qhk6sa6g1c\*/||gs’

Eğer sadece etkilenen dosyaları listeyip bir dosyaya yazdırmak isterseniz aşağıdaki komutu kullanabilirsiniz , sonrasında etkilenenler.txt isimli dosyayı inceleyebilirsiniz.

grep -ir km0ae9gr6m  /var/www/vhosts/* > etkilenenler.txt

Ayhan ARDA

 

Whm Cpanel Serverlarda Maldet Kurulumu

Sunucumuza SSH ile giriş yaptıktan sonra aşağıdaki komutları sıra ile çalıştırınız.

wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar zxvf maldetect-current.tar.gz
cd maldet*
sh install.sh

Kurulum bittikten sonra tarama yapmak için aşağıdaki komut dizilimini uygulayabilirsiniz,

maldet -a /home/?/public_html

Uzun bir süre gerektirebilir , beklemek istemez ve rapora sonra bakmak ister iseniz alttaki komutu kullanarak raporu inceleyebilirsiniz.

maldet -e