Ender KAHRAMAN

Kişisel Tecrübelerin Paylaşımı… www.enderkahraman.com

PhpMyAdmin Kurulumu & PhpMyAdmin Hatası Giderme

PhpMyAdmin MySql kullanmak için güzel bir web yazılımı. Yalnız sağlıklı çalışabilmesi için “php.ini” dosyasında ve “config.inc.php” dosyasında bazı ayarlamalar yapmak gerekiyor. “php.ini” dosyası PHP bilgisayar kurulduğunda kopyalanan bir dosyadır. “config.inc.php” dosyası ise PhpMyAdmin yazılımının ayarlarının bulunduğu dosyadır. PhPMyAdmin içinde bu dosyayı hazırlamak için bir örneği bulunur bu örnek dosyanın adı “config.sample.inc.php”tir. Bu örnek dosyanın “config.inc.php” adında bir kopyasını aynı klasöre (PhpMyAdmin klasörüne) kaydedin.

“php.ini” dosyasında aşağıdaki ayarların yapılmış olduğunu kontrol edin. PHP’nin C:\PHP altına kurulduğu varsayılarak anlatılmıştır. Eğer siz PHP’yi C:\PHP klasörü dışında bir klasöre kurduysanız. Değişiklikleri ona göre yapınız.

MySql’in çalışabilmesi için “php.ini” dosyasında aşağıdaki 2 satırın mutlaka bulunması gerekir. “php.ini” dosyasında “extension_dir”ı bulun başındaki “;” işaretini silin ve aşağıdaki gibi değiştirin. Ayrıca “php.ini” dosyasında “Dynamic Extensions” bölümünü bulun. Bu bölümün altına ikinci satırı ekleyin ve dosyayı kaydedin. MySql’in çalışabilmesi için aşağıdaki 2 satırın eklenmesi gerekiyor. Burada son olarak “php_mysql.dll” dosyasının “C:\PHP\ext” klasöründe olması gerekiyor.
extension_dir = “C:\PHP\ext”
extension=php_mysql.dll

“C:\PHP” klasörü altında “session” isimli bir klasör oluşturun ve “php.ini” dosyasında “session.save_path” ifadesini bulun, başındaki “;” işaretini kaldırın ve aşağıdaki gibi değiştirin ve kaydedin :
session.save_path=”C:\php\session”

PhpMyAdmin bazen çalışsa bile “Mbstring uzantısı olmadan phpMyAdmin karakter dizgilerini doğru olarak bölemez ve bu beklenmedik sonuçlar doğurabilir.” hatası verebiliyor. Bazen de “mcrypt uzantısı yüklenemiyor. Lütfen PHP yapılandırmanızı kontrol edin” hatasını verebiliyor. Bu hataları engellemek için yine “php.ini” dosyasında “Dynamic Extensions” bölümünde aşağıdaki tanımlamaların yapılıp kaydedilmesi ve “php_mbstring.dll” ile “php_mcrypt.dll” dosyalarının da “C:\PHP\ext” klasörüne kopyalanması gerekiyor.
Ayrıca “php_mcrypt.dll”in aktif hale gelebilmesi için “C:\PHP” dizini içindeki “libmcrypt.dll” dosyasının “C:\WINDOWS\SYSTEM32” dizini içine kopyalanması gerek.
extension=php_mbstring.dll
extension=php_mcrypt.dll

Son olarak da PhpMyAdmin yazılımının config.inc.php ayarlar dosyasında aşağıdaki düzenlemenin yapılması gerek. “$cfg[‘blowfish_secret’] = ‘ ‘;” bulun tırnaklar arasına rastgele sayı ve harfler yazın kaydedin :
$cfg[‘blowfish_secret’] = ‘ba17c1ec07d65003’; //Tırnaklar arasına buradaki gibi rastgele sayı ve harfler girin.

CSR Oluşturma

Sertifikasyonun ilk aşaması CSR (Certificate Signing Request) oluşturulmasıdır. Bu işlem server tarafında kullanılan web server yazılımına göre değişmektedir. Eğer web sitenizin barındırılmasını bir İnternet Servis sağlayıcısı (Hosting firması) üzerinde yapıyorsanız, bu firma size sertifikasyon için gereken CSR bilgisini ulaştıracaktır.

CSR bilgisi oluşturmadan önce bilinmesi gereken önemli noktalar

1) Belirttiğiniz bilgilerin hiç birinde alttaki karakterler yer almamalıdır.
! @ # $ % ^ * ( ) ~ ? > < & / \

2) Common Name bilgisi güvenli alan olarak kullanmak istediğiniz alan adı ile aynı olmalıdır, şöyleki eğer CSR talebinizi domain.com şeklinde yaptıysanız, daha sonra secure.domain.com şeklinde güvenli alan oluşturamazsınız. Yada talebinizi secure.domain.com şeklinde yapmış iseniz güvenli alanınızı domain.com altında kullanamazsınız. Bunun için CSR bilgisini oluşturmadan önce kararınızı iyi vermeniz, ve alanları doğru doldurmanız gerekmektedir.

Aşağıdaki ilgili linklerden CSR oluşturma ile ilgili bilgilere ulaşabilirsiniz :

Apache + ApacheSSL
Apache + MODSSL
Apache + Open
Apache + Raven
Apache +SSLeay
Apache 2
C2Net Stronghold
Cobalt Series
cPanel
Ensim
HSPHERE
IBM HTTP
IBM Domino Go 4.6.2.6+
iPlanet Enterprise Server 4.1
IPSWITCH
Jakart-Tomcat
Lotus Domino 4.6
Lotus Domino 5.x
Microsoft Internet Information Server (IIS) 4.0
Microsoft Internet Information Server (IIS) 5.0 & 6.0
Netscape Enterprise 3.51
Novell ConsoleOne
O’Reilly WebSite Professional 2.x
Deerfield (O’Reilly) Website Professional 3.x
Plesk
Weblogic 5
Weblogic 6
Weblogic 7
WebSTAR 4
WebSTAR 5
Zeus Web Server v3

Linux Kernel Patch (Hotfix) With Yum Repository

Linux işletim sistemimizin Kernel’in de  çıkan root exploitler (Son günlerde ard arda 2.4 /2.6 çekirdekleri exploit edildi.) serverin güvenliği gereği devamli compile/patch edilebilmesi sorununu ortaya çıkarıyor.

En son çıkan güvenlik bildirisinde Linux Centos/Redhat’ın tüm kernellerini etkileyen Local Root Exploit yayınlandı. Aşağıda belirtilen kernel sürümleri, bu açıklıktan etkilenmiyor.

CentOS 5.3 (2.6.18-128.7.1.el5) is not vulnerable
Red Hat Enterprise Linux 5.3 (2.6.18-128.7.1.el5) is not vulnerable
Red Hat Enterprise Linux 4.8 (2.6.9-89.0.9.EL) is not vulnerable

Referans/Exploit : http://milw0rm.com/exploits/9545

Serverda açıklığı meydana getirecek kodu derleyen bir kullanıcı  bu kodu çalıştırdığında serveri manipule edip  root kullanıcısının yetkilerini elde edebiliyor. Aşağıda virtual bir linux server da yaptığım test’i görebilirsiniz.

[ender@localhost tmp]$ gcc -Wall -o root root.c-rwxrwxr-x 1 ender ender 6698 Oct 13 14:10 root-rwxrwxrwx 1 ender ender 9409 Oct 13 14:10 root.c
[ender@localhost tmp]$ ./root
sh-3.2# id

uid=0(root) gid=0(root) groups=500(elmameta) context=root:system_r:unconfined_t:s0-s0:c0.c1023

main(void)
{
char *addr;
int out_fd, in_fd;
char template[] = “/tmp/tmp.XXXXXX”;

#if defined(__i386__) || defined(__x86_64__)

uid = getuid(), gid = getgid();
#endif

Kernel’in Hızlıca Patchlenmesi

Linux kerneliniz için güncelleştirmelerin bir an evvel yapılmasını öneririm. Centos ve bir çok sitedeki mirror listlerden derlenmiş kerneli çekebiliriz. Mevcut yum update repository’niz de fixlenmis kernel olmayabilir. Bu durumda serverin repository’lerini ayarlamamız gerekecektir.

[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# vi CentOS-Update.repo

Vi editörüm ile yeni update dosyamızı hazırlayalım. CentOS-Update.repo isimli dosya oluşturup içine aşağıdaki satırları girmemiz gerekiyor.

name=CentOS-$releasever – Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/$releasever/updates/$basearch
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

Yukarıdaki paylaşımlı ftp sitesinde Centos sistemlerin patchlenmiş son kerneli mevcut olduğundan (kernel-2.6.18-128.7.1.el5.src.rpm 24-Aug-2009) “baseurl= ” kısmını editledim.

Orjinal Adres : http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.3/updates/

Dosyayı :wq ile (vi editorune özgü olan komut ) kaydedip çıkalım. Shell konsolumuzda :

[root@localhost yum.repos.d]# yum update kernel
* updates: ftp-stud.fht-esslingen.de
updates

Patchlenen kernel bu bölümde gözükecektir. Bu işlem sonrası :

uname -r

Parametresi ile yeni kernelinizin versiyonunu görebilirsiniz.

[root@localhost yum.repos.d]# uname -r
2.6.18-128.7.1.el5

Serverdaki çok riskli açıklık bu patch ile birlikde yerini şimdlik sessizliğe bıraktı. Bir süreliğine safe durumdayız.

Sisteme çekilmiş tüm update ve install loglarını aşağıdaki komut ile gorebilirsiniz :

[root@localhost ~]# cat /var/log/yum.log
Sep 08 02:07:44 Updated: kernel-headers – 2.6.18-128.7.1.el5.i386
Sep 08 02:15:39 Installed: kernel-devel – 2.6.18-128.7.1.el5.i686

Felaket’i Önlemek İçin Başka Ne Tür Önlemler Alınabilir ?

1) Server Updateleri’nin çekilmesi.

2) Linux’u web server olarak kullanıyorsanız veya paylaşımlı shell hesabı veriyorsanız, sistem dizinlerinin permissionlarını güvenli şekilde set etmeniz  olacaktır.

Serverda chmod 777 (Full yetki) ile set edilen dizinlerinin “execute” yetkisinin kaldırılması gerekir.

Aşağıdaki dosya sistemleri Linux sistemlerde default olarak chmod 777 olarak gelmektedir.

/tmp
/dev/shm
/var/tmp

3) *nix sistemler genel de web server olarak kullanıldığından, bir lamerin sunucuya backconnect (Reverse Connection) olabileceğini göz ardı edilmemesi gerekir. Konu çok uzayacak böyle,  Reverse Connection ataklarıdan korunma yöntemlerini  bir başka gün güzel bir çalışma ile ele alalım. Burada diyeceğim serverda IPtables firewall varsa içerden dışarıya tüm portların kapatılmasıdır. Bu durumda php veya perl, python ile sunucuyu bypass eden birisi root yetkilerini elde etmek için servera backconnect olamayıp son vuruşu yapamayacaktır.

“Destination, Any, Close” mantığı ile oluşturulacak bir rule sayesinde içerden dışarı tüm bağlantılar kapatılır.

Php ile programlanmış bir script de “Reverse Connection Anatomisi” :

cf(“/tmp/bd.c”,$port_bind_bd_c);
$blah = ex(“gcc -o /tmp/bd /tmp/bd.c”);
@unlink(“/tmp/bd.c”);
$blah = ex(“/tmp/bd “.$_POST[‘port’].” “.$_POST[‘bind_pass’].” &”);
cf(“/tmp/bdpl”,$port_bind_bd_pl);
$p2=which(“perl”);
if(empty($p2)) $p2=”perl”;
$blah = ex($p2.” /tmp/bdpl “.$_POST[‘port’].” &”);
$_POST[‘cmd’]=”ps -aux | grep bdpl”;
$port_bind_bd_c
$port_bind_bd_pl

reverse-connection-code

Encode edilen C#, perl kodları

Linux Ping Kapatma Engelleme

Linux yüklü sunucunuzu ping isteklerine kapatmak için sysctl aracını kullanabiliriz. Bunun için gereken :

sysctl -w net.ipv4.icmp_echo_ignore_all=1

Komutunu vermektir. Bu işlemin kalıcılığını sağlamak için :

nano /etc/sysctl.conf

Dosyasına :

net.ipv4.icmp_echo_ignore_all=1

Satırını eklemek yeterlidir. Ping isteklerini tekrar açmak istersek aynı komutta 1’i 0 yaparak ping isteklerini açabiliriz. Kalıcı olması için ise aşağıdaki komutu uygulayın :

sysctl -p

Linux Zaman (Saat & Tarih) Değiştirme

date -s “mm/dd/yyyy hh:mm:ss”

Örnek :

date -s “05/10/2010 16:41:00”

Not : Eğer kopyala / yapıştır yapıyorsanız eğer, üst tırnakları yeniden yazın.

Crontab Kullanımı

Crontab’a girişini yapar, yoksa yaratır :

crontab -e

Crontab’ı görüntüler :

crontab -l

Crontab dosyaını kaldırır :

crontab -r

Crontab e en son girişini gösterir :

crontab -v

Örnek : Her gün akşam 6.30 tmp dosyalarını temizler :

30 18 * * * rm /tmp/*

Linux’da Gönderen E-Posta Sunucusu İçin 587 Nolu Portun Açılması & Apf Güvenlik Duvarı Kullananlar İçin 587 Nolu Portun Eklenmesi

Linux servere sahip olanların, mail gönderme için kullanılan portun 25 yerine 587 kullanulması sonrası yapması gereken değişiklikler :

nano /etc/services
smtp   25/tcp mail
smtp   25/udp mail

Satırlarını bulup altına :

smtp2 587/tcp mail
smtp2 587/udp mail

Ekliyoruz.

cp /etc/xinetd.d/smtp_psa /etc/xinetd.d/smtp_psa2

İle bir kopyasını alıyoruz.

nano /etc/xinetd.d/smtp_psa2

Komutu ile editleyip service smtp yi

service smtp2

Olarak değiştiriyoruz ve kaydediyoruz.

/etc/rc.d/init.d/xinetd restart

Sunucunun içinten telnet localhost 587 şeklinde test ediyoruz. 220 sunucuadı ESTMP şeklinde yanıt alıyorsak portumuz aktif demektir.

Apf Kullananların Yapması Gereken Değişiklikler :

nano /etc/apf/conf.apf

Aşağıdaki satırları bulup 587 ekliyoruz. (Diğer portlar sisteme göre değişiklik gösterebileceğinden dikkate almayıp sadece 587  ekleyin).

TOS_16=”25,110,143,587″
IG_TCP_CPORTS=”20,21,22,25,26,53,80,110,143,443,465,587,993,995,2082,2083,2086″
IG_TCP_CPORTS=”20,21,22,25,53,80,81,110,143,443,465,587,993,995,8443″
EG_TCP_CPORTS=”21,22,25,26,27,37,43,53,80,81,110,113,443,465,587,873,2089″
EG_UDP_CPORTS=”20,21,37,53,587,873″

Kaydedip apf yi tekrar çalıştırın :

apf -r