özgür dünya

Özgür bir dünya için karalamalar

Debian tabanlı sistemler için paket oluşturma - 1

Debian tabanlı sistemler, yazılımların kurulabilmesi için "dpkg" (Debian PacKaGe) isimli yazılım kullanmaktadır. Günümüz kullanımlarında ise daha çok APT (Advanced Package Tool) isimli DPKG'yi yöneten "Paket Yönetim Sistemi" daha fazla duyulmaktadır. Özetle APT (aptitude, dselect, Ubuntu Software Center vb.) DPKG'nin en çok kullanılan önyüzlerinden birisidir. Kendi içerisinde paketlerin kurulması için kullandığı depo mantığı da bulunmaktadır. DPKG ise depo kavramından bağımsız Debian Paket Yapısı ile ilgilenmektedir.

Özet bilgi sonrasında bu yazıda APT ile ilgili bir konuya girilmeyeceğini belirtmek isterim. Bir debian sistemde Debian standartlarına ve paketlerine göre kurulan yazılımları "dpkg -l" komutu ile öğrenebilmektesiniz. Burada gördüğünüz paketlerden herhangi birisi için "-s" komutu kullanarak ilgili paketin detay bilgilerini öğrenebilirsiniz. Örneğin "dpkg -s bash" gibi. Bu çıktı, kontrol dosyası olarak yeni bir paket oluştururken girdiğiniz bilgileri vermektedir. Örnek bir çıktı aşağıdaki gibidir:
Package: bash
Essential: yes
Status: install ok installed
Priority: required
Section: shells
Installed-Size: 1588
Maintainer: Ubuntu Developers 
Architecture: amd64
Multi-Arch: foreign
Version: 4.4.18-2ubuntu1.2
Replaces: bash-completion (<< 20060301-0), bash-doc (<= 2.05-1)
Depends: base-files (>= 2.1.12), debianutils (>= 2.15)
Pre-Depends: libc6 (>= 2.15), libtinfo5 (>= 6)
Recommends: bash-completion (>= 20060301-0)
Suggests: bash-doc
Conflicts: bash-completion (<< 20060301-0)
Conffiles:
 /etc/bash.bashrc 3aa8b92d1dd6ddf4daaedc019662f1dc
 /etc/skel/.bash_logout 22bfb8c1dd94b5f3813a2b25da67463f
 /etc/skel/.bashrc 1f98b8f3f3c8f8927eca945d59dcc1c6
 /etc/skel/.profile f4e81ade7d6f9fb342541152d08e7a97
Description: GNU Bourne Again SHell
 Bash is an sh-compatible command language interpreter that executes
 commands read from the standard input or from a file.  Bash also
 incorporates useful features from the Korn and C shells (ksh and csh).
 Bash is ultimately intended to be a conformant implementation of the
 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
 .
 The Programmable Completion Code, by Ian Macdonald, is now found in
 the bash-completion package.
Homepage: http://tiswww.case.edu/php/chet/bash/bashtop.html
Original-Maintainer: Matthias Klose
Tüm maddeler için ayrı ayrı değerlendirme yazılabilir ama şuan için minimal gereksinimlerle başka bir pakette neler olabileceğini göstermek istiyorum. Daha doğrusu bir paket geliştirecekseniz aşağıdaki gibi bir "control" dosyası oluşturmanız gerekiyor.
Package: ornekpaket
Version: 1.4.0-b2
Maintainer: Ali Orhun <ali@orhun.org>
Description: Deneme paketi açıklaması
Homepage: https://github.com/aliorhun/deneme
Architecture: amd64
Depends: git, python3 (>=3.5)
Bu kontrol dosyası cebimizde dururken bir debian paketi için nelerin minimum olarak gerektiğini de belirtelim isterseniz. İlgili paket için aşağıdaki gibi bir yapı gerekmektedir.
ornekpaket-1.4.0-b2/          # Ana Dizin
└── DEBIAN/                  # Standart Gerekli Dizin
    └── control                   # Standart Gerekli Dosya
Dolayısıyla anladığımız kadarıyla paketimiz için bir klasör oluşturmamız ve ilgili klasör içinde DEBİAN isimli bir klasör oluşturup içerisine yukarıdaki gibi bir "control" isimli dosya oluşturmanız gerekmektedir.
mkdir -p ornekpaket-1.4.0-b2/DEBIAN
echo """Package: ornekpaket
Version: 1.4.0-b2
Maintainer: Ali Orhun <ali@orhun.org>
Description: Deneme paketi açıklaması
Homepage: https://github.com/aliorhun/deneme
Architecture: amd64
Depends: git, python3 (>=3.5)""" >  ornekpaket-1.4.0-b2/DEBIAN/control
Bu adıma geldiyseniz sadece git ve python3 paketinin yüklenmesini zorunlu tutan bir ornekpaket uygulamasını deb paketi haline getirmek için bir eksiğiniz kalmadı. Bunun için aşağıdaki komut ile paketi oluşturabilirsiniz:
dpkg -b ornekpaket-1.4.0-b2 ./ornekpaket-1.4.0-b2.deb
veya
dpkg-deb --build ornekpaket-1.4.0-b2/pre>
Bu komut çıktı olarak ornekpaket-1.4.0-b2.deb isimli dosyayı çıkartır ve kurulmaya hazır bir halde çalıştırılmayı beklemektedir. Paketin içerisindeki bilgileri görmek için ise "-I" parametresini kullanabilirsiniz. 
dpkg -I ornekpaket-1.4.0-b2.deb 
Yanlışlıkla "-i" parametresini kullanırsanız paketi kuracağınızı unutmamalısınız. Makalenin başında belirttiğimiz "-s" parametresi ise kurulu paketlerin tam adının yazıldığı durumu içermekte idi. "-I" paramertesi ise ".deb" paketi içindeki bilgilendirmeyi yaptığını unutmayın.

Bu makalede temel bileşenleri anlatmak istediğim için şimdilik yarıda kesiyorum. Makalenin devamında detaylı içerikler eklenecektir. Daha ileri makalelerde ise APT aracı ve depo yönetim süreçlerinden bahsedeceğim.

Domain forest seviyesinin düşürülmesi

Özellikle SAMBA DC'nin Aktif Dizin ile güven ilişkisi kurabilmesi için Forest ve Domain seviyelerinin 2012R2 olması gerekmektedir. Bu seviyeler genellikle Windows sunucusunun sürümü olarak algılandığı ve arayüz üzerinden daha güncel sürümlerde eskiye yönelik geri çekim yapılamadığı için yanlış bir algı oluşmaktadır.

Microsoft'un kendi blog sayfasında da paylaştığı gibi Powershell komutları ile Forest ve Domain seviyesi düşürülebilmektedir. Bunun için sunucusunuzda aşağıdaki adımları yapmanız gerekmekte.

Öncelikle Windows 2016 ve üstü sürümlerde iseniz SAMBA 4.11.x ve üstü sürümler için 2012R2 şemasına geri çekmeniz gerekmektedir. Bunun için Windows sunucusuna domain admin yetkili bir hesapla giriş yapmanız gerekmektedir. Daha sonra Powershell uygulamasını Admin Haklarıyla açmanız gerekmekte. Sonraki adımda ise ilk olarak aşağıdaki komutu uygulayarak Powershell oturumunuzda ActiveDirectory modülünü import etmeniz gerekiyor:
Import-Module -Name ActiveDirectory 
Herhangi bir hata almazsanız modülün import edildiğini düşünebilirsiniz. Aşağıdaki komutlar ile Forest ve Domain seviyelerinizi ayrı ayrı görebilirsiniz:
(Get-ADForest).ForestMode 
(Get-ADForest).DomainMode
Daha sonra seviye düşürebilmek için aşağıdaki komutu uygulamanız gerekiyor. Bu işlemleri sırası ile yaparken size emin olup olmadığınızı soran bir diyalog çıkacak ve ona "Yes to All" için A diyerek enter'a basabilirsiniz:
Set-ADForestMode –Identity “DOMAINADI.COM” –ForestMode Windows2012R2Forest
Set-ADDomainMode –Identity “DOMAINADI.COM” –DomainMode Windows2012R2Domain
Aynı oturumda tekrar aşağıdaki komutlar ile seviyenin değiştiğini görebilirsiniz:
(Get-ADForest).ForestMode 
(Get-ADForest).DomainMode
Eğer Windows2012R2 olarak görüyorsanız Samba 4.11.x üstü samba etki alanı denetçisini kullanabilirsiniz.

Kaynak: https://blogs.technet.microsoft.com/canitpro/2016/01/20/step-by-step-downgrading-a-windows-server-domain-and-forest-functional-level/

Özel ağlar için ayrılmış IP aralıkları

Özellikle kapalı ağlarda kullanılmak üzere, karışıklığa neden olmaması açısından internet'te kullanılmayan IP aralıkları bulunmaktadır. Bu ağ aralıkları aşağıdaki gibi özetlenebilir:
10.0.0.0        -   10.255.255.255  (10/8 prefix)
172.16.0.0      -   172.31.255.255  (172.16/12 prefix)
192.168.0.0     -   192.168.255.255 (192.168/16 prefix)
Özet olarak bu aralıklarda IP adreslerini kullanarak kapalı ağınızda sırası ile 16.777.216, 1.048.576 ve 65.536 adet IP adresini kullanabilirsiniz.

Kaynak: https://tools.ietf.org/html/rfc1918

0'dan bir GNU/Linux Sistem Yöneticisi neleri bilmeli?

Fatih Kadir Akın'ın oldukça güzel hazırlamış olduğu "0'dan bir web developer neleri bilmeli" başlıklı yazıya GNU/Linux Sistem Yöneticisi bakış açısıyla başka bir girdi yapmak istedim. Umarım faydalanan birileri çıkacaktır. Fikir Kaynağı

0'dan bir GNU/Linux Sistem Yöneticisi neleri bilmeli?
* İngilizce okuma?
* GNU/Linux nedir?
* Özgür yazılım ve açık kaynak yazılım nedir?
* Sahipli yazılım nedir?
* İşletim sistemi, Çekirdek ve dağıtım nedir?
* Sistem üzerindeki dizin yapısı nedir?
* Kabuk nedir?
* Masaüstü ortamı nedir?
* Uçbirim komutları nedir?
* Paket yöneticisi nedir?
* Sunucu nedir?
* İstemci nedir?
* Betik programlama dilleri nedir?
* Bash nedir?
* Python nedir?
* Ruby nedir?
* PHP nedir?
* IP nedir?
* Port nedir?
* TCP/IP nedir?
* Ağ yönetimi nedir?
* Sistem üzerinde açık olan portlar nedir?
* Sisteme giriş yapan trafik nedir?
* Sistemden çıkan trafik nedir?
* Güvenlik duvarı nedir?
* firewalld, ufw, nftables ve selinux nedir?
* İki cihaz arası socket bağlantısı kurmak nedir?
* SSH nedir?
* openssh nedir?
* DNS nedir?
* bind nedir?
* DHCP nedir?
* Soket bağlantısı kurmak nedir?
* Linux sistemlerde dosya düzenleme nedir?
* vi ve nano nedir?
* Yapılandırma dosyaları nedir?
* Sistem üzerindeki servisler nedir?
* Servislerin yönetilmesi nedir?
* systemctl nedir?
* Süreç ve süreçlerin yönetilmesi nedir?
* Kütük(log) kaydı nedir?
* Kütük kaydı düzenleme ve inceleme nedir?
* rsyslog nedir?
* elasticsearch, logstash ve kibana nedir?
* POSIX Kullanıcı yönetimi nedir?
* Merkezi kullanıcı yönetimi nedir?
* Dizin servisleri nedir?
* LDAP nedir?
* OpenLDAP nedir?
* SAMBA DC nedir?
* FreeIPA nedir?
* Kimlik yönetimi nedir?
* SSO nedir?
* Kerberos nedir?
* İzin sistemi nedir?
* chmod ve chown nedir?
* ACL nedir?
* getfacl ve setfacl nedir?
* Dosya paylaşım nedir?
* ftp nedir?
* samba ve nfs nedir?
* iSCSI ve GlusterFS nedir?
* Zamanlanmış görevler nedir?
* crontab nedir?
* Yedekleme nedir?
* rsync nedir?
* Yedekleme sunucusu nedir?
* bacula nedir?
* Vekil sunucusu nedir?
* Web teknolojileri nedir? (ayrı bir dala geçmekte)
* Basit bir web sunucu nedir?
* apache ve nginx nedir?
* Veritabanı nedir?
* sqlite nedir?
* mariadb ve postgresql nedir?
* mongodb nedir?
* Sertifika ve ssl nedir?
* Sertifika makamı nedir?
* openxpki ve dogtag nedir?
* VPN nedir?
* openvpn ve openconnect nedir?
* RADIUS nedir?
* freeradius nedir?
* Yük dengeleme ve kümeleme nedir?
* haproxy nedir?
* Sanallaştırma teknolojileri nedir?
* KVM nedir?
* Virtualbox, Proxmox ve Ovirt nedir?
* vagrant ve docker nedir?
* SNMP nedir?
* Zabbix nedir?
* Uzak yapılandırma yönetimi nedir?
* cockpit nedir?
* ansible, chef, saltstack ve puppet nedir?

Firefox ile Kerberos biletine erişmek

İnternet tarayıcısı üzerinde çalışan kimi uygulamalar SSO (tek oturum açma) işleminin uygulanabilmesi için mevcut işletim sisteminde açılmış olan oturumun biletinin kullanılmasına uygun şekilde "Kerberos" ile giriş yapmaktadır. Bu işlemin aktif olabilmesi için Firefox'ta aşağıdaki ayarların yapılması gerekmektedir. Eğer sistem "Windows Authentication veya NTLM" ile giriş yapıyorsa bu işlem geçerli olmayacaktır.

1. Firefox araç çubuğunda about:config sayfasına gidilir.
2. negotiate araması yapılır.
3. network.negotiate-auth.trusted-uris üzerine çift tıklayarak domain ismi girilir (örneğin ACIK.LAB)
4. Tamam'a tıklanır ve Firefox yeniden başlatılır.

Tüm bu işlemlerin geçerli olabilmesi için komut satırında klist komutu ile kerberos bileti alınıp alınmadığı kontrol edilmelidir.

Örnek bir kerberos bileti:
Ticket cache: FILE:/tmp/krb5cc_10537_h6SJDM
Default principal: aakkirman@ACIK.LAB
Valid starting       Expires              Service principal
17-05-2018 15:54:49  18-05-2018 01:54:49  krbtgt/ACIK.LAB
   renew until 18-05-2018 01:54:49