özgür dünya

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

SNMP ile basit izleme

Amacımız bir bilgisayardaki temel bilgilere hızlıca erişmek ise SNMP'yi kullanabiliriz. Genellikle ağ cihazlarının durumlarının kontrolü için kullanılan bu protokol çeşitli "izleme" yöntemlerinde de altyapı olarak kullanılmakta. 

Öncelikle debian tabanlı sistemlerde aşağıdaki paketleri yükleyerek temel seviyede gerekliliğimizi sağlayabiliriz:
apt install -y snmpd snmp
Daha sonra "/etc/snmp/snmpd.conf" dosyamızın bir yedeğini aldıktan sonra ilgili dosyayı aşağıdaki gibi düzenleyebiliriz:
#  IPv4 ve IPv6'da 161 portu üzerinden UDP ile haberleşmekte
agentAddress udp:161,udp6:[::1]:161
#  İstenilen OID'ler
view   all  included   .1.3.6.1.2.1.1
view   all  included   .1.3.6.1.2.1.25.1
#rocommunity public  localhost
#  varsayılan yetki
 rocommunity parolatest  default    -V all
 rocommunity6 parolatest  default   -V all
sysLocation    aciklab
sysContact     alorak <ali@orhun.net>
 #   send SNMPv1  traps
 trapsink     localhost public
#   send SNMPv2c traps
 trap2sink    localhost public
Yapılandırma ayarları düzenledikten sonra servisi yeniden başlatabilirsiniz:
systemctl restart snmpd.service
Aynı bilgisayarda test etmek için:
snmpwalk -c parolatest -v2c -O e 127.0.0.1
Uzaktaki farklı bir bilgisayardan veri alabilmek için: ( snmp paketi yüklü olmalıdır)
snmpget -v 1 -c parolatest 192.168.1.176 .1.3.6.1.2.1.25.1.1.0


CA Kök Sertifikası Ekleme

Bazı durumlarda CA (Certificate Authority - Sertifika Makamı)'nın sertifikaları dağıtabilmesi çok da olası olmadığı durumlar olabilir. Özellikle MS sistemlerde AD CS (Active Directory Certificate Service) ve GPO Güvenlik Politikaları kullanarak "enrollment" (kaydolma) işlemi yapılmaktadır. Linux dünyasında ise benzer çözümler RedHat kurumsal çözümü olarak "DogTag" sertifika sunucusu kullanılabilir. Özellikle FreeIPA içerisinde de bu çözüm bulunmaktadır. certmonger uygulaması ile istemci tarafında sertifikaların alınabilmesi için uygulama yapılabilmektedir. Dogtag uygulamasına alternatif olarak ise; openXPKI ve EJBCA örnek verilebilir.

Bugün ise bu konuların detayına girmeden önce elle bu işlemi nasıl yapabileceğimizin küçük bir örneğini yapacağız. Öncelikle örneğimizi Debian tabanlı sistemlerde uygulayacağımızı belirtmek isterim.

Elimizde "root.cert.pem" adında bir sertifika olduğunu varsayıyoruz. Bu sertifika bir sertifika makamı veya kendinden imzalı yöntemlerle oluşturulmuş olabilir. Aşağıdaki yöntem ile sistem içerisinde wget veya curl komutlarıyla kullanılabilecek kök sertifika eklenmiş olmaktadır:
sudo mkdir /usr/local/share/ca-certificates/extra
sudo cp root.cert.pem /usr/local/share/ca-certificates/extra/root.cert.crt
sudo update-ca-certificates
Fakat Mozilla Firefox, Google Chrome veya Chromium tarayıcılarının kendi sertifika depoları bulunmaktadır. Bu nedenden dolayı onlar için ayrı işlem yapılması gerekiyor. Bu işlem için bir araca da ihtiyacımız var "certutil":
sudo apt install libnss3-tools
Bunun için aşağıdaki betik sistemimizdeki cert8.db (legacy - DBM) ve cert9.db (SQL) dosyalarını bularak bu dosyalara ilgili sertifikayı eklemeyi sağlamakta. Eğer ilgili dosyaların nerede olduğunu biliyorsanız bu işi tek adımda da yapabilirsiniz.
#!/bin/bash
certfile="root.cert.pem"
certname="Kok CA"
for certDB in $(find ~/ -name "cert8.db")
do
    certdir=$(dirname ${certDB});
    certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d dbm:${certdir}
done
for certDB in $(find ~/ -name "cert9.db")
do
    certdir=$(dirname ${certDB});
    certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir}
done

Samba DC 4.9.5 Kurulumu

SAMBA DC, Windows Aktif Dizin'in oldukça önemli bir alternatifi olarak karşımıza çıkmaktadır. Bu konuda çok fazla detay bilgi olmasına rağmen bu yazıda temel seviyede bir SAMBA DC kurulumu yapacağız. Windows AD ile güven ilişkisi kurma yöntemi de son paragrafta gösterilecektir.

Öncelikle sistemi Ubuntu 18.04 Sunucu üzerinde yazdığımı belirtmem lazım. Statik bir IP belirledikten sonra aşağıdaki adımlara geçmenizde yarar var. Eğer Windows AD ile güven ilişkisi kuracaksanız ağ ayarlarına aynı DNS kaydını da eklemeniz gerekmektedir.

İlk olarak derleyerek güncel sürüm kullanımı uygulaması yapacağız. Öncelikle sistemimizi güncelleyip, bağımlılıkları yüklemeniz gerekmektedir.
apt install -y libreadline-dev git build-essential libattr1-dev libblkid-dev libpam0g-dev autoconf gdb
apt install -y python-dev python-dnspython libacl1-dev pkg-config libpopt-dev libldap2-dev libcups2-dev
apt install -y dnsutils acl attr libbsd-dev docbook-xsl libgnutls28-dev
apt install -y liblmdb-dev lmdb-utils libjansson-dev libgpgme11-dev libarchive-dev 
Daha sonra şuan için güncel 4.9.x sürümlerinden 4.9.5 indirilecektir.
cd /usr/src
get_samba4=https://download.samba.org/pub/samba/stable/samba-4.9.5.tar.gz
wget -c ${get_samba4}
tar xvfz $(basename ${get_samba4})
cd $(basename ${get_samba4}|sed "s/.tar.gz//")
Bu adımdan sonra kaynak kodu ikili sisteme çevrilecektir:
./configure --with-ads --with-shared-modules=idmap_ad --enable-debug --enable-selftest --with-systemd --prefix=/opt/samba4
make
make install
Ve servis dosyası hazırlanır:
echo '[Unit]
Description=Samba4 AD DC Daemon
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/opt/samba4/var/run/samba.pid
LimitNOFILE=16384
EnvironmentFile=-/etc/sysconfig/samba4
ExecStart=/opt/samba4/sbin/samba $SAMBAOPTIONS
ExecReload=/usr/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target' > /etc/systemd/system/samba4.service
Komutların çalıştırılabilmesi için çalıştırılabilir ayarlanması gerekiyor:
echo 'export PATH=$PATH:/opt/samba4/bin:/opt/samba4/sbin' >> /etc/profile
echo 'export PATH=$PATH:/opt/samba4/bin:/opt/samba4/sbin' >> ~/.bashrc
source /etc/profile
Bu adımdan sonra SAMBA DC temel gereksinimleri kurulu olup etki alanı eklenmesi gerekliliği bulunmaktadır. 
1. Sıfırdan bir etki alanı eklemek için:
samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=ACIKLAB.NET --domain=ACIKLAB --adminpass=AcikLab01
systemctl daemon-reload
systemctl enable samba4.service
systemctl start samba4.service
2. Eğer var olan bir Windows AD sunucu ile güven ilişkisi kurulacaksa krb5-user paketi eklendikten sonra:

/etc/krb5.conf içinde aşağıdaki satırların olması:
[libdefaults]
    dns_lookup_realm = false
    dns_lookup_kdc = true
    default_realm = WIN.LAB
Yetkili kullanıcı için bilet alınır ve var olan domaine giriş yapılarak güven ilişkisi kurulur:
kinit administrator
samba-tool domain join win.lab DC -U"WIN\administrator" --dns-backend=SAMBA_INTERNAL

Çıktının sonunda aşağıdaki satırı görüyorsanız başarı ile sonuçlandırmış olacaksınız:
Joined domain WIN.LAB (SID S-1-5-21-469703510-2364959079-1506205053) as a DC