Karma ortamlarda çalışan her sysadmin’in er ya da geç karşılaştığı problem şudur: Windows kullanıcıları Linux sunucusundaki dosyalara nasıl erişecek, ya da tam tersi? Bu sorunun en olgun ve güvenilir cevabı neredeyse her zaman Samba oluyor. Samba, SMB/CIFS protokolünü Linux üzerinde implement eden açık kaynaklı bir yazılım ve onlarca yıldır production ortamlarında canla başla çalışıyor. Bu yazıda Samba’yı sıfırdan kurup yapılandıracağız, güvenlik ayarlarını doğru yapacağız ve gerçek dünya senaryolarına uygun paylaşım yapıları oluşturacağız.
Samba Nedir ve Neden Kullanmalısınız?
Samba, temelde SMB (Server Message Block) protokolünün açık kaynak implementasyonudur. Windows makineler birbirleriyle dosya paylaşırken bu protokolü kullanır. Samba sayesinde Linux sunucunuz Windows ağında sanki bir Windows dosya sunucusuymuş gibi görünür. Kullanıcılar Explorer’dan sunucuya bağlanabilir, dosya sürükleyip bırakabilir, klasörleri network drive olarak map edebilir.
Peki neden NFS değil de Samba? Eğer ortamınızda sadece Linux makineler varsa NFS kesinlikle daha performanslı ve daha az overhead’li bir seçenek. Ama Windows istemcileriniz varsa ya da karma bir ortam yönetiyorsanız, Samba vazgeçilmez oluyor. Active Directory entegrasyonu, kullanıcı bazlı izinler ve Windows’un nativeolarak tanıması büyük avantajlar.
Kurulum
Debian/Ubuntu tabanlı sistemlerde kurulum son derece basit:
sudo apt update
sudo apt install samba samba-common-bin -y
# Servis durumunu kontrol et
sudo systemctl status smbd
sudo systemctl status nmbd
Red Hat/CentOS/Rocky Linux için:
sudo dnf install samba samba-common samba-client -y
# Servisleri başlat ve enable et
sudo systemctl enable --now smbd nmbd
sudo systemctl enable --now smb nmb
Kurulumdan sonra yapılandırma dosyasının yedeğini almayı unutmayın. Bu alışkanlık sizi bir gün kurtaracak:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
smb.conf Dosyasını Anlamak
Samba’nın tüm yapılandırması /etc/samba/smb.conf dosyasında toplanır. Bu dosya ini formatındadır ve iki ana bölümden oluşur: [global] bölümü ve paylaşım tanımları.
[global] bölümünde sunucunuzun genel davranışını belirlersiniz. Paylaşım tanımlarında ise hangi dizinin, kimlerle, hangi izinlerle paylaşılacağını yazarsınız.
Yapılandırmayı doğrulamak için testparm komutu kullanılır. Herhangi bir değişiklik yaptıktan sonra bu komutu çalıştırın:
sudo testparm
sudo testparm -s # Sessiz mod, sadece aktif ayarları gösterir
Temel Yapılandırma: Basit Dosya Paylaşımı
En yaygın senaryo ile başlayalım: Bir dizini ağdaki herkese salt okunur ya da yazılabilir olarak açmak. Önce paylaşılacak dizini oluşturup izinlerini ayarlayalım:
# Paylaşım dizini oluştur
sudo mkdir -p /srv/samba/public
sudo chmod 777 /srv/samba/public
sudo chown nobody:nogroup /srv/samba/public
Şimdi /etc/samba/smb.conf dosyasını düzenleyelim:
sudo nano /etc/samba/smb.conf
Dosyanın içeriği şöyle olmalı:
[global]
workgroup = WORKGROUP
server string = Dosya Sunucusu
netbios name = FILESERVER
security = user
map to guest = bad user
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
[public]
comment = Genel Paylaşım Klasörü
path = /srv/samba/public
browseable = yes
writable = yes
guest ok = yes
guest only = yes
create mask = 0664
directory mask = 0775
Yapılandırmayı kaydedip servisi yeniden başlatın:
sudo testparm
sudo systemctl restart smbd nmbd
Windows tarafından erişmek için Explorer adres çubuğuna \SUNUCU-IP ya da \FILESERVER yazmanız yeterli.
Kullanıcı Tabanlı Güvenli Paylaşım
Production ortamlarında guest erişim pek tercih edilmez. Kullanıcı adı ve şifre ile erişilen güvenli paylaşımlar çok daha yaygın. Samba kendi kullanıcı veritabanını tutar, bu nedenle önce sistem kullanıcısı oluşturup sonra bunu Samba’ya ekleriz:
# Sistem kullanıcısı oluştur (shell olmadan, sadece dosya erişimi için)
sudo useradd -M -s /sbin/nologin ahmet
sudo useradd -M -s /sbin/nologin ayse
# Samba şifresi belirle
sudo smbpasswd -a ahmet
sudo smbpasswd -a ayse
# Kullanıcıları aktif et
sudo smbpasswd -e ahmet
sudo smbpasswd -e ayse
Kullanıcıların paylaşım dizini:
sudo mkdir -p /srv/samba/private
sudo chown root:root /srv/samba/private
sudo chmod 770 /srv/samba/private
smb.conf dosyasına güvenli paylaşım ekleyin:
[private]
comment = Yetkili Kullanıcı Alanı
path = /srv/samba/private
valid users = ahmet ayse
browseable = yes
writable = yes
read only = no
create mask = 0660
directory mask = 0770
guest ok = no
Grup Tabanlı İzin Yönetimi
Büyük ortamlarda kullanıcı listesini tek tek yazmak yerine Linux gruplarını kullanmak çok daha sürdürülebilir bir yaklaşım. Mesela muhasebe departmanı için özel bir paylaşım oluşturalım:
# Grup oluştur
sudo groupadd muhasebe
# Kullanıcıları gruba ekle
sudo usermod -aG muhasebe ahmet
sudo usermod -aG muhasebe fatma
# Paylaşım dizinini grupla ilişkilendir
sudo mkdir -p /srv/samba/muhasebe
sudo chown root:muhasebe /srv/samba/muhasebe
sudo chmod 2770 /srv/samba/muhasebe
# 2770: setgid bit, yeni dosyalar da grup sahibine ait olur
smb.conf dosyasına eklenecek bölüm:
[muhasebe]
comment = Muhasebe Departmanı
path = /srv/samba/muhasebe
valid users = @muhasebe
browseable = no
writable = yes
create mask = 0660
directory mask = 2770
guest ok = no
write list = @muhasebe
@muhasebe: @ işareti Linux grubunu ifade eder. Bu şekilde gruba yeni kullanıcı eklediğinizde smb.conf dosyasını düzenlemenize gerek kalmaz.
browseable = no: Paylaşım ağda listelenmez ama doğrudan path yazarak erişilebilir. Gizli departman klasörleri için güzel bir trick.
write list: Sadece bu listedekiler yazma iznine sahip, diğer valid users salt okunur erişir.
Kullanıcıya Özel Home Dizini Paylaşımı
Her kullanıcının kendi home dizinine Samba üzerinden erişmesi sık kullanılan bir senaryo. Samba bunu [homes] bölümüyle neredeyse otomatik halleder:
[homes]
comment = Kişisel Dosyalar
browseable = no
read only = no
create mask = 0700
directory mask = 0700
valid users = %S
%S: Bağlanan kullanıcının adını temsil eden Samba değişkeni. Ahmet bağlandığında /home/ahmet dizinini görür, Ayşe bağlandığında kendi home’unu görür. Zarif ve pratik.
Güvenlik Duvarı Ayarları
Samba birden fazla port kullanır. Güvenlik duvarını doğru yapılandırmazsanız bağlantı sorunları yaşarsınız:
# UFW ile (Ubuntu/Debian)
sudo ufw allow samba
sudo ufw status
# firewalld ile (CentOS/Rocky)
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
# Manuel port açma (iptables)
sudo iptables -A INPUT -p tcp --dport 445 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 139 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 137 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 138 -j ACCEPT
Samba’nın kullandığı portlar:
- 137/UDP: NetBIOS isim servisi
- 138/UDP: NetBIOS datagram servisi
- 139/TCP: NetBIOS session servisi (eski SMB)
- 445/TCP: Microsoft-DS (modern SMB, NetBIOS olmadan)
SELinux ile Uyum
CentOS, Rocky Linux veya RHEL kullanıyorsanız SELinux devredeyse Samba paylaşımlarının çalışması için ek adımlar gerekir:
# SELinux durumunu kontrol et
getenforce
sestatus
# Samba için SELinux boolean'larını aktif et
sudo setsebool -P samba_enable_home_dirs on
sudo setsebool -P samba_export_all_rw on
# Paylaşım dizinine SELinux context ata
sudo chcon -t samba_share_t /srv/samba/public -R
# Ya da kalıcı olarak:
sudo semanage fcontext -a -t samba_share_t "/srv/samba/public(/.*)?"
sudo restorecon -Rv /srv/samba/public
SELinux’u tamamen kapatmak yerine bu şekilde doğru context’i atamak çok daha güvenli bir yaklaşım. Production’da SELinux’u disable etmek kötü bir pratik.
Samba İstemci Kullanımı (Linux Tarafından Erişim)
Linux makinelerden Samba paylaşımlarına bağlanmak için smbclient kullanabilirsiniz:
# Paylaşımları listele
smbclient -L //192.168.1.100 -U ahmet
# Paylaşıma bağlan (interaktif mod)
smbclient //192.168.1.100/public -U ahmet
# Dosya kopyala
smbclient //192.168.1.100/muhasebe -U ahmet -c "get rapor.xlsx /tmp/rapor.xlsx"
# Mount et (kalıcı erişim için)
sudo mount -t cifs //192.168.1.100/public /mnt/samba -o username=ahmet,password=sifre,uid=1000,gid=1000
# fstab ile kalıcı mount
echo "//192.168.1.100/public /mnt/samba cifs credentials=/etc/samba/.credentials,uid=1000,gid=1000,_netdev 0 0" | sudo tee -a /etc/fstab
Credentials dosyası oluşturun (şifreyi fstab’a yazmayın):
sudo nano /etc/samba/.credentials
İçeriği:
username=ahmet
password=gizlisifre
domain=WORKGROUP
sudo chmod 600 /etc/samba/.credentials
Log Yönetimi ve Sorun Giderme
Samba log dosyaları /var/log/samba/ altında tutulur. Her makine için ayrı log dosyası oluşturulur:
# Genel log
tail -f /var/log/samba/log.smbd
# Belirli bir makine için log
tail -f /var/log/samba/log.WINDOWS-PC
# Aktif bağlantıları görüntüle
sudo smbstatus
# Aktif bağlantıları ve kilitleri göster
sudo smbstatus -L
sudo smbstatus -S
# NetBIOS isimlerini sorgula
nmblookup -A 192.168.1.100
Bağlantı sorunlarında debug seviyesini artırabilirsiniz:
# smb.conf'ta global bölümüne ekle
log level = 3
# Servisi yeniden başlat ve loglara bak
sudo systemctl restart smbd
tail -f /var/log/samba/log.smbd
Gerçek Dünya Senaryosu: Şirket Dosya Sunucusu
Küçük-orta ölçekli bir şirkette tipik bir yapı oluşturalım. IT, Muhasebe ve Genel olmak üç bölüm var ve her birinin kendi alanı olacak:
# Dizin yapısını oluştur
sudo mkdir -p /srv/fileserver/{genel,it,muhasebe,yedek}
# Grupları oluştur
sudo groupadd it-dept
sudo groupadd muhasebe-dept
# Dizin izinlerini ayarla
sudo chown root:root /srv/fileserver/genel
sudo chmod 777 /srv/fileserver/genel
sudo chown root:it-dept /srv/fileserver/it
sudo chmod 2770 /srv/fileserver/it
sudo chown root:muhasebe-dept /srv/fileserver/muhasebe
sudo chmod 2770 /srv/fileserver/muhasebe
Kapsamlı smb.conf yapılandırması:
[global]
workgroup = SIRKET
server string = Sirket Dosya Sunucusu v%v
netbios name = FILESERVER
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
log file = /var/log/samba/log.%m
max log size = 5000
log level = 1
server min protocol = SMB2
ntlm auth = ntlmv2-only
map to guest = never
invalid users = root
[genel]
comment = Tum Calisanlara Acik Alan
path = /srv/fileserver/genel
browseable = yes
writable = yes
guest ok = no
valid users = @it-dept @muhasebe-dept
create mask = 0664
directory mask = 0775
[it]
comment = IT Departmani - Yetkisiz Giris Yasaktir
path = /srv/fileserver/it
browseable = no
writable = yes
valid users = @it-dept
read only = no
create mask = 0660
directory mask = 2770
[muhasebe]
comment = Muhasebe Departmani
path = /srv/fileserver/muhasebe
browseable = no
writable = yes
valid users = @muhasebe-dept
read only = no
create mask = 0660
directory mask = 2770
[homes]
comment = Kisisel Dizin
browseable = no
writable = yes
valid users = %S
create mask = 0700
directory mask = 0700
Önemli güvenlik parametreleri:
- server min protocol = SMB2: SMB1 protokolünü devre dışı bırakır. SMB1 çok eski ve güvensiz, WannaCry bu protokolü kullanmıştı.
- ntlm auth = ntlmv2-only: Sadece NTLMv2 kimlik doğrulamasına izin verir.
- invalid users = root: Root hesabıyla Samba üzerinden giriş yapılamaz.
- map to guest = never: Başarısız girişler guest olarak yönlendirilmez.
Performans Optimizasyonu
Büyük dosyalar transferi ya da yoğun kullanım durumunda bazı ayarlar işe yarar:
[global]
# Socket seçenekleri
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
# Read/Write boyutları
read raw = yes
write raw = yes
max xmit = 65535
# Oplocks - dosya kilitleme performansı
oplocks = yes
level2 oplocks = yes
# Async I/O
aio read size = 16384
aio write size = 16384
Kullanıcı Yönetimi için Pratik Komutlar
Günlük operasyonlarda kullanacağınız komutlar:
# Tüm Samba kullanıcılarını listele
sudo pdbedit -L
# Kullanıcı detaylarını gör
sudo pdbedit -L -v ahmet
# Kullanıcı şifresini değiştir
sudo smbpasswd ahmet
# Kullanıcıyı devre dışı bırak (silinmeden)
sudo smbpasswd -d ahmet
# Kullanıcıyı yeniden aktif et
sudo smbpasswd -e ahmet
# Kullanıcıyı tamamen sil
sudo smbpasswd -x ahmet
Sonuç
Samba, doğru yapılandırıldığında production ortamında son derece güvenilir çalışan bir çözüm. Bu yazıda temel kurulumdan başlayıp güvenli kullanıcı yönetimine, SELinux uyumuna ve gerçek bir şirket senaryosuna kadar geniş bir yelpazeyi ele aldık.
Dikkat etmeniz gereken kritik noktaları özetleyelim: SMB1’i mutlaka kapatın, şifreyi hiçbir zaman fstab’a düz metin olarak yazmayın, credentials dosyalarının izinlerini 600 yapın, SELinux’u kapatmak yerine doğru context atayın ve production’a almadan önce testparm ile yapılandırmayı doğrulayın.
Samba kurulumu bir seferlik iş değil. Kullanıcı eklendiğinde, grup değiştiğinde, dizin yapısı büyüdüğünde düzenli bakım gerekiyor. Log dosyalarını takip etmek, smbstatus ile aktif oturumları kontrol etmek ve periyodik güvenlik güncellemelerini uygulamak bu bakımın parçası.
Daha karmaşık senaryolara, örneğin Active Directory’ye join etmeye ya da Kerberos ile entegrasyona geçmeyi planlıyorsanız, temel Samba yapısını iyi anlamak o süreçte size çok yardımcı olacak. Önce bunu sağlam kurun, sonra üstüne inşa edin.