Centos 7 PhpMyadmin Kurulumu ve Nginx’de Güvenliği

Phpmyadmin mysql veritabanlarımızı ve kullanıcılarımızı uzaktan erişip yönetmek için kullandığımız web tabanlı bir client yazılımı. Birçok sunucuda karşımıza çıkacağından mysql kullanacak birisinin phpmyadmin’e de hakim olması önemlidir. Öncelikle yum ile centos depolarında phpmyadmin’in versiyonuna bakalım.

1
2
yum search phpmyadmin
yum info PhpMyAdmin

Kendi web sitelerinde genelde daha güncel sürümler oluyor. Ben sitelerinden indirip öyle kurmayı daha güvenli buluyorum. Sonuçta daha güncel sürüm oluyor. Şu şekilde indirelim.

1
2
3
4
cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/4.7.4/phpMyAdmin-4.7.4-all-languages.zip
unzip phpMyAdmin-4-7-3-all-languages.zip
(NOT: unzip yoksa önce 'yum install unzip' yapın.)

tmp klasörü içerisine phpMyAdmin-4.7.4-all-languages adında bir klasöre dosyaları açtı. PhpMyAdmin yine php dosyalarından oluşan bir yapı, yani bir kurulum setup’ı yok. Bu klasörü ben nginx kullandığımızı varsayarak /usr/share/nginx/ içine taşıyoruz. Eğer web server olarak apache kullanıyorsanız çok birşey değişmeyecektir. Ancak, dosyaları apache’nin default veya tanımladığınız web dizinine taşımanız gerekiyor.

1
mv phpMyAdmin-4.7.4-all-languages /usr/share/nginx/

phpmyadmin dosyalarını herhangi bir başka klasöre de alabiliriz. Ben kuracağım her domainden sonra /phpmyadmin yazdığımda erişmek istiyorum. Bu nedenle nginx’in standart baktığı klasörün altında attım. Atmasam da olurdu ama kafa karıştırmamak için çok detaya girmiyorum. Attığımız klasör adını da değiştirelim.

1
2
3
4
cd /usr/share/nginx
mv phpMyAdmin-4.7.4-all-languages/ phpmyadmin/
chown -R nginx:nginx /usr/share/nginx/phpmyadmin
ls

Şimdi, şuan http://domainadi.com/phpmyadmin yazdığımızda girmeyecek çünkü nginx tarafında bunun ayarlarını yapmamız gerekiyor. Aşağıdaki adımları takip edelim.

1
cd /etc/nginx

nginx klasörü altında default.d adında bir klasör mevcut. phpmyadmin’in her domain sonunda çalışması için bir dosya oluşturacağı ve o dosyayı her domainadi.com.conf dosyalarına include edeceğiz.

1
2
cd default.d/
nano phpmyadmin.conf

phpmyadmin.conf dosyasına aşağıdaki komutları yapıştırın. Bunları da gerekirse tek tek anlatabilirim ama çok detaya girmek istemediğimden dolayı özet geçiyorum. Nginx konusunda kendi sitesinden de yardım alabilirsiniz. Örneğin location /phpmyadmin ile başlayan güzel parantez arasındaki komutlar bizim http://www.domainadi.com/phpmyadmin yazdığımızda phpmyadmin’e ulaşmamızı sağlayacaktır.

# conf/phpmyadmin.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
location /phpmyadmin {
           root /usr/share/nginx/;
           index index.php index.html index.htm;
           location ~ ^/phpmyadmin/(.+\.php)$ {
                   try_files $uri =404;
                   root /usr/share/nginx/;
                   fastcgi_pass unix:/run/php-fpm/php7.1-fpm.sock;
                   fastcgi_index index.php;
                   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                   include /etc/nginx/fastcgi_params;
           }
           location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                   root /usr/share/nginx/;
           }
}
location /phpMyAdmin {
           rewrite ^/* /phpmyadmin last;
}

dosyayı kaydedip çıkalım.

nginx’in çalışıp çalışmadığını kontrol edelim ve restart yapalım. nginx -t komutu çok kurtarıcıdır. nginx’de bir ayarda hata yaptık diyelim, direkt restart ettiğimizde önce servisi stop edecek ardından çalıştırmaya çalışacak. Eğer hata varsa çalıştırmayacak, çalıştırmayacağı için de web sayfalarımız çalışmayacak.

1
2
nginx -t
systemctl restart nginx

Normal şartlarda NGINX kurulumunda anlattığımız şekilde bir domain conf dosyası oluşturduysanız. Nginx’i tekrar restart ettiğimizde http://www.domainadi.com/phpmyadmin yazdığımızda erişiyor olmamız lazım. (Tabi bir session hatası verecek onu düzelteceğiz). Eğer ulaşmıyorsa nginx’in domain conf dosyasında bir hata olabilir. En güzeli log dosyalarına bakmak. (tail /var/log/nginx/…)

Phpmyadmin Session Hatası
session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13) bu şekilde bir hata ile karşılaştıysanız ki çok muhtemel. Phpmyadmin’e girdiğimizde bir session dosyası oluşturmaya çalışıyor ancak bunu oluşturamıyor demektir. session klasörüne erişim izni bulunmadığından bu hatayı veriyor. Aşağıdaki adımları takip edelim.

1
2
cd /var/lib/php
chown nginx:nginx session

Yukarıda yaptığımız şey şu: session klasörüne erişim hakkını nginx’e verdik.

Tekrar kontrol edelim.

http://www.domainadi.com/phpmyadmin

Artık giriş yapabiliyor olmamız lazım. Kullanıcı adı ve şifre paneli açılmış olması lazım. Mysql kurulumu sırasında root’a verdiğimiz şifre ile giriş yapmayı deneyelim.

Giriş yapabildik ama blowfish_secret hatası alıyor olmamız lazım. Onu da halledeceğiz.

http://www.domainadi.com/phpmyadmin/setup

giriş yapalım. Burası phpmyadmin’in ayarlarının yapıldığı kısım. Burada bize güvenlik için https kullanmamız lazım falan diyor. Blowfish ile ilgili bir de uyarı vermesi lazım. Sol kısımdan Features ve oradan da Security kısmına girdiğimizde Blowfish’deki karakterleri bir yere kopyalayalım.

1
2
3
cd /usr/share/nginx/phpmyadmin
mv config.sample.inc.php config.inc.php
nano config.inc.php
1
$cfg['blowfish_secret'] = '';

iki tırnak arasına yapıştıralım.

Örnek: $cfg[‘blowfish_secret’] = ‘SDFGHER%%&%&/dfgss4545’

kaydedip çıkalım.

Blowfish dediği, özetle, phpmyadmin’in oluşturacağı cookie’leri şifrelemesidir.

En son olarak;

http://www.domainadi.com/phpmyadmin dediğimizde giriş yapabiliyor olmamız lazım.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Güvenlik Sorusu *