Raspberry Pi’a Samba Sunucusu Kurmak ve Yapılandırmak

Samba[1], 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 ve günümüzde çoğu Linux dağıtımında standart olmuş temel ağ hizmetleri arasında yer alır. Günümüzde bir PC’ye Linux kurduğunuzda büyük ihtimalle Samba uygulaması da varsayılan olarak kurulmuş olacaktır. Bunu ağdaki Windows makinelerin yazıcı ve klasör paylaşımlarına erişebiliyor olmanızdan anlayabilirsiniz. Samba ile klasörler, yazıcılar ve tarayıcılar Linux ve Windows makineler arasında paylaştırılabilir. Örneğin Raspberry Pi’a bağlı harici bir diske Windows yüklü bilgisayarınızdan, bu uygulama sayesinde erişebilirsiniz. Samba aynı zamanda içerisinde SMB protokolünü de barındırır. SMB ile Windows ağlarının çalışma gruplarına katılabilir, Windows’un WINS (Windows Naming Service) hizmeti sayesinde bir Windows Ağı içerisinde ulaşılabilir olabilirsiniz. Görüldüğü gibi Samba daha çok Windows bilgisayarların yer aldığı ağ ortamlarında ortaklaşmak için kullanılan bir uygulama ve araçlar topluluğudur.

Samba bir ağ iletişim protokolü olan SMB için yeniden yazılmış hem bir uygulama ve hem de Linux’ta çalışan bir ağ hizmetinin adıdır. Samba sadece dosya/yazıcı paylaşımı yapmaz. Windows’un ileri düzey ağ destekli yönetilebilirlik özelliklerinden birisi olan Active Directory’yi[2] de destekler. Bir Domain Controller[3]  olarak görev yapabilir veya bir Windows Domain’inin (Organizasyonel Yapı) parçası olabilir.

Samba’yı kurmak için, her zaman olduğu gibi Raspberry Pi’ı güncelledikten sonra Raspberry Pi OS deposundan Samba paketini indirip kuralım:

Samba’nın başarıyla kurulup kurulmadığını görmek için servis listesinden kontrol edebilirsiniz.

Ekran çıktısında nmbd (name registration ve resolution request) hizmetinin de çalıştığı dikkatinizi çekmiştir. nmbd de Samba gibi bir ağ sunucu hizmetidir ve daha önce bahsettiğimiz WINS ile benzer bir görevi yerine getirerek, Windows Makine Adı’nı (Windows Host Name) IP adresine çevirir. Bunu Windows tabanlı yerel ağlarda Hostname<->IP dönüşümünü yapan bir ağ servisi olarak düşünebilirsiniz. Örneğin ağdaki bir Windows bilgisayar, hostname’i RASPBIAN olan bilgisayarının IP adresini soracak olursa, RASPBIAN isimli bilgisayarda çalışan nmbd sunucusu bu soruyu UDP protokolünü kullanarak kendi IP adresi ile cevaplar. Windows işletim sistemi ağ komşuları listesini oluşturmak için de bu hizmetten yararlanır.

smbd ise Samba’nın ana servisidir ve TCP/IP protokollerini kullanarak dosya ve yazıcı paylaşım işlemlerini yerine getirir. Bu nedenlerle nmbd hizmeti de smbd hizmeti ile aynı anda çalışmak zorundadır. smbd’yi yeniden başlatmanız gerektiğinde nmbd servisini de yeniden başlatmanız faydalıdır.

Samba İle bir dizin paylaştırmak

Samba’nın ana ayar dosyası smb.conf’tur. Bu dosya ile hangi dizinlerin paylaştırılacağını, paylaşılan dizinlerin ağda görünen adının ne olacağını, hangi izinlerle paylaştırılacağını (sadece okuma/hem okuma hem yazma gibi), hangi kullanıcıların paylaşımlara parola ile giriş yapacağı gibi birçok ayarlama yapılır. Şimdi nano editörü ile dosyanın içerisine bir göz atalım ve aşağıdaki örnekteki gibi bir tanımlama yapalım. Düzenlemeden önce her ihtimale karşı dosyanın orijinalinin bir yedeğini saklamak iyi bir olacaktır. Bunun için aynı dizine smb.conf.1 adında bir yedek alalım. Dosyadaki diğer seçenekleri değiştirmeye çoğu durumda gerek duyulmaz.

Yukarıdaki ayarlar ile “Pi-Paylasim” etiketi ile gösterilen ev dizini (/home/pi) ağa paylaştırılmıştır. browsable anahtarı true yapılarak dizinler içinde dolaşılmasına izin verilmiş, “read only = none” ile de paylaşımın yazılabilir olması sağlanmıştır. Yazılabilir olmasının anlamı, bu paylaşımdaki mevcut dosya ve dizinlerde değişiklik/ekleme/silme işlemlerinin yapılabileceğidir. “comment = Home paylasimi” seçeneği ile bu paylaşım için ağda görünecek bir açıklama tanımlanmıştır. “path = /home/pi” ise paylaştırılmak istenen dizinin patikasıdır. “valid users = pi” ile bu paylaşıma erişebilecek kullanıcılar tanımlanmıştır. Bu ayara göre “pi” adlı kullanıcı bu paylaşıma erişebilecektir. Tanımlamamızı Ctrl+O ile kaydedip Ctrl+X ile çıktıktan sonra testparm komutunu vererek smb.conf dosyasındaki ayarların doğruluğunu sınatabilirsiniz. Bu sınama yazım yanlışlıklarını, geçersiz veya çakışan seçenekleri içerir. Samba’nın mantıksal işlevleri açısından bir sınama gerçekleştirmez.

Eğer seçenek ve değerlerde bir yazım hatası yapmış iseniz program sizi uyaracaktır. Aşağıdaki gibi -v (verbose) seçeneği eklediğinizde testparm’ın çıktısı smb.conf’ta yazılı olmayan varsayılan seçenekleri de barındırması itibarıyla iyi bir yapılandırma yedeği olarak da düşünülebilir.

Dizin paylaştırmayla ilgili dikkat edilmesi gereken önemli bir konu da, “pi” kullanıcısı için bağımsız bir Samba parolası oluşturulması gerektiğidir. Yani, hâlihazırdaki pi (raspbian) kullanıcısının parolası burada geçerli olamayacaktır. Samba, bu servisi kullananlar için parolaları kendi bağımsız veri tabanında saklar. Paylaşıma erişecek kullanıcı Raspberry Pi OS sisteminde de kayıtlı bir kullanıcı olmalıdır. Bu nedenle paylaşıma erişecek kullanıcının parolası smbpasswd komutu ile Samba parola veri tabanına eklenmelidir. Aksi takdirde ağ paylaşımına giriş yapılamayacaktır. Kısaca ilgili paylaşıma erişmek için sistemde tanımlı bir kullanıcının ismi kullanılır; fakat parolası samba’ya bağımsız olarak tanımlanır. Pi kullanıcısına samba parolası tanımlamak için aşağıdaki komutu kullanabilirsiniz:

Samba ile bir sistem dizinini paylaştırmak (/var/www/)

Yukarıdaki örnekte pi kullanıcısına ait bir dizini yine pi kullanıcısı ile samba kullanarak ağa paylaştırmıştık. Yani, dosya sistemi üzerindeki sahibi ile paylaşıma erişmeye yetki verdiğimiz kullanıcı aynı kullanıcılardı. Örneğin /var/www/html veya /var/logs gibi root (sistem yöneticisi) kullanıcısının sahibi olduğu dizinleri paylaştırmak için root izni gerekir. Aşağıdaki çıktıdan dizinlerin sahibinin root olduğunu görebilirsiniz:

Bu dizinleri paylaştırabilmek için normalde root kullanıcısına bir samba parolası tanımlamak gerekir.

Raspberry Pi’da root kullanıcısı aktif kullanılan bir hesap olmadığından bu işi yine pi kullanicisi üzerinden gerçekleştirmek doğru bir yaklaşımdır. Dosya sistemi üzerinde farklı kullanıcılara ait olan dizinleri farklı samba kullanıcıları için paylaştırmak gerektiğinde smb.conf dosyasında force user ve force group seçenekleri kullanılır. force user seçeneği valid users seçeneğinden farklı olarak, dosya sistemi üzerinde farklı kullanıcılara ait ait dizin ve dosyaların istenilen bir samba kullanıcısı üzerinden paylaştırılmasını sağlar.

Daha basit bir ifade ile root kullanıcısının sahibi olduğu bir dizini pi kullanıcısı ile paylaştırmak için force user ve force grup seçeneklerinin kullanılmasına ihtiyaç vardır. Bu durumda valid user (paylaşıma giriş yapmaya yetkili) olan pi kullanıcısı, samba paylaşımına giriş yapabilir; fakat dosya sistemi düzeyindeki erişim izinleri için force user ile belirtilen kullanıcının yetkilerini kullanır. force group seçeneği de aynı işlemi dosyanın grup erişim izinleri için gerçekleştirir.

Aşağıdaki smb.conf girdisini inceleyin:

Yukarıdaki örnekte root kullanıcısının sahibi olduğu /var/www/html dizini ağa paylaştırılmıştır. Bu paylaşıma dosya sistemi düzeyinde erişmeye yetkili tek kullanıcı root olduğu için force user olarak root belirtilmiş, paylaşıma giriş yapmaya yetkili kullanıcı olarak da pi kullanıcısı tanımlanmıştır. Pi kullanıcısı paylaşım üzerinde yeni dosyalar oluşturduğunda dosyanın sahibi ve gurubu root, erişim izni de 755 olarak gerçekleşecektir. Tabi ki bu paylaşıma giriş yapabilmek için pi kullanıcısına bir samba parolası tanımlamayı da unutmamak gerekir. Ayarların gerçerli olması için samba servislerini veya Raspberry Pi’ı yeniden başlatabilirsiniz:

Create Mask ve Force Create Mode seçenekleri

Create mask ve force create mode seçenekleri ile paylaşıma karşılık gelen dosya sistemi üzerinde oluşturulan dosya ve dizinlerin erişim izinlerinin yeniden tanımlanmasını sağlar. Create mask ile verilen izin And(ve) mantıksal işlemine tabi tutulurken force create mode seçeneği ile verilen izin Or (veya) mantıksal işlemine tabi tutulur. Örneğin 744 (rwx-r—r–) iznine sahip bir dosya için create mask = 711 ve force create mode = 722 değeri tanımlanırsa dosyanın yeni erişim izni 722 (rwx–w–w) olur. Burada yapılan and ve or işlemini aşağıdaki tablodan daha rahat anlayabilirsiniz:

Orijinal erişim izniSahibi (ikilik)Grubu (ikilik)Diğerleri (ikilik)
744111100100
create mask (oluşturma maskesi) ‘in orijinal izin ile AND işlemine tabi tutulması
744111100100
AND
711111001001
SONUÇ
700111000000
force create mode‘un create mask’e uygulanması
700111000000
OR
722111010010
OR İŞLEMİNİN SONUCU
722111010010

Yukarıdaki örneğin smb.conf dosyasına uygulanması aşağıdaki gibidir:

Erişim izinlerini daha rahat anlamak için şu yöntemi kullanabilirsiniz. Erişim izninden çıkartmak istediğiniz bit’ler için,  create mask değerinin ilgili bit’lerine (r/w/x) 0 değerini, erişim iznine eklemek istediğiniz bit’ler için force create mode değerinin ilgili bit’lerine 1 değerini verin.

Samba kullanıcısı eklemek ve silmek

smbpasswd komutu ile sistemde var olan kullanıcının samba parolası oluşturabilirsiniz.

Pi kullanıcısının samba paylaşımlarına erişimini tamamen kaldırmak için ise şu komu kullanılır:

Kullanıcıyı silmek yerine devre dışı bırakmak için -d (disabled) seçeneğinden yararlanılır. Bu durumda ilgili kullanıcı paylaşımlar üzerinde oturum açamaz:

Devre dışı bırakılan kullanıcıyı tekrar etkinleştirmek için ise -e (enabled) seçeneği kullanılır.

Ayarları ve parola tanımlamayı gerçekleştirdikten sonra samba servisini yeniden başlatarak ayarların geçerli olmasını sağlayabilirsiniz. samba normal şartlarda dakikada bir kere mevcut güncel konfigürasyonu diskten okur ve uygular.

Samba kullanıcısının parolasını değiştirmek

Kurulum aşamasında, pi kullanıcısına Samba parolası tanımladığımız komutu parolayı değiştirmek için de kullanabilirsiniz.

Yeri gelmişken bu durumla ilgili ek bir bilgi vermek istiyorum. Bir Windows bilgisayarından samba paylaşımına kullanıcı adı ve parola ile bir kere giriş yapıp oturum açtıktan sonra smbpasswd komutu ile kullanıcının parolasını değiştirirseniz, yeni parolanın Windows tarafında hemen geçerli olmadığını, eski parola ile giriş yapılmış paylaşımların içerisinde gezinebildiğinizi fark edebilirsiniz.

Eğer Windows tarafında paylaşıma giriş yaparken parola hatırlama işaret kutusunu seçmediyseniz genellikle Windows’u yeniden başlattığınızda yeni parolanız kullanılır duruma gelir, bu zamana kadar Windows ilgili Samba paylaşımını daha önce açtığı oturum üzerinden yürütmeye devam eder. Böyle bir durumda aşağıdaki adımları gerçekleştirerek güncellenen parolanın Windows’u yeniden başlatmaya gerek kalmadan kullanılabilir olmasını sağlayabilirsiniz. Bunun için ilk olarak hem Windows hem de Raspberry Pi OS tarafında hâlihazırda açılmış olan aktif oturumların kapatılması için şu adımları takip etmelisiniz:

  • Öncelikle Windows bilgisayarında hâlihazırda paylaşımların açık pencereleri varsa kapatın.
  • Başlat->Çalıştır (Windows+R) a giderek net use * /d komutunu verin. Bu komut ile hâlihazırdaki paylaşımların oturum bağlantıları kapanacaktır.

Açık netbios bağlantılarının kapatılması

  • Aynı oturumların Raspberry Pi OS tarafında da kapanması için sudo systemctl restart smbd komutunu verin ve Samba servisini yeniden başlatın:

Samba paylaşımına Windows üzerinden erişmek

Paylaşımı kullanmaya başlamak için bir Windows bilgisayarın ağ komşuları aracılığı ile (Windows’un ağ bulma hizmetnin açık olması gerekir) veya doğrudan Raspberry Pi’ın samba adresini yazarak da bağlanabilirsiniz. Windows’un “Bilgisayarım” (explorer) penceresini açarak adres çubuğuna şunu yazın:

Windows’un, Windows Explorer adlı bu dosya yöneticisi ile kopyalama, yazma, değiştirme ve silme gibi temel dosya işlemlerini (paylaşımın izinleri çerçevesinde) gerçekleştirebilirsiniz.

Adres çubuğuna Raspberry Pi’ın IP adresini yazmalısınız. Baştaki \\ (iki adet ters bölü) karakterler kritik öneme sahiptir ve 192.168.0.101 IP adresli bilgisayarın Samba servisine bağlanılacağı anlamına gelen protokol tanımlayıcısıdır.

Samba komut satırı araçları ile hâkimiyetinizi artırın

Samba kurulumu sırasında yüklediğimiz paketlerden biri olan samba-common-bin içerisinde birçok aracı bulunduran faydalı bir pakettir. Bu bölümde paylaşım sistemimiz üzerindeki hâkimiyetimizi artıran ve muhtemel sorunların nasıl çözülebileceği ile ilgili bazı pratik bilgiler ve araçların kullanımından bahsedilecektir.

Smbclient aracı ile paylaşımları listelemek

Samba paketlerini kurarken, smbclient paketini de dâhil ettiğimiz dikkatinizi çekmiştir. Smbclient aracı Samba paylaşımlarını listelemek ve aynı zamanda test etmek için Samba geliştiricileri tarafından yazılmış Samba ile tam uyumlu bir istemcidir.

Eğer Windows’u istemci olarak kullanıyorsanız Samba paylaşımlarına erişirken manasız sorunlar yaşayabilirsiniz. Bazen bunun nedeni Windows ile Samba arasındaki, nedeni çok da belli olmayan uyumsuzluklardan kaynaklanır. Samba’nın kullandığı smb protokolü Microsoft’un kapalı kaynak kodlu bir protokolüdür ve gerekli detaylar Samba geliştiricileri tarafından ağ ve veri paketi analizi ile tersine mühendislik yöntemleri ile elde edilmektedir. Bu nedenle Samba programına dâhil edilmemiş bazı özellikler Windows istemcilerinin tutarsız çalışmasına neden olabilir. Size tavsiyem paylaşımlarınızı yapılandırdıktan sonra smbclient ile test edip her şey yolunda gittiğinde Windows istemciyi yeniden başlatın (restart) ve yapılandırmanın başarıyla gerçekleşip gerçekleşmediğini sınayın. Aksi takdirde Samba’yı Windows istemcileri ile konuştururken saçınızı başınızı yolabilirsiniz. Smbclient aracının kullanım örnekleri ilerleyen başlıklarda yer almaktadır.

Smbclient birçok seçeneğe sahip bir araçtır. Tüm seçenekler hakkında bilgi almak için man komutu ile yardım sayfalarına göz atabilirsiniz.

Smbclient ‘ın en çok kullanılan seçeneği olan –L (list) ile paylaşımları listelenecek bilgisayarın adresi argüman olarak verilmektedir. Aşağıdaki örnek ile IP adresi 192.168.0.101 olan bir bilgisayarın Samba paylaşımları listelenmektedir:

Bir samba paylaşımına gö zatmak için aşağıdaki komutu çalıştırdığınızda, komut sizi smb moduna düşürür ve smb> komut istemcisi belirir. Burada ls, cd, del, mkdir, put ve get gibi temel dosya komutlarını kullanabilirsiniz. Kullanılacak tüm komutları görmek için man smbclient komutu ile smbclient’in yardım sayfasını açın ve operations başlığına göz atın.

Paylaşımına göz atılacak bilgisayarın IP adresinin önüne // işaretlerini eklemek gerekir. Aşağıdaki örnekteki ls komutu ile paylaşımdaki dosyalar listelenmekte, pwd komutu ile içinde bulunulan paylaşımın patikası görüntülenmekte ve exit komut ile smb modundan çıkılmaktadır.

Sadece belli bir kullanıcının erişimine izin verdiğiniz bir paylaşımın içeriğini listelemek için ise aşağıdaki komutu kullanabilirsiniz. –U (user) seçeneği ile belirttiğiniz kullanıcının samba parolasını girmeniz istenecek ve smb komut satırı açılacaktır.

Yukarıdaki kullanıma ek olarak parolayı da smbclient’a argüman olarak verebilirsiniz. Bunun için aşağıdaki gibi kullanıcı adı ve parola arasına % (yüzde) işaretini ekleyin:

Bu kitabı yazdığım sırada Pardus Topluluk ve Pardus Kurumsal dağıtımlarındaki bir lokalizasyon hatasından dolayı smbclient programına verdiğimiz kullanıcı adı olan pi argümanı NT_STATUS_LOGON_FAILURE hatasına neden oluyordu. Bu hatayı gidermek için smbclient’in önüne LC_LOCAL=C ortam değişkenini koymak gerekiyor. Bunu fark etmemi sağlayan,  LKD’nin Linux-Sunucu listesinden Sn. Doruk Fişek’e teşekkür ederim. Komut örneği şu şekildedir:

LC_LOCAL=C smbclient //192.168.0.101/logs –U root

HATIRLATMA

Kullanımda olan samba paylaşımlarını görme

Raspberry Pi’ı bir samba sunucusu haline getirip dizinleri paylaştırdıktan sonra kullanıcıların hangi dizin ve dosyalar üzerinde çalıştıklarını görmek isteyebilirsiniz. smbstatus komutu bu iş için kullanılır. smbstatus ile aynı zamanda Samba sunucunuzun paylaştırılan dizinlerini de görebilirsiniz. Komutun kullanımı şu şekildedir:

Yukarıdaki listeden sırasıyla, hangi samba kullanıcılarının ağdaki hangi bilgisayardan hangi paylaşımlar üzerinde oturum açtığını görebilirsiniz. Listenin sonunda aktif olarak kullanımda olan dizinler ve en son kullanılma zamanları da listelenmektedir.

Raspberry Pi’a bağladığınız paylaşımlar varsa, paylaşım konumunu ve bağlanan dizini df komutu ile görüntüleyebilirsiniz. –h  (human readable) seçeneği boyutların GB (giga byte) cinsinden görüntülenmesini sağlar:

Ağdaki tüm samba paylaşımlarını listelemek

smbtree adlı araç ile ağdaki tüm paylaşımları pratik bir şekilde listeletebilirsiniz:

Bir samba paylaşımını bir Raspberry Pi dizinine bağlamak

Samba paylaşımlarını smbclient arabirimi aracılığı ile kullanmanın yanında sistemdeki bir dizine bağlayarak da kullanabilirsiniz. Bunun avantajı bağladığınız paylaşım yerel bir Linux dizini halini alır ve kopyalama/değiştirme/silme işlemlerini sıradan bir Linux dizininde yapıyormuş gibi gerçekleştirebilirsiniz. Bir samba paylaşımını yerel bir dizine bağlamadan önce ilgili dizini oluşturmak gerekir:

Yukarıdaki mount komutu ile 192.168.0.101 IP adresli samba sunucusu üzerindeki logs adlı paylaşım, yereldeki sambatest adlı dizine bağlanmış, ardından ls komutu ile paylaşımdaki dosyalar listelenmiştir. Bu dizin üzerinde yaptığınız değişikler aslında samba sunucusunun sağlamış olduğu paylaşım üzerinde gerçekleşir. –o yani options seçeneği ile belirttiğimiz username gibi password argümanını da kullanabilirsiniz. uid seçeneği ise paylaşım üzerine yazma yapılırken kullanılacak olan hesap kimliğidir (.bash_history dosyasına çalıştırılan komutun tamamı kaydedilir). Son durumda komut aşağıdaki gibi olabilir:

Bu dizinin bağlantısını kesmek istediğinizde is umount komutundan faydalanabilirsiniz:

Bu başlıktaki örneklerde; ilgili samba paylaşımını Linux dizinine bağlarken dosya sistemi tipi olarak cifs belirttik. CIFS, yeni Windows sürümleri tarafından Samba protokolü yerine desteklenen protokolün adıdır. Linux’un CIFS desteğine sahip olmaması durumunda şu komut ile kolayca yükleyebilirsiniz: sudo apt install cifs-utils

CIFS Hakkkında

Samba paylaşımını açılışta otomatik bağlamak

Eğer yerel dosya sistemine uzak bir samba paylaşımını bağladıysanız sistemi yeniden başlattığınızda artık bağlı olmadığını görürsünüz. Sistemin her açılışında bu bağlantıların otomatik olarak yapmasını sağlamak için aşağıdaki iki yöntemden birini kullanabilirsiniz.

İlk akla gelen ve alışılagelmiş yöntem olan fstab (/etc/fstab) yani file system table yapılandırma dosyasını kullanmaktır. fstab dosyası açılışta otomatik olarak bağlanacak disk bölümlerinin tanımlandığı bir sistem dosyasıdır. Herhangi bir zamanda da bu dosyanın içerdiği tanımlar icra ettirilebilir. Bunun için sudo mount –all komutundan faydalanabilirsiniz. Uzak bir samba paylaşımını açılışta otomatik olarak bağlamak için fstab dosyasına aşağıdaki gibi bir satır ekleyin:

Dosyanın sonundaki yapılandırma satırı ile; 192.168.0.101 ip adresli samba sunucusundaki depo6 adındaki paylaşıma, pi kullanıcı adı ve gizli parolası ile erişilerek /media/depo6 dizinine bağlanıyor.

Açılışta samba dizini bağlamanın bir diğer yolu da cronjob’ı kullanmaktır. Aşağıdaki gibi @reboot anahtar kelimesini içeren bir crontab satırı ile her açılışta ilgili samba paylaşımının yerel dizine bağlanmasını sağlayabilirsiniz (sudo komutu nedeniyle, bu crontab girdisi root kullanıcısının cronjob listesine eklenmiştir):

Yukarıdaki crontab satırında yer alan && karakterleri ardışık komut çalıştırmak içindir. sleep 30 ile samba dizinin bağlanması 30 saniye geciktirilmiştir. Bunun amacı Raspberry Pi açılır açılmaz tüm servis ve çekirdek modüllerinin hazır olamaması ihtimali karşıdır. Raspberry Pi açıldığı ilk anda ağ işlevleri hemen etkinleşemezse (örneğin DHCP sunucusundan IP yapılandırması tahsis edilmesinin beklenmesi veya açılış sürecini geciktiren diğer servisler)  ağ paylaşımını bağlama da mümkün olmaz. Bunun için yukarıdaki örnekte bağlama işlemi açılışın ardından 30 sn. gecikmeli olarak yerine getirilir. && karakterleri ile istenilen sayıda komut sıralı olarak çalıştırılabilir. Bunun için crontab satırında her bir komut/görevin arasına && eklenmesi komutların sıralı olarak çalıştırılmasını sağlar.

Samba ile Hata Ayıklamak

Samba ile dizin paylaştırırken veya paylaşılmış dizinleri bağlarken zor zamanlar yaşayabilirsiniz. Samba tek başına, dizin ve yazıcı paylaştırmanın dışında birçok yeteneğe sahiptir ve bu yetenekler onun sürekli güncellenen ve adapte edilen bir yapıya sahip olmasına neden olmaktadır. Yeteneklerine bağlı olarak çok fazla özelliği olan bu servis kapalı kaynak kodlu bir yapı temel alınarak geliştirilmekte ve Microsoft’un Active Directory adıyla piyasaya sunduğu, oldukça karmaşık yönetimsel görevleri farklı işletim sistemleri üzerinde icra ettirmeyi sağlayan bir alt yapıya da destek vermektedir. Tüm bu geliştirme süreci ve özellikleri nedeniyle Samba yapılandırması bazen zorluklar içerebilmektedir.

Smbclient aracının hata ayıklama özelliğini kullanmak

Samba sahip olduğu günlük detay seviyesi ile güçlü bir hata tespit imkânı sunar. Bunun için smbclient aracının hata ayıklama (debug) kipini etkinleştirmek için -d seçeneği kullanılabilir. Varsayılan değeri 0 olan bu seçenek 1’den 10’a kadar artan detay seviyelerinde çeşitli hata ayıklama bilgilerini ekrana basar.

Aşağıdaki kullanımda;  192.168.1.242 bilgisayarı üzerinde paylaştırılmış olan deneme adlı paylaşıma pi kullanıcısı ve parolası ile bağlanılmaya çalışılır ve bu sırada bağlantı süreci hakkında kullanıcıyı bilgilendirici mesajlar da ekrana basılır. Bu bilgilerin detay seviyesini artırmak için daha büyük bir değerde -d argümanı kullanabilirsiniz.

Samba’nın yapılandırma ayarlarını gerçekleştirirken yapacağınız denemelerde smbclient aracını kullanmanızı tavsiye ederim. Özellikle -d seçeneğine vereceğiniz detay düzeyi ile ekrana olası sorunları çözümleyebileceğiniz canlı mesajlar basar. Diğer taraftan smbclient aracı Samba servisi ile kullandığı protokol ve yapılandırma özellikleri açısından en uyumlu araçtır.

Samba sunucusunu hata ayıklamak üzere yapılandırmak

Sunucu kaynaklı sorunların teşhis edilmesinde ise Samba’nın yapılandırma dosyası olan smb.conf’un log (günlük kaydı) seçenekleri faydalı olur. smb.conf aracılığı ile hata ayıklama etkinleştirildiğinde; Samba sunucusu belirtilen detay seviyesine göre birçok bilgiyi canlı olarak günlük dosyasına yazar. Günlük dosyasına kaydedilen bilgileri canlı olarak izlemek içi ise tail aracı çok kullanışlıdır. Samba’nın varsayılan günlük kaydı detay seviyesi olan 0’ı değiştirmek için smb.conf dosyasında aşağıdaki değişiklikleri yapabilirsiniz. Değişikliklerin özeti şu şekildedir:

  1. Varsayılan olarak log file = /var/log/samba/log.%m olan seçenek ile her Samba istemcisinin günlük kaydı ayrı bir dosyada (ağdaki bilgisayar adı ile) tutulur. Bunun yerine, tüm günlük kayıtlarını tek bir noktadan takip etmek için dosya yolunu şu şekilde değiştirin: log file = /var/log/samba/all.log
  2. Varsayılan log level (günlük detay seviyesi) 0’dır. Yani, sadece servisin başlaması ve çalışması sırasındaki kritik bilgiler raporlanır. Bunun yerine log level = 1 passdb:1 auth:1 yazarak hata ayıklamayı daha fazla bilgi verecek şekilde yapılandırabilirsiniz. Günlüğe yazılan bilgiler sorunu çözmek için yeterli değilse günlük detay seviyesi log level’ı artırarak samba (smbd ve nmbd) sunucusunu yeniden başlatın ve smb.conf’ta yapılan bu değişikliğin etkin olmasını sağlayın. Ardından tail ile izlemeye devam edin. log level seçeneğine geçirilen passdb ve auth alt seçenekleri ise parola veri tabanı ve sambanın kimlik doğrulama alt sınıfı için ayrı bir günlük detay seviyesi tanımlar. 1 numaralı seviye sorunların ne olduğu ile ilgili bilgi sunarken 3 ve üzeri seviyeler daha çok yazılım geliştiricilerini ilgilendirebilecek düzeyde detaylıdır [4].

Yukardıdaki bilgiler ışığında; smb.conf dosyasını nano editörü ile açın ve log file ile log level seçeneklerini düzenleyerek kaydedin. Daha sonra smbd ve nmbd sunucularını yeniden başlatın ve tail aracı ile günlük dosyasını izlemeye başlayın. Diğer taraftan da daha önce anlatılan smbclient aracı ile bu dizini görüntülemeye çalışın ve tail’in çıktısını izleyin. Bağlantının neden gerçekleşmediği ile ilgili detaylı açıklamalar bu çıktıya yansıtılacaktır.

Varsayılan karakter setinden (tr_TR.UTF-8) kaynaklanan sorunlar

Eğer Raspberry Pi’ınızın varsayılan dil karakter kümesi Türkçe olarak ayarlanmış ise; Makine adı (hostname) veya kullanıcı adında yer alan özel karakterlerden kaynaklanan erişim sorunları yaşayabilirsiniz. Bu durumda smbclient aracı hata ayıklama kipinde iken NT_STATUS_ACCESS_DENIED, Samba sunucusu da NT_STATUS_NO_SUCH_USER hata kodunu üretebilir. Çok da anlamlı olmayan bu sorunu çözmek için varsayılan dil seçeneğini en_US.UTF-8 olarak ayarlayın veya bilgisayar adında ve kullanıcı adında i harfinin yer almamasını sağlayın. Varsayılan dil seçeneğini görmek için locale aracını, bu seçeneği değiştirmek için ise raspi-config aracını kullanabilirsiniz.

Bilgisayar adından (hostname) kaynaklanan sorunlar

Raspberry Pi’ın bilgisayar adında i harfi geçmemesini ve 15 karakterden uzun olmamasını sağlayın. Ayrıca bilgisayar adında rakamlar ve – (tire), _ (alt tire) karakterlerinin haricinde (özellikle Türkçe karakterler) karakterler yer almaması da ağ işlevlerinin sorunsuz çalışması için önemlidir. Mevcut bilgisayar adını aşağıdaki komutlar ile görüntüleyebilirsiniz. Değiştirmek için raspi-config aracından faydalanabilirsiniz.

Samba kullanıcılarının görüntülenmesi

smbpasswd aracı ile eklemiş olduğunuz samba kullanıcılarını görmek için pdbedit (password database edit) programından faydalanabilirsiniz:

Samba sunucu rolü ve güvenlik düzeyi

Samba’nın yapılandırma dosyası olan smb.conf’un en önemli yapılandırma seçeneği security’dir. Security seçeneğinin sahip olacağı değere göre Samba’nın sunucu rolü (server role) de belirlenir. Eğer geçerli bir kullanıcı adı ve parola ile bir erişimi yapılandırmak istiyorsanız; smb.conf dosyasında security = user tanımının yer almasını sağlayın. Eğer server role tanımlı değilse zaten otomatik olarak ROLE_STANDALONE olarak tanımlanacaktır. Bu durumu görmek için sunucuyu (smbd, nmbd) yeniden başlattıktan sonra testparm aracını kullanabilirsiniz:

user=security olarak ayarlanıp, paylaşımlar üzerinde valid users ile kullanıcı izinleri tanımlandığında; bu duruma zıtlık oluşturan global kesimdeki seçeneklerden birisi de valid users = %S tanımıdır. Bu tanımda kullanılan %S seçeneği sistemde tanımlı kullanıcıların ev dizinlerine erişebilmeleri için kullanıcı adı yerine geçer. Eğer paylaşım tanımlarınızda valid users seçeneğini kullanıyorsanız, global kesimdeki valid users = %S tanımını kaldırın. Aşağıda bu duruma uygun örnek bir yapılandırma yer almaktadır:

Windows’ta samba oturumlarının açık kalması

Samba paylaşımını Windows bilgisayarı üzerinden kullandığınızda Windows’un oturum hatırlama özelliği size sorun yaşatabilir. Windows ile bir paylaşım üzerinde başarılı şekilde oturum açtıktan sonra; örneğin paylaşıma erişilecek kullanıcıyı (valid users) veya bu kullanıcının parolasını değiştirdiğinizde Windows bir süre daha eski oturuma ait kullanıcıyı ve parolasını kullanmaya devam etmek ister. Böyle olduğunda ise paylaşıma erişilemediğini söyleyen bir hata iletisi alırsınız. Windows’un hâlihazırda aktif tuttuğu samba oturumlarını görüntüleyip silebileceğiniz net adında bir komut satırı aracı vardır. Net aracına use seçeneğini geçtiğinizde açık samba oturumlarını listeler. * /delete argümanı ile de açık tüm oturumları temizleyebilirsiniz. Windows komut istemini açmak için başlat menüsüne tıklatarak cmd yazın ve Enter’a basın. Komutların kullanımı aşağıda yer almaktadır:

Samba sunucusunu sistemden kaldırmak

Samba’yı kullanmayacaksanız sistemden kaldırmanızda fayda vardır. Böylece hem olası güvenlik açıklarını peşin olarak bertaraf etmiş olursunuz hem de CPU’nun güç ve enerji tüketimini azaltarak Raspberry Pi’ın daha performanslı çalışmasına katkıda bulunmuş olursunuz. Sambayı sistemden kaldırmak için şu komutları verin:

Bu komutlar sadece samba’nın çalıştırılabilir (binary) dosyalarını sistemden kaldırır. Samba’nın yapılandırma (/etc/samba/smb.conf) ve log dosyaları sistemden kaldırılmaz. Onları da tamamen silmek isterseniz şu komutları kullanabilirsiniz:


[1]https://tr.wikipedia.org/wiki/Samba_(yazılım), https://wiki.samba.org/index.php/Main_Page

[2] https://en.wikipedia.org/wiki/Active_Directory

[3] https://en.wikipedia.org/wiki/Domain_controller

[4] Log levels: https://www.samba.org/~ab/output/htmldocs/manpages-3/smb.conf.5.html#LOGLEVEL

Yazar: Özgür Koca

Yazar - Tankado.com

“Raspberry Pi’a Samba Sunucusu Kurmak ve Yapılandırmak” için bir yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.