Linux Sunucu Yönetimi: Temel Komutlar ve Otomasyon
Linux Sunucu Yönetimine Giriş
Linux sunucu yönetimi, modern yazılım altyapısının temel taşlarından biridir. Bulut bilişimden konteyner teknolojilerine kadar pek çok alanda Linux sunucular kritik rol oynar. Bu yazıda, bir sistem yöneticisinin günlük işlerinde sıklıkla kullandığı temel komutları, otomasyon tekniklerini ve en iyi uygulamaları detaylı şekilde inceleyeceğiz.
Sistem Bilgisi ve İzleme Komutları
Bir sunucuyu yönetmenin ilk adımı, sistemin mevcut durumunu anlamaktır. Aşağıdaki komutlar bu konuda en sık başvuracağınız araçlardır:
Sistem Kaynaklarını İzleme
top/htop— Anlık CPU, bellek kullanımı ve çalışan süreçleri görüntüler.htop, renkli ve etkileşimli arayüzüyle daha kullanışlıdır.free -h— RAM ve swap kullanımını okunabilir formatta gösterir.df -h— Disk bölümlerinin doluluk oranlarını listeler.du -sh /var/log/*— Belirli dizinlerin disk kullanımını özetler.uptime— Sunucunun ne zamandır çalıştığını ve yük ortalamasını gösterir.
Örneğin, sunucunuzun bellek durumunu hızlıca kontrol etmek için:
free -h
Bu komut size toplam, kullanılan ve boş bellek miktarını megabayt/gigabayt cinsinden gösterecektir. Load average değerleri ise CPU çekirdek sayınızla orantılı yorumlanmalıdır; 4 çekirdekli bir sunucuda 4.0 load average, %100 kullanım anlamına gelir.
Ağ Durumunu İzleme
ss -tulnp— Açık portları ve dinleyen servisleri listeler. Eskinetstatkomutunun modern karşılığıdır.ip addr show— Ağ arayüzlerini ve IP adreslerini gösterir.curl -I https://example.com— Bir URL'ye HTTP HEAD isteği göndererek yanıt başlıklarını kontrol eder.ping -c 4 8.8.8.8— Ağ bağlantısını ve gecikmeyi test eder.
Kullanıcı ve Yetki Yönetimi
Sunucu güvenliğinin en önemli bileşenlerinden biri, kullanıcı ve dosya izinlerinin doğru yapılandırılmasıdır.
Kullanıcı İşlemleri
Yeni bir kullanıcı oluşturmak ve sudo yetkisi vermek için:
useradd -m -s /bin/bash yenikullanici
passwd yenikullanici
usermod -aG sudo yenikullanici
-m parametresi ev dizinini otomatik oluşturur, -s ise varsayılan kabuğu belirler. Güvenlik açısından, doğrudan root ile giriş yapmak yerine sudo mekanizmasını kullanmak her zaman tercih edilmelidir.
Dosya İzinleri
Linux'ta dosya izinleri üç katmandan oluşur: sahip (owner), grup (group) ve diğerleri (others). Her katman için okuma (r=4), yazma (w=2) ve çalıştırma (x=1) yetkileri tanımlanır.
chmod 750 /opt/uygulama
chown www-data:www-data /var/www/html -R
Yukarıdaki örnekte 750 izni; sahibine tam yetki (7), gruba okuma ve çalıştırma (5), diğerlerine ise hiçbir yetki vermez (0). Hassas yapılandırma dosyaları için 600 veya 400 izinleri kullanılmalıdır.
Servis ve Süreç Yönetimi
Modern Linux dağıtımlarının büyük çoğunluğu systemd init sistemini kullanır. Servisleri yönetmek için systemctl komutu kullanılır:
systemctl start nginx— Servisi başlatır.systemctl stop nginx— Servisi durdurur.systemctl restart nginx— Servisi yeniden başlatır.systemctl enable nginx— Sunucu açılışında otomatik başlatılmasını sağlar.systemctl status nginx— Servisin durumunu ve son log çıktılarını gösterir.
Bir servisin loglarını detaylı incelemek için journalctl kullanılır:
journalctl -u nginx --since "1 hour ago" --no-pager
Süreçleri yönetmek için ise ps aux, kill ve pkill komutları sıklıkla kullanılır. Yanıt vermeyen bir süreci sonlandırmak için kill -9 PID kullanılabilir, ancak bu son çare olmalıdır; önce kill -15 (SIGTERM) ile nazikçe kapatma denenmelidir.
Log Yönetimi ve Analiz
Sunucu logları, sorun giderme ve güvenlik denetimi için vazgeçilmezdir. Temel log dosyaları /var/log/ dizininde bulunur:
/var/log/syslogveya/var/log/messages— Genel sistem logları/var/log/auth.log— Kimlik doğrulama ve giriş denemeleri/var/log/nginx/access.log— Web sunucusu erişim kayıtları
Logları analiz etmek için güçlü komut satırı araçları kullanılabilir:
# Son 50 satırı canlı takip et
tail -f -n 50 /var/log/syslog
# Belirli bir kalıbı ara
grep "Failed password" /var/log/auth.log | tail -20
# IP adreslerine göre erişim sayısını hesapla
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
Son örnekteki komut zinciri, Nginx erişim loglarından en çok istek gönderen 10 IP adresini listeler — brute-force saldırılarını veya anormal trafik kaynaklarını tespit etmek için oldukça faydalıdır.
Otomasyon: Cron ve Bash Script'leri
Tekrar eden görevleri otomatikleştirmek, sistem yönetiminin en kritik parçasıdır. Linux'ta zamanlanmış görevler için cron kullanılır.
Cron Görevleri
Cron ifadesi beş alandan oluşur: dakika, saat, gün, ay, haftanın günü. Crontab düzenlemek için crontab -e komutu kullanılır:
# Her gün gece 02:00'de veritabanı yedeği al
0 2 * * * /opt/scripts/db_backup.sh >> /var/log/backup.log 2>&1
# Her 5 dakikada disk kullanımını kontrol et
*/5 * * * * /opt/scripts/disk_check.sh
# Her pazartesi sabah 08:00'de haftalık rapor gönder
0 8 * * 1 /opt/scripts/weekly_report.sh
2>&1 ifadesi, hata çıktısını da standart çıktıyla birlikte log dosyasına yönlendirir; bu sayede oluşabilecek hatalar kaybolmaz.
Pratik Bir Yedekleme Script'i
Aşağıda, veritabanı ve dosya yedeği alan, eski yedekleri temizleyen bir Bash script'i örneği bulunmaktadır:
#!/bin/bash
set -euo pipefail
BACKUP_DIR="/backup/$(date +%Y-%m-%d)"
RETENTION_DAYS=7
DB_NAME="uygulama_db"
mkdir -p "$BACKUP_DIR"
# PostgreSQL yedeği
pg_dump "$DB_NAME" | gzip > "$BACKUP_DIR/db_${DB_NAME}.sql.gz"
# Uygulama dosyaları yedeği
tar czf "$BACKUP_DIR/app_files.tar.gz" /var/www/html/
# Eski yedekleri temizle
find /backup/ -maxdepth 1 -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
echo "[$(date)] Yedekleme tamamlandi: $BACKUP_DIR"
set -euo pipefail satırı son derece önemlidir: herhangi bir komut başarısız olursa script'in devam etmesini engeller. Üretim ortamında çalışan script'lerde bu satır mutlaka bulunmalıdır.
Güvenlik Temelleri
Sunucu güvenliği, yapılandırma anında başlar ve sürekli bir süreçtir. Aşağıdaki adımlar temel güvenlik katmanını oluşturur:
SSH Sertleştirme
/etc/ssh/sshd_config dosyasında yapılması gereken kritik değişiklikler:
PermitRootLogin no
PasswordAuthentication no
Port 2222
MaxAuthTries 3
AllowUsers deployer admin
Parola ile girişi devre dışı bırakıp SSH anahtar çifti kullanmak, brute-force saldırılarına karşı en etkili önlemdir.
Firewall Yapılandırması
UFW (Uncomplicated Firewall) ile temel kurallar:
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
Varsayılan olarak tüm gelen trafiği engelleyip yalnızca gerekli portları açmak, en az ayrıcalık ilkesinin ağ katmanındaki uygulamasıdır.
Otomatik Güvenlik Güncellemeleri
Debian/Ubuntu sistemlerde unattended-upgrades paketini etkinleştirmek, güvenlik yamalarının otomatik uygulanmasını sağlar:
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
İleri Düzey Otomasyon Araçları
Tek bir sunucuyu yönetmek komut satırıyla mümkündür, ancak onlarca veya yüzlerce sunucuyu yönetmek için yapılandırma yönetimi araçları gerekir:
- Ansible — Agentsız çalışır, YAML tabanlı playbook'larla sunucu yapılandırmasını tanımlar. Öğrenme eğrisi düşüktür ve SSH üzerinden çalıştığı için ek kurulum gerektirmez.
- Terraform — Altyapıyı kod olarak (Infrastructure as Code) tanımlamak için kullanılır. Bulut kaynaklarını oluşturmak ve yönetmek için idealdir.
- Docker / Podman — Uygulama konteynerizasyonu sayesinde "benim makinemde çalışıyor" sorununu ortadan kaldırır ve dağıtımı standartlaştırır.
Basit bir Ansible playbook örneği:
---
- hosts: web_servers
become: yes
tasks:
- name: Nginx kur
apt:
name: nginx
state: latest
- name: Nginx servisini baslat
systemd:
name: nginx
state: started
enabled: yes
Bu playbook, web_servers grubundaki tüm sunuculara Nginx kurar ve servisi etkinleştirir. Tek bir komutla düzinelerce sunucuyu aynı anda yapılandırabilirsiniz.
Sonuç ve Öneriler
Linux sunucu yönetimi geniş bir alan olsa da temel prensipleri şu şekilde özetleyebiliriz:
- İzleme alışkanlığı edinin — sorunları kullanıcılardan önce fark edin.
- Yedekleme stratejinizi oluşturun ve düzenli olarak geri yükleme testleri yapın.
- Güvenlik katmanlarını ihmal etmeyin; en az ayrıcalık ilkesini her düzeyde uygulayın.
- Tekrar eden her görevi otomatikleştirin — hem zaman kazanır hem de insan hatasını azaltırsınız.
- Yaptığınız her değişikliği belgelendirin; altı ay sonra neden o değişikliği yaptığınızı hatırlamayabilirsiniz.
Bu temelleri sağlam attığınızda, sunucu yönetimi karmaşık değil, sistematik bir süreç haline gelir. Küçük adımlarla başlayın, her gün bir komutu daha iyi öğrenin ve otomasyon alışkanlığını erken benimseyin.