DEV Community

Salih Su for Açıklab

Posted on • Updated on

Samba Dosya Paylaşım Temel Kavramlar

CIFS dosya paylaşımları oluşturun ve yapılandırın

CIFS (Common Internet File System)

CIFS, bilgisayar kullanıcılarının kurumsal intranetler ve İnternet üzerinden dosya paylaşmalarının standart yoludur. Kullanıcılara Linux'ler ve Windows tabanlı istemciler arasında sorunsuz dosya ve yazıcı servislerinin birlikte çalışabilirliğini sağlar.

CIFS Kullanarak Linux'ta Windows Share Nasıl Oluşturulur

Windows paylaşımlarının Linux sistemlerinde nasıl oluşturulacağını açıklayacağım.

1.CIFS Yardımcı Program Paketlerini Yükleme

Linux sistemine bir Windows paylaşımı eklemek için önce CIFS yardımcı program paketlerini yüklememiz gerekir.

sudo apt update 
sudo apt install cifs-utils
Enter fullscreen mode Exit fullscreen mode

2.CIFS Windows Paylaşımını Oluşturma

Windows paylaşımının bağlanması, normal dosya sistemlerinin bağlanmasına benzer.

İlk olarak, Windows paylaşımı için bağlama noktası görevi görecek bir dizin oluşturuyoruz.

sudo mkdir /win_paylasim
Enter fullscreen mode Exit fullscreen mode

Paylaşımı bağlamak için aşağıdaki komutu root veya sudo ayrıcalıklarına sahip kullanıcı olarak çalıştırın:

sudo mount -t cifs -o username=<kullanici>,domain=<sunucu> //<win-share-ip>/<paylasim-klasörü> /win_paylasim/
Enter fullscreen mode Exit fullscreen mode

Windows paylaşımının başarıyla bağlandığını doğrulamak için df -h komutunu kullanıyoruz.

Dosyasistemi          Boy  Dolu   Boş Kull% Bağlanılan yer
udev                 979M     0  979M    0% /dev
tmpfs                200M   15M  186M    8% /run
/dev/sda1             31G  2,5G   27G    9% /
tmpfs                998M   16K  998M    1% /dev/shm
tmpfs                5,0M     0  5,0M    0% /run/lock
tmpfs                998M     0  998M    0% /sys/fs/cgroup
tmpfs                200M     0  200M    0% /run/user/1000
//10.154.127.247/ss   32G   19G   13G   60% /win_paylasim**
Enter fullscreen mode Exit fullscreen mode

Paylaşım bağlandıktan sonra, bağlama noktası, bağlanan dosya sisteminin kök dizini olur. Artık Paylaşılan dosyalarla yerel dosyalarmış gibi çalışabiliriz.

3.Otomatik Mount Etme

Paylaşım mount komutuyla manuel olarak bağlandığında, yeniden başlatmanın ardından devam etmez. Sistem başlangıcında nereye ve hangi dosya sisteminin bağlanacağını tanımlayan bir giriş listesi /etc/fstab dosyasında bulunur.

Linux sisteminiz başladığında bir Windows paylaşımını otomatik olarak bağlamak için, /etc/fstab dosyasında bağlamayı tanımlayalım.

/etc/fstab dosyasını metin düzenleyiciyle açıyoruz:

sudo nano /etc/fstab
Enter fullscreen mode Exit fullscreen mode

Dosyaya aşağıdaki satırı ekleyin:

# <file system>   <dir>   <type> <options>  <dump>  <pass>
//win-share-ip/paylasim-klasörü  /win_paylasim  cifs  credentials=/etc/win-credentials,file_mode=0755,dir_mode=0755   0   0
Enter fullscreen mode Exit fullscreen mode

Paylaşımı bağlamak için aşağıdaki komutu çalıştıralım:

sudo mount /win_paylasim
Enter fullscreen mode Exit fullscreen mode

mount komutu, /etc/fstab dosyasının içeriğini okuyacak ve paylaşımı bağlayacaktır. Sistemi yeniden başlattığınızda, Windows paylaşımı otomatik olarak yüklenecektir.

4.Windows Paylaşımını Kaldırma

umount komutu, bağlı dosya sistemini dizin ağacından bağını kaldırır.

Bağlı bir Windows paylaşımını ayırmak için, umount komutunu ve ardından da bağlı olduğu dizini ya da uzak paylaşımını yazıyoruz:

sudo umount /win_paylasim
Enter fullscreen mode Exit fullscreen mode

CIFS bağlamasının fstab dosyasında bir girişi varsa, bu girişleri kaldırıyoruz.

Kerberos

Protokol, adını Yunan mitlerindeki efsanevi üç başlı köpek Kerberos'tan (Cerberus olarak da bilinir), yeraltı dünyasının girişindeki köpek koruyucusundan alır. Kerberos'un üç başı istemciyi, sunucuyu ve Anahtar Dağıtım Merkezi'ni (KDC) temsil eder. Kerberos, client ve server arasında; kdc (key distribution center) dan yardım alarak güvenli bir iletişimin kurulmasını sağlar.

Windows 2000 ve sonrası sürümler kimlik doğrulama metodu olarak Kerberosu kullanmaktadır. Kerberos uygulamaları, Apple OS, FreeBSD, UNIX ve Linux gibi diğer işletim sistemleri için de mevcuttur.

Kerberos'u kullanan kullanıcılar, makineler ve hizmetler, kimlik doğrulama ve bilet verme işlevlerini sağlayan tek bir işlem olarak çalışan Anahtar Dağıtım Merkezine(KDC) bağlıdır. KDC biletleri, tüm taraflara kimlik doğrulaması sunarak düğümlerin kimliklerini güvenli bir şekilde doğrulamasını sağlar. Kerberos kimlik doğrulama işlemi, ağda dolaşan paketlerin okunmasını veya değiştirilmesini engelleyen ve aynı zamanda mesajları gizlice dinleme, oynatma veya yeniden oynatma saldırılarına karşı koruyan geleneksel bir paylaşılan gizli şifreleme kullanır.

Kerberos Protokol Akışı

Kerberos iş akışında yer alan başlıca varlıklar şunlardır:

  • Client. İstemci, kullanıcı adına hareket eder ve bir hizmet talebi için iletişimi başlatır.
  • Server. Sunucu, kullanıcının erişmek istediği hizmeti barındırır.
  • Key Distribution Center (KDC). Kerberos ortamında, kimlik doğrulama sunucusu mantıksal olarak üç bölüme ayrılmıştır: Bir veritabanı (db), Kimlik Doğrulama Sunucusu (AS) ve Bilet Verme Sunucusu (TGS). Bu üç bölüm, sırayla, Anahtar Dağıtım Merkezi adı verilen tek bir sunucuda bulunur.
  • Authentication Server (AS). Kimlik doğrulama hizmeti, istenen istemci kimlik doğrulamasını gerçekleştirir. Kimlik doğrulama başarılı olursa, AS istemciye TGS adlı bir bilet verir. Bu bilet, diğer sunuculara istemcinin kimliğinin doğrulandığını garanti eder.
  • Ticket Granting Server (TGS). TGS, hizmet biletlerini hizmet olarak yayınlayan bir uygulama sunucusudur.

Protokol akışı aşağıdaki adımlardan oluşur:

İlk olarak, Kerberos akışında yer alan üç önemli gizli anahtar vardır. İstemci/kullanıcı, TGS ve Kimlik doğrulama sunucu ile paylaşılan sunucu için benzersiz gizli anahtarlar vardır.

1.İstemci kimlik doğrulama ister

Kullanıcı, kimlik doğrulama sunucusundan bir Bilet Verme Bileti (TGT) ister. Bu istek, müşteri kimliğini içerir.

2.Kimlik doğrulama sunucu istemcinin kimlik bilgilerini doğrular

Kimlik doğrulama sunucusu, kullanıcı ve TGS'nin kullanılabilirliği için veritabanını kontrol eder. Her iki değeri de bulursa, kullanıcının parola karmasını kullanarak bir istemci/kullanıcı gizli anahtarı oluşturur.

3.TGT'yi istemciye gönderir

Kimlik doğrulama sunucusu daha sonra TGS gizli anahtarını hesaplar ve istemci/kullanıcı gizli anahtarı tarafından şifrelenmiş bir oturum anahtarı (SK1) oluşturur. Kimlik doğrulama sunucusu daha sonra istemci kimliğini, istemci ağ adresini, zaman damgasını, yaşam süresini ve SK1'i içeren bir TGT oluşturur. TGS gizli anahtarı daha sonra bileti şifreler ve istemciye sunar.

4.İstemci, erişim istemek için TGT'yi kullanır

İstemci mesajın şifresini çözer. Daha sonra çıkarılan TGT'yi ve oluşturulan kimlik doğrulayıcıyı TGS'ye göndererek hizmeti sunan sunucudan bir bilet talep eder.

5.TGS, dosya sunucusu için bir bilet oluşturur

TGS, kimlik doğrulayıcının şifresini çözer ve istemci kimliği ve istemci ağ adresiyle eşleşip eşleşmediğini kontrol eder. TGS, TGT'nin süresinin dolmadığından emin olmak için çıkarılan zaman damgasını da kullanır. İşlem tüm kontrolleri başarılı bir şekilde yürütürse, KDC, istemci ile hedef sunucu arasında paylaşılan bir hizmet oturum anahtarı (SK2) oluşturur.

KDC, istemci kimliği, istemci ağ adresi, zaman damgası ve SK2'yi içeren bir hizmet bileti oluşturur. Bu bilet daha sonra sunucunun db'den alınan gizli anahtarıyla şifrelenir.

6.TGS, SK1 ile şifrelenmiş olan hizmet biletini ve SK2'yi içeren mesajı istemciye iletir.

7.İstemci, kimlik doğrulaması için dosya biletini kullanır

İstemci, SK1'i kullanarak mesajın şifresini çözer ve SK2'yi çıkarır. Bu işlem, istemci ağ adresini, istemci kimliğini ve zaman damgasını içeren, SK2 ile şifrelenmiş yeni bir kimlik doğrulayıcı oluşturur ve hizmet biletini servis sunucuya gönderir.

8.Hedef sunucu şifre çözme ve kimlik doğrulamasını alır

Hedef sunucu, hizmet biletinin şifresini çözmek ve SK2'yi çıkarmak için sunucunun gizli anahtarını kullanır. Sunucu, kimlik doğrulayıcının şifresini çözmek için SK2'yi kullanır ve kimlik doğrulayıcıdan gelen istemci kimliği ve istemci ağ adresinin ve hizmet biletinin eşleştiğinden emin olmak için kontroller gerçekleştirir. Sunucu ayrıca hizmet biletinin süresinin dolup dolmadığını kontrol eder.

Kontroller karşılandığında, hedef sunucu istemciye, istemcinin ve sunucunun birbirini doğruladığını doğrulayan bir mesaj gönderir. Kullanıcı artık güvenli bir oturuma girebilir.

Image description

Kerberos kimlik doğrulamasıyla bir Windows paylaşımı bağlayın

Öncelikle gerekli paketleri kuruyoruz

    apt-get install krb5-user krb5-config cifs-utils keyutils
Enter fullscreen mode Exit fullscreen mode

Paketleri kurduktan sonra nano ile /etc/krb5.conf 'un default_realm alanına domainimizi yazıyoruz

[libdefaults]
default_realm = DOMAIN.LAB
Enter fullscreen mode Exit fullscreen mode

Daha sonra sunucudan bir bilet almak için aşağıdaki komutu çalıştırıyoruz. Kullanıcı adı user@DOMAIN biçiminde olmalıdır. Domain adı her zaman BÜYÜK HARFLER olmalıdır.

FQDN(Fully Qualified Domain Name - Tam Nitelikli Alan Adı) denen bu yapıda her alan adı maksimum 63 karakterden oluşabilir ve toplamda da 255 karakteri aşamaz. Alan adı düğümlerin her biri DNS sunucusunda birer dizindir ve en alttan en üste ilerlenecek şekilde birleştirileren okunur.

kinit yourUserName@SUBDOMAIN.DOMAIN.LOCAL
Enter fullscreen mode Exit fullscreen mode

Şimdi sunucudan bir kerberos bileti almış olmalıyız, klist komutu ile kontrol ediyoruz.

test@SalihBilgisayar:~$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@SALIH.LAB

Valid starting       Expires              Service principal
21-10-2021 07:53:51  21-10-2021 17:53:51  krbtgt/SALIH.LAB@SALIH.LAB
    renew until 22-10-2021 07:53:46
Enter fullscreen mode Exit fullscreen mode

Biletimizin oluştuğunu görebiliyoruz. Bu bilet ile paylaşıma iznimiz varsa, paylaşımı aşağıdaki komut ile mount edebiliriz.

smbclient \\\\subdomain.domain.local\\paylasim-klasörü -k
Enter fullscreen mode Exit fullscreen mode

Domain adı, aldığımız bilet adı ile aynı olmalıdır. Bileti aldığımız domain adından farklı bir ad girdiğimizde aşağıdaki gibi bir hata verecektir.

gensec_spnego_client_negTokenInit_step: gse_krb5: creating NEG_TOKEN_INIT for cifs/salihpc.salih.lab failed (next[(null)]): NT_STATUS_NO_LOGON_SERVERS
Enter fullscreen mode Exit fullscreen mode

Domain adımız, aldığımız bilet ile aynı veya herhangi bir hata yoksa SMB istemcisi (smb: \>) çalışır ve kaynaklara erişebiliriz. Sonrasında klist ile biletimizi tekrar kontrol ettiğimizde cifs bağlantısının biletimize eklendiğini görebiliriz.

test@SalihBilgisayar:~$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@SALIH.LAB

Valid starting       Expires              Service principal
21-10-2021 08:27:02  21-10-2021 18:27:02  krbtgt/SALIH.LAB@SALIH.LAB
    renew until 22-10-2021 08:26:59
21-10-2021 08:27:03  21-10-2021 18:27:02  cifs/salihpc.salih.lab@SALIH.LAB
Enter fullscreen mode Exit fullscreen mode

SMB

Sunucu İleti Bloğu (SMB), günümüzün en popüler dosya sunucusu protokollerinden biridir. Düzgün bir şekilde uygulandığında SMB, güvenli, verimli ve ölçeklenebilir ağ kaynağı ve dosya paylaşımı sağlar.

SMB, bir istemci-sunucu modeli kullanan bir ağ dosyası ve kaynak paylaşım protokolüdür. Ağdaki PC'ler gibi SMB istemcileri, dosyalar ve dizinler gibi kaynaklara erişmek veya ağ üzerinden yazdırma gibi görevleri gerçekleştirmek için SMB sunucularına bağlanır.

SMB Client

Bir SMB istemcisi, bir SMB sunucusundaki kaynaklara erişen cihazdır. Örneğin, bir şirket ağı içinde, paylaşılan bir sürücüye erişen kullanıcı bilgisayarları SMB istemcileridir.

İstemciyi çalıştırmak için aşağıdaki komutu çalıştırıyoruz.

smbclient \\\\<win-share-ip>\\<paylasim-klasörü> -U <kullanıcı>%<şifre> -W <sunucu>
Enter fullscreen mode Exit fullscreen mode

İstemci çalıştığında, kullanıcıya smb: \> diye bir bilgi istemi sunulur. ls komutuyla paylaşılan klasör içeriğini görüntüleyebiliriz.

smb: \> ls 
  .                                   D        0  Fri Oct 22 07:53:42 2021
  ..                                  D        0  Fri Oct 22 07:53:42 2021
  file1                               D        0  Tue Oct 19 11:19:22 2021
  file2                               D        0  Tue Oct 19 10:01:25 2021
  New Text Document.txt               A        0  Fri Oct 22 07:53:42 2021
  newfile                             D        0  Wed Oct 20 16:13:50 2021

        8260095 blocks of size 4096. 3329607 blocks available
Enter fullscreen mode Exit fullscreen mode

Sunucuda çalışan tüm komutlar aslında sunucuya bir istek göndererek gerçekleştirilir.

Sık Kullanılan Komutlar

Parametre Açıklama
cd dizin-adı Dizin adı belirtilirse, sunucudaki geçerli çalışma dizini belirtilen dizine gider.
ls mask Sunucudaki geçerli çalışma dizinindeki maskeyle eşleşen dosyaların bir listesini sunucudan alır ve görüntüler.
mkdir dizin-adı Belirtilen adla sunucuda yeni bir dizin oluşturur.
more dosya adı Sunucudaki dosyayı alır ve içeriğiyle birlikte görüntüler.
get sunucu-dosya-adı [yerel-dosya-adı] Sunucu-dosya-adı adlı dosyayı sunucudan istemciyi çalıştıran makineye kopyalar. Belirtilmişse, yerel kopyayı yerel-dosya-adı olarak adlandırır.
put yerel-dosya-adı [sunucu-dosya-adı] İstemciyi çalıştıran makineden yerel dosyayı sunucuya kopyalar.
lcd [dizin-adı] Dizin adı belirtilirse, yerel makinedeki geçerli çalışma dizini belirtilen dizinle değiştirilir.
mget mask Maskeyle eşleşen tüm dosyaları sunucudan istemciyi çalıştıran makineye kopyalar.
mput mask Yerel makinedeki geçerli çalışma dizinindeki maskeyle eşleşen tüm dosyaları sunucudaki geçerli çalışma dizinine kopyalar.
print dosya-adı Belirtilen dosyayı, sunucudaki yazdırılabilir bir hizmet aracılığıyla yerel makineden yazdırır.
rm mask Sunucudaki geçerli çalışma dizininden, maskeyle eşleşen tüm dosyaları kaldırır.
rmdir dizin-adı Belirtilen dizini sunucudan kaldırır.
del mask İstemci, sunucudaki geçerli çalışma dizininden maskeyle eşleşen tüm dosyaları siler.
exit Sunucu ile bağlantıyı sonlandırır ve programdan çıkar.

SAMBA

Samba, birlikte kullanıldığında bir Linux sunucusunun dosya sunumu, kimlik doğrulama/yetkilendirme, ad çözümleme ve yazdırma hizmetleri gibi ağ eylemlerini gerçekleştirmesine izin veren farklı uygulamalar topluluğudur.

CIFS gibi, Samba da Windows istemcilerinin bir Samba sunucusundaki Linux dizinlerine, yazıcılarına ve dosyalarına şeffaf bir şekilde erişmesine izin veren SMB protokolünü uygular.

En önemlisi, Samba, bir Linux sunucusunun Etki Alanı Denetleyicisi olarak hareket etmesine izin verir. Bunu yaparak, Windows etki alanındaki kullanıcı kimlik bilgilerinin yeniden oluşturulması ve ardından Linux sunucusunda manuel olarak eşitlenmesi gerekmeden kullanılabilir. Bu Etki Alanı Denetçisine Windows, Mac ve GNU/Linux sistemler aynı yapılandırma ile erişebilmektedir.

Samba paylaşım erişimi yapılandırma parametrelerini yönetin

Dosya bölümlerden ve parametrelerden oluşur. Bir bölüm, köşeli parantez içindeki bölümün adıyla başlar ve bir sonraki bölüm başlayana kadar devam eder. Bölümler, formun parametrelerini içerir:

[etc/samba/smb.conf]

[paylasim]
path=/home/kullanici_adiniz/paylasim
comment=paylasim dizini
valid users=@admins
invalid users=@kullanici1 @kullanici2
browsable=yes
writeable=yes
read only=no
guest ok=yes
Enter fullscreen mode Exit fullscreen mode

Dosya satır tabanlıdır, yeni satırla sonlandırılan her satır bir yorumu, bölüm adını veya parametreyi temsil eder. Parametrelerde eşittir girişini izleyen değerlerin tümü ya bir dizedir ya da evet/hayır veya doğru/yanlış olarak verilebilen bir booleandır.

Parametre Açıklama
path Hizmet kullanıcısına erişim izni verilecek bir dizini belirtir.
comment Yeni paylaşımla ilişkilendirilecek yorum dizesi
valid users Bu hizmete giriş yapmasına izin verilen kullanıcıların listesidir.
invalid users Bu hizmete giriş yapmasına izin verilmemesi gereken kullanıcıların listesidir.
browsable Bu paylaşımın bir ağ görünümündeki kullanılabilir paylaşımlar listesinde ve göz atma listesinde görünüp görünmeyeceğini kontrol eder.
writeable Yazma yetkisini kontrol eder.
read only Sadece okuma yetkisini kontrol eder.
guest ok Misafir olarak belirlenen kullanıcılara erişim yetkisi verir.

Top comments (0)