SAMBA
Samba Nedir?

Samba, Linux ve Unix işletim sistemleri ile Windows NT ve Windows 9x işletim sistemleri arasındaki iletişimi sağlayan bir ağ sunucusu uygulamasıdır. İstediğiniz klasörleri okuma, yazma gibi izinler vererek bir paylaşım ağı kurabilirsiniz. Linux üzerinde oluşturduğunuz kullanıcıları belirli gruplar dahilinde paylaşım izinleri vererek düzenli bir ağ paylaşımı oluşturabilirsiniz.Samba yüklü bir makinenin sağladığı tek avantajı o makineye ağ üzerinden windows makineleri ile ulaşabilmek değildir. Samba yüklü bir linux makine; yazıcı sunucu, dosya sunucu, PDC (primary domain controller), WINS sunucu, local master browser, domain browser görevlerini de yapabilir.
Ön Koşullar
- OS Ubuntu 20.04
Samba Kurulum
Ubuntu için;
sudo apt install samba -y
Centos için;
yum install samba samba-client samba-common -y
Yüklemeden sonra, yapılandırma dosyasını yedekleyin.
cd /etc/samba
sudo cp smb.conf smb.conf.bak
Firewall Konfigürasyon
Kurulum tamamlandıktan sonra varsayılan olarak güvenlik duvarınız tarafından samba engellenir. Firewall tarafından gerekli izinleri vermeniz gerekmektedir. Ardından firewall servislerini yeniden başlatalım.
Ubuntu için;
sudo ufw allow samba
sudo ufw reload
Centos için;
sudo firewall-cmd --add-service=samba --permanentfirewall-cmd --add-service=samba --permanent
sudo firewall-cmd --reload
Eğer sisteminizde Selinux aktif ise aşağıdaki kaynaklardan faydalanarak gerekli düzenlemeleri yapabilirsiniz.
Samba Konfigürasyon
Dosyaları Samba aracılığıyla paylaşmak üzere yeni bir dizin oluşturmak için mkdir yardımcı programını kullanalım. Bu işlem ile home dizinine, paylasim isminde bir dizin oluşturacaktır.
sudo mkdir /home/paylasim
Samba konfigürasyon dosyası /etc/samba/smb.conf yolunda bulunmaktadır. Biraz önce oluşturduğumuz /home/paylasim dizini Samba aracılığıyla paylaşmak için bu dosyanın en altına aşağıdakilerini ekleyelim ve kayıt edelim.
sudo vi /etc/samba/smb.conf
[paylasim]
path = /home/paylasim
public = yes
writable = yes

Dosyadaki gerekli düzenlemeleri yaptıktan sonra, son olarak paylaşıma açtığımız dizininin izinlerini geçiçi olarak tüm yetkileri vererek ayarlayalım.
sudo chmod 777 /home/paylasim

Yukarıda ki işlemleri tamamladıktan sonra, paylaşım süreci 1-2 dk sürebilir.
Şimdi yaptığımız işlemleri test edelim. Test işlemi için aslında ufak bir komut yazmamız yeterlidir. Yaptığınız tanımların detaylı dökümlerini almak için ise komutu çalıştırdıktan sonra Enter tuşuna basınız.
testparm

Windows olan bir makinada windows + R kombinasyonunu kullanarak çalıştır kısmını açıyorum. Buraya samba sunucumuzun ip adresini yazıyoruz.
\\ipadresim

Paylaşıma açtığımız klasörü görmekteyiz. Gerekli izinleri sağladığım için çift tıklayarak klasörün içine gidiyorum.

Klasörün içine bir text dosyası oluşturup herhangi bir şeyler yazıp kayıt ediyorum.

Ardından sunucuya gelip, dosyanın oluşturulması ve içeriğinin gözüktüğünü kontrol edelim.

İşlemlerin başarılı olduğunun testini gerçekleştirdik. Şimdi ise smb.conf dosyasının içeriğinden kısaca bahsedelim.
[paylasim] ⇒ ⇒ ⇒ İştemci tarafından görünen isim.
path = paylaşıma açılacak dizin.
public = tüm kullanıcılar erişebilmesi belirlenir.
writable = paylaşım verilen alana veri yazılabilmesini belirler.
Parola Korumalı Samba Konfigürasyonu
Bazı özel durumlarda, kritik dizinlerini açmanız gerekebilir. Bu dizinlere her kullanıcının erişmemesi için parola korumalı olması gerekmektedir. Bu uygulamamızda bir dizini parola korumalı olarak açalım.
Bir Samba dosya sistemini bağlamak için bir Samba hesabı gereklidir. Örneğin, Linux kullanıcısı testuser1 için bir Samba hesabı oluşturun. Sunucunuzda olan bir kullanıcıyı kullanabilirsiniz veya yeni bir kullanıcı oluşturabilirsiniz. Samba hesabınında sonra kullanıcınıza bir parola vermeniz gerekmektedir. Kullanıcı oluştururken aşağıdaki parametreler sayesinde kullanıcı sadece samba erişimini gerçekleştirebilecek. Makina üzerinde oturum açamaz.
sudo sudo useradd -Mls /sbin/nologin testuser1
sudo smbpasswd -a testuser1

Bir dizin oluşturalım.
sudo mkdir /secured
Bu kısıma kadar yaptığımız değişiklikler ile belirlediğiniz kullanı dizine erişebilir ancak herhangi bir şey yazamaz ve silemez. Şimdi bu işlemleri yapması için, gerekli izinleri sağlayalım. Dizinin kullanıcı ve grup sahipliğini direkt olarak oluşturduğum kullanıcıya aktarıyorum.
chown -R testuser1:testuser1 /secured

Samba konfigürasyon dosyası /etc/samba/smb.conf yolunda bulunmaktadır. Samba aracılığıyla paylaşmak için bu dosyanın en altına aşağıdakilerini ekleyelim ve kayıt edelim.
sudo vi /etc/samba/smb.conf
[secured]
path = /secured
writable = yes
valid users = testuser1

Şimdi test edelim.

Eğer windows tarafından bağlantı yaparken kullanıcı bilgilerinizi girdikten sonra hata alırsanız, CMD'yi yönetici olarak çalıştırıp aşağıdaki komutları çalıştırınız.
net stop workstation /y
net start workstation /y


/etc gibi dizinleri paylaşılıma açılacak ise, kullanıcıyı sudoers dosyasına ekleyip, windows tarafında Notepad ++ plus kullanarak dosyaları editleyebilirsiniz.
İzin verilen kullanıcı türlerinin bir listesini görmek için aşağıdaki komutu kullanabiliriz.
pdbedit -L -v

Samba Servisleri
Servisleri, sunucu restart sonrası açılması için öncelikle enable durumuna getirelim. Ardından start ve restart işlemlerini gerçekleştirelim. Aslında ubuntu tarafı için bu işlemlerin bir çoğu otomatik olarak gerçekleşmektedir.
Ubuntu için;
sudo systemctl enable smbd
sudo systemctl enable nmbd
sudo systemctl start smbd
sudo systemctl start nmbd
sudo systemctl restart smbd
sudo systemctl restart nmbd
Centos için;
sudo systemctl enable nmb
sudo systemctl enable smb
sudo systemctl start nmb
sudo systemctl start smb
sudo systemctl restart nmb
sudo systemctl restart smb
Servislerin durumunu görmek için aşağıdaki komutu kullanabilirsiniz. Örnek;
sudo systemctl status nmd
SMB CONF Dosyası
[paylasim] ⇒ ⇒ ⇒ Paylaşım adı yani, iştemci tarafından görünen isim. Ağ üzerinde gözükmemesi için [paylasim$] şeklinde yapılandırabilirsiniz.
path = /directory paylaşıma açılacak dizin.
public = yes/no tüm kullanıcılar erişebilmesi belirlenir.
writable = yes/no paylaşım verilen alana veri yazılabilmesini belirler.
valid user = kullanıcı_adi veya @grup_adi belirli kullanıcıya veya grub'a izin vermek için kullanılır.