linux hardening guide arşivleri • CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me cypm! Mon, 17 Aug 2020 10:12:21 +0000 tr hourly 1 https://wordpress.org/?v=6.0 https://canyoupwn.me/wp-content/uploads/2016/02/cropped-Başlıksız-1-32x32.png linux hardening guide arşivleri • CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me 32 32 TR | Linux Kullanıcı Güvenliği https://canyoupwn.me/tr-linux-kullanici-guvenligi/ https://canyoupwn.me/tr-linux-kullanici-guvenligi/#respond Thu, 26 Jan 2017 06:20:33 +0000 https://canyoupwn.me/?p=5359 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Parola Güvenliği Parola güvenliği, kullanıcı güvenliğinin en önemli unsurlarındandır. Bilgisayar sistemlerinde ilk karşımıza çıkan güvenlik önlemi parola sistemidir. Hem bizim hem de kullanıcılarımız için parola güvenliği çok büyük önem taşımaktadır. Yakın zamanda çıkan linux işletim sistemlerinde, passwd uygulama sistemi parola güvenliğini en üst seviyeye çıkarmayı amaçlamıştır. Bu yüzden işletim sistemlerimizin güncel olmasına önem göstermeliyiz. Parola […]

TR | Linux Kullanıcı Güvenliği CanYouPwnMe

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Parola Güvenliği

Parola güvenliği, kullanıcı güvenliğinin en önemli unsurlarındandır. Bilgisayar sistemlerinde ilk karşımıza çıkan güvenlik önlemi parola sistemidir. Hem bizim hem de kullanıcılarımız için parola güvenliği çok büyük önem taşımaktadır. Yakın zamanda çıkan linux işletim sistemlerinde, passwd uygulama sistemi parola güvenliğini en üst seviyeye çıkarmayı amaçlamıştır. Bu yüzden işletim sistemlerimizin güncel olmasına önem göstermeliyiz. Parola belirlerken kaba kuvvet gibi saldırı yollarıyla kırılması zor parolalar seçmeliyiz. Nasıl parola seçmemiz gerektiği  TR | Parola Güvenliği başlığında anlatılmıştır.

Parola Yenileme

Kullanıcıların belirli aralıklarla parolalarını değiştirmelerini sağlamalıyız. Bu sayede kullanıcı güvenliğini artırmış oluruz. Parola değiştirecekleri tarihleri ve ne kadar süre kullanacakları gibi ayarları belirlerken chage  komutu kullanılmaktadır. chage –l username  komutu ile kullanıcımızın parolasına ait bilgileri görmekteyiz.

Parametreleri inceleyelim;
-m  : Kullanıcının parola değiştirdikten sonra tekrar değiştirebilmesi için, en az geçmesi gereken süreyi belirtmemizi sağlar.
-M  parametresi: Belirleyeceğimiz gün geçtikten sonra kullanıcının parolayı tekrar değiştirmesini sağlar.
-E  parametresi: Kullanıcının hesabı son kullanma tarihini belirlememize olanak sağlar. Verilen tarihte hesap kapatılır. Kullanımı “YYYY-AA-GG” şeklindedir.
-I  parametresi: Kullanıcı oturuma belirttiğimiz süre içerisinde giriş yapmazsa, oturum otomatik olarak kilitlenecektir.
-W  parametresi: Kullanıcıya parolasının zamanının dolması ne kadar süre kaldığı hakkında uyaracaktır.

Örnek kullanımı; sudo chage -E 2016-12-29 -M 100 -m 10 -I 5 -W 5 user  şeklindedir.

Yanlış Parola Giriş

Kullanıcının yanlış parola giriş sayısını sınırlandırmalıyız. Kullanıcılar 3 defadan fazla yanlış deneme yaptığında hesabı geçici olarak kapatılmalıdır.  Bu sayede saldırganların, kaba kuvvet gibi saldırılarını önlemiş oluruz. Bu sınırlandırma faillog  komutu ile yapılmaktadır.

Yukarıda ki komutta user kullanıcısının, yanlış parola giriş sayısını 3 deneme ile sınırlamış olduk.
sudo faillog –all  komutu ile bütün kullanıcıların faillog kayıtlarını görebiliriz.
Burada Failures  sütununda kullanıcının yanlış girdiği parola sayısı gözükmektedir. Buradan çok fazla yanlış deneme yapan kullanıcı, passwd –l username  komutu ile hesabı kapatılabilir.

Parolası Olmayan Hesapların Tespiti

Kullanıcıların parolalarını boş bırakmamaları gerekmektedir. Güncel linux sistemleri parolaların boş bırakılmamasına izin vermemektedir.
awk -F: ‘($2== “”) {print}’ /etc/shadow  komutu ile parolası olmayan kullanıcıların tespiti yapılmaktadır.
passwd –l username  komutu ile parolası olmayan kullanıcılar kitlenir.

Kullanıcı UID Değeri 0 olan Kullanıcıların Tespiti

UID sadece root hesabının 0 olması gerekmektedir. UID değeri 0 olan kullanıcıları tespit etmeli ve hesaplarını silmeliyiz veya bu izni bizim verdiğimizden emin olmalıyız. Güncel linux dağıtımlarında, sistem root harici kullanıcıların UID değerinin 0 olmasına izin vermemektedir
awk -F: ‘($3 == “0”) {print}’ /etc/passwd  komutu ile UID si 0 olan kullanıcıları görürüz.

Burada root hariç UID’si 0 olan kullanıcı var ise, passwd –l username  komutu ile hesabı kapatılmalıdır.

Kullanıcıların CPU VE RAM Kullanımlarının Sınırlandırılması

Kullanıcılar herhangi bir kaynak limiti belirlenmediği zaman, sistemi kırmak için sistemi meşgul eden programlar kullanabilirler. Bu sebeple kullanıcıların çalıştıracağı maximum, process sayısını ve kullanacakları RAM boyutunu ayarlamalıyız.

  • En fazla RAM kullanan kullanıcıların tespiti
ps axo %mem,comm,pid,euser | sort -nr | head -n 10

  • En fazla CPU kullanan kullanıcıların tespiti
ps axo pcpu,comm,pid,user | sort -nr | head -n 10

  • Detaylı bilgi
ps -eo pcpu,pid,user,args,pmem | sort -k 1 -r | head -10

/etc/security/limits.conf  dosyasına aşağıdaki satırları ekleyerek, kullanıcının maximum  açabileceği process’i ve kullanacığı bellek boyutunu belirleyebiliriz.

hard core 0 
hard rss 4000 
hard nproc 10

Kullanıcı maximum 10 tane process açabilecek ve 4MB bellek kullanabilecektir.
Bu özellikleri aktif hale getirmek için, /etc/pam.d/login  dosyası aşağıdaki gibi olmalıdır.

#%PAM-1.0 
auth required /lib/security/pam_securetty.so 
auth required /lib/security/pam_pwdb.so shadow 
auth required /lib/security/pam_nologin.so 
account required /lib/security/pam_pwdb.so 
password required /lib/security/pam_cracklib.so 
password required /lib/security/pam_pwdb.so nullok 
session required /lib/security/pam_pwdb.so 
session required /lib/security/pam_limits.so

Kullanıcıların ne zaman sisteme giriş yaptıklarına dikkat etmeliyiz.

Oturum açma girişlerini kaydetmek için /var/log/wtmp  dosyası olmalıdır, yoksa oluşturulmalıdır.
last -a  en son giriş ve çıkış yapmış olan kullanıcıların terminal ismi, tarih, saat, tam istemci adı gibi bilgileri gösterir. Bu komut /var/log/wtmp  dosyasının içini okur.

Kullanıcıların sisteme yanlış giriş denemelerini kaydetmeliyiz.

Yanlış giriş denemeleri kaydetmek için /var/log/btmp  dosyası olmalıdır, yoksa oluşturulmalıdır.
lastb  başarısız oturum açma girişimlerini gösterir. Bu komut /var/log/btmp  dosyasının içerisindeki kayıtları okur ve bize çıktı sunar.

Kullanılmayan Hesapların Kapatılması

UID değeri 500’ün altında olan hesaplar kontrol edilmeli, kullanılmayan hesaplar kapatılmalıdır. Çünkü bu hesaplar saldırganların girmesi için birer kapıdır. Hesabı silmek için userdel UserName  komutunu kullanmalıyız.

Bilgisayarımız herkesin kullandığı bir yerde ise;

/etc/lilo.conf  dosyasını açıyoruz ve aşağıdaki satırı yazıyoruz.

timeout=00 restricted password="belirlediğimiz parola " timeout

Bu satır makine açılırken, LILO’nun beklememesini sağlar, bu sayede LILO’ya parametre verilmesini engellenir. Restricted satırı makinanın single modda açılması gerektiğini belirtir. Kullanıcı girerken belirttiğimiz parola ile giriş yapar.

Yetkiler gruplara verilmeli, kullanıcılar gruplara dahil edilmelidir.

Yeni hesap açan kullanıcıların asgari ihtiyaçlarını karşılayacak minimum yetkinin verildiğinden emin olmalıyız.
Grup hesaplarının oluşturulması için groupadd  komutu kullanılır.

Gruba kullanıcı eklemek için;

usermod –g <grupAdı> -G <diğerGrupAdı> <kullanıcıAdı>

Grup Ön Yükleyicisinin Şifreli Hale Getirilmesi

Yetkisiz erişimlerin önlenmesi amacıyla, ön yükleyicinin şifreli hale getirilmesi sağlanmalıdır.
Bu amaçla, iki dosya üzerinde düzenlemeler yapacağız. Önce bu iki dosyanın her ihtimale karşı yedeklemesini yapmalıyız.

Daha sonra gedit editörü ile /etc/grub.d/10_linux  dosyasını açıyoruz ve en alt satıra ,

cat <<EOF
set superusers="root"
password root p@ssW0rd123* 
EOF

komutlarını ekliyoruz.

Parolayı belirledikten sonra yeni grub.cfg dosyasını oluşturmak için, grub-mkconfig–output=/boot/ grub/grub.cfg  komutunu kullanıyoruz. Daha sonra sunucumuzu yeniden başlatıyoruz.

İşletim sistemi açılırken, kullanıcı adı ve parola soran bir ekranla karşılaşırız. Buradan grub ön yükleyici ekranına giriş olanağı sağlanır.

Şimdi sıra parola güvenliğimizi artırmak için parolamızı şifrelemeye geldi. Parolamızı şifrelemek için grub-mkpasswd-pbkdf2  komutunu kullanıyoruz.

Daha sonra şifrelenmiş kısmı daha öncede kullanmış olduğumuz aşağıdaki kodda password kısmına yapıştırıyoruz.

cat <<EOF
set superusers="root"
password_pbkdf2 root
grub.pbkdf2.sha512.10000.******
EOF

Parola şifrelendikten  sonra tekrar  yeni grub.cfg dosyasını oluşturuyoruz. Bunun için, grub-mkconfig–output=/boot/ grub/grub.cfg  komutunu kullanıyoruz. Daha sonra sunucumuzu yeniden başlatıyoruz.

 


 

TR | Linux Kullanıcı Güvenliği CanYouPwnMe

]]>
https://canyoupwn.me/tr-linux-kullanici-guvenligi/feed/ 0
TR | Linux PAM Modülü https://canyoupwn.me/tr-linux-pam-modulu/ https://canyoupwn.me/tr-linux-pam-modulu/#respond Thu, 29 Sep 2016 06:30:25 +0000 https://canyoupwn.me/?p=4221 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PAM (Pluggable Authentication Modules), servislere göre farklı kimlik denetleme yöntemleri belirleyebilmeyi sağlayan bir sistemdir. Linux dağıtımlarında kullanıcı bilgisi /etc/passwd dosyasında saklanır. Bu metin dosyasında kullanıcının kullanıcı adı, şifrelenmiş parolası, benzersiz sayısal kullanıcı kimliği (uid), sayısal grup kimliği (gid), seçimlik yorum alanı (kullanıcının gerçek adı, telefon numarası vb. bilgiler), ev dizini ve tercih ettiği kabuk bilgileri bulunur. Bir […]

TR | Linux PAM Modülü CanYouPwnMe

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PAM (Pluggable Authentication Modules), servislere göre farklı kimlik denetleme yöntemleri belirleyebilmeyi sağlayan bir sistemdir.

Linux dağıtımlarında kullanıcı bilgisi /etc/passwd dosyasında saklanır. Bu metin dosyasında kullanıcının kullanıcı adı, şifrelenmiş parolası, benzersiz sayısal kullanıcı kimliği (uid), sayısal grup kimliği (gid), seçimlik yorum alanı (kullanıcının gerçek adı, telefon numarası vb. bilgiler), ev dizini ve tercih ettiği kabuk bilgileri bulunur.

Bir sistemde gölgelenmiş parolalar aktif edildiğinde  /etc/passwd  dosyasındaki parola alanına x yazılır.

passwd

 

Kullanıcının gerçek şifrelenmiş parolası  /etc/shadow  dosyasında saklanır.

shadow

Login veya su gibi programlar parolaları nasıl doğrulayacaklarını nereden bildiğini veya sistemdeki parolaların saklanma biçimini değiştirirseniz neler olacağını öğrenmek için PAM e bakalım.

PAM belirli programların kullanıcı kimlik kanıtlaması yapamayacağı, sadece belirli kullanıcıların kimlik kanıtlaması yapabileceği, bazı programlar kimlik kanıtlaması yapmak istediğinde uyarı verecek şekilde ve hatta tüm kullanıcıları oturum açma ayrıcalıklarından mahrum bırakacak şekilde yapılandırılabilir.

PAM, iki bileşenden oluşmaktadır:

  • Biri API ( Application Programming Interface – Uygulama Programlama Arayüzü ) sağlar.
  • Diğeri kimlik denetimini gerçekleştirir.

PAM modülleri 4 farklı görev için kullanılmaktadır. Bu görevler;

  • kimlik denetim yönetimi,
  • hesap yönetimi,
  • oturum yönetimi
  • şifre yönetimi.

Önemli pam modülleri ; pam_unix, pam_nologin, pam_ldap, pam_securetty, pam_limits, pam_access, pam_warn, pam_deny, pam_permit olarak sayabiliriz.

 

Pam_limits modülünü inceleyecek olursak;

limitconf

Kişi / Grup : @student – user

Kısıtlama : soft – hard

Kaynak : core – rss – nproc

Değer : 0 – 100000 – 20 – 50

Tanımlamalar ;

core : Core dosyasının boyutu (KByte)

data : Kullanıcının çağırdığı programlarda ayrılacak maksimum hafıza (KByte)

fsize : Kullanıcı en büyük kaç KB’lık dosya yaratabilir.

nofile : Aynı anda açılabilecek dosya sayısı.

nproc : Maksimum uygulama sayısı.

rss : KByte cinsinden hafıza kaplacak yer.

maxlogins : Sisteme aynı anda kaç kere login olabilir.

soft : kullanıcı kendine göre tanımlayabilir.

hard : son limitler, kullanıcılar değiştiremez.

NOT : @ işareti grubu ifade eder, “*” ise tümü demektir.

 

 PAM yapılandırması

  • Her servis için ayrı olan yapılandırma dosyaları /etc/pam.d dizini altında olmalıdır.etcpam

 

  • Tüm yapılandırma tek bir dosyada tutulur ve bu dosya  /etc/pam.conf dosyasıdır.etcpamconf

 

PAM SSH Servisi Konfigürasyon Örneği

PAM, sunucunuza erişimi zorlaştırmanın ve ekstra güvenlik kuralları sağlamanın yollarından biridir. Sunucunuza hangi kullanıcıların erişebileceğini belirlemek için alternatif bir çözümdür.

sshd

  1.  PAM Modül Tipi

  • Auth : Kullanıcı doğrulama, kimlik denetetimi yapar.
  • Account: Kullanıcının sisteme girebileceği saatlerin belirlenmesi, bir kullanıcının en fazla kaç oturum açabileceği gibi bilgileri kontrol eder. Kullanıcının servise erişmeye izni olup olmadığını, parolasının süresinin geçip geçmediğini tespit eder.
  • Session:Kullanıcının oturumu sırasında ve oturum sonrasında yapılması gereken rutin işlemleri kontrol eder. (şifre kaydetme, mount etme vs.)
  • Passwd:Kullanıcının kimlik denetimi verilerinin güncellenmesini denetler.

 

  1. PAM Kontrol Bayrağı – Denetim:

  • Required:PAM kimlik kanıtlamasını reddetmeden önce bu servis için listelenmiş diğer modülleri denemeye devam etse de; sonuç kimlik kanıtlamasının reddi ile başarısızlık olur.
  • Requisite:“required” seçeneğinden  farklı olarak, eğer bir modül başarısız olursa işlemin başarısız olduğu uygulamaya hemen bildirilir. Derhâl reddedilir.
  • Sufficient:“Sufficient”, kontrol bayrağına sahip bir modül başarılı olduğu takdirde, önceki modüllerde başarısız olsa bile, işlemin başarılı olduğu uygulamaya bildirilir.
  • Optional:“Optional” kontrol bayrağına sahip bir modülün başarısı veya başarısızlığı işlemin başarısını etkilememektedir.

 

  1. PAM Modül Dosyalarının Yeri:

  • PAM modülünün sistem içindeki yerini, dizinini belirtir. PAM, hangi modülü kullanacağını ve modülleri nerede bulacağını burada verilen yol sayesinde bilir. Çoğu yapılandırma sadece modülün adını içerir. Böyle durumlarda, PAM öntanımlı PAM modül dizinine bakar, bu normalde/usr/lib/security

 

  1. PAM Arguments (Modül Argümanları):

    Modüle gönderilecek olan argümanlar, modüllerin parametreleridir. Her modülün, kendi parametresi vardır. Örnek olarak; en çok kullanılan modüller şu şekilde sıralanabilir.

pam_unix.so temel kimlik kanıtlama modülüdür. Bu modüle “null ok” parametresi gönderilirse, boş parola geçerli anlamına gelir.
pam_warn.so sistem günlüklerine uyarı mesajı kaydeder.
pam_deny.so kimlik denetimini reddeder.
pam_rootok.so kimlik denetimi yapılırken kullanıcının root olup olmadığını kontrol eder.
pam_securetty.so  kullanıcının güvenli konsola oturum açtığından emin olmayı sağlar.
pam_lastlog.so  kullanıcının en son açtığı oturum ile ilgili bilgileri getiren modüldür.

 

Sudo Komutunun Engellenmesi

Linux işletim sistemlerinde root olarak eylem yapabilmeyi sağlayan sudo komutu /etc altındaki “sudoers” dosyasında yapılan değişikliklerle engellenebilir.

Sudoers dosyasının içerisindeki; sudo komutunun çalışmasını sağlayan satırın önündeki yorum işareti kaldırılırsa, sudo komutunu çalıştırma izni sadece “wheel” grubundaki kullanıcılara verilmiş olur.

# wheel    ALL=(ALL)    ALL

etcsudoers

NOT: Kullanılan linux dağıtımında böyle bir yorum satırı olmayabilir, böyle durumlarda satır dosyaya eklenmelidir.

 

Örnek Senaryo: Root hariç diğer kullanıcıların belirli zamanlarda login işlemini yapabilmelerine izin verelim.

Bu erişim yetkilendirme için bize zaman kısıtlamaları sunan pam_time modülünü kullanalım. Pam_time modülü yapılandırma dosyası /etc/security  altındaki  time.conf dosyasıdır.

Not: Başka yollar denemek isterseniz pam_time’a benzeyen pam_access ve  pam_listfile modüllerine bakabilirsiniz.

Aşağıda görüldüğü gibi time.conf dosyasında,

login ; tty* & !ttyp* ; !root ; !WdSu0000-2400

login islemi için root hariç diğer tüm kullanıcılar haftanın pazar günü hariç giriş yapılabilsin, demek istiyorum. Hangi gün istiyorsanız WdMo, WdSa  şeklinde Wd(weekend) ve günün ilk 2 harfi şeklinde veya tüm zamanlar için Al şeklinde yazabilirsiniz.

timeconf

Ayrıca /etc/pam.d altında login dosyasına ek olarak account satırı ekliyoruz.

tmmm

Ve komut satırından deneme kullanıcısı için login olmak istediğimizde erişim kısıtlamasıyla karşılaşıyoruz.

permissndenied

Kaynaklar:

http://linux.die.net/man/5/time.conf

http://linux.yorenet.com/?hn=483&kn=241&dil=tr&kw=Daha+Guvenli+SSH+Baglantilari

http://dincer.info/yazi/linux-pam-ile-kimlik-denetimi


TR | Linux PAM Modülü CanYouPwnMe

]]>
https://canyoupwn.me/tr-linux-pam-modulu/feed/ 0
TR | Linux Bash Aktivitelerinin Loglanması https://canyoupwn.me/tr-linux-bash-aktivite-loglanmasi/ https://canyoupwn.me/tr-linux-bash-aktivite-loglanmasi/#respond Thu, 01 Sep 2016 14:11:10 +0000 https://canyoupwn.me/?p=4155 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Linux sunucumuzda birden fazla kullanıcı erişim yetkisine sahip ise bütün kullanıcıların aktivite kaydını tutmak isteyebiliriz. Evet  .bash_history altında kayıt ediliyor fakat yeteri kadar güvenli değil. Anında kayıt olmuyor ve sistem çöktüğünde ya da istenmeyen şekilde bash oturumu sona erese kayıtlara ulaşamayabiliriz. Bash aktivite loglarını olası bir istenmeyen durum karşısında incelemek için log sunucumuza göndermemiz daha […]

TR | Linux Bash Aktivitelerinin Loglanması Gökay Atar

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Linux sunucumuzda birden fazla kullanıcı erişim yetkisine sahip ise bütün kullanıcıların aktivite kaydını tutmak isteyebiliriz.

Evet  .bash_history altında kayıt ediliyor fakat yeteri kadar güvenli değil. Anında kayıt olmuyor ve sistem çöktüğünde ya da istenmeyen şekilde bash oturumu sona erese kayıtlara ulaşamayabiliriz.

Bash aktivite loglarını olası bir istenmeyen durum karşısında incelemek için log sunucumuza göndermemiz daha sağlıklı olacaktır ve önce kaydımızı alıp sonra yazdığımız komutun işletilmesini sağlayacağız.

 

Herhangi bir metin düzenleme editorü  ile /etc/bash.bashrc  açalım. Ben direk düzenleme modu ile açıyorum.

sudo -e /etc/bash.bashrc

Daha sonra aşağıdaki satırı ekleyelim.

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ve kayıt edip çıkalım.

Screenshot from 2016-09-01 15-02-26

 

Şİmdi log dosyasını kayıt yolunu ve dosya adını ayarlayalım. /etc/syslog.conf   herhangi bir metin editörü ile açalım.

sudo -e /etc/syslog.conf

Ve aşağıdaki satırı ekleyelim

 local6.*                /var/log/bashaktivite.log

 

Screenshot from 2016-09-01 15-37-09

Ve kayıt edelim çıkalım.

Log dosyamızın kullanıcıların müdahale etmesini engellemek için izinleri değiştirmeyi unutmayalım

sudo chattr +a /var/log/bashaktivite.log

Son olarak log servisimizi yeniden başlatalım.

systemctl restart rsyslog.service

Her şey tamam şimdi /var/log/bashaktivite.log log dosyamızı açarak kayıtları görebiliriz.

cat /var/log/bashaktivite.log

Screenshot from 2016-09-01 15-49-54

 

 

Komutu tanıyalım

logger -p local6.debug "CMDAUDIT EVENT! $(whoami):[$(id -u)]:[$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"

“PROMPT_COMMAND”   Adında ortam değikenimiz var. Bu değişken bash çıktısı vermeden önce işlemin yürütülmesini sağlıyor

RETRN_VAL=$?  Kodumuzu değişkene atıyoruz

$(whoami) işlemi yapan kullancı adı

[$$]  Mevcut shell PID. Eğer aynı kullanıcıya ait başka oturumlar varsa bunları ayırt edebiliriz.

$(history 1 | sed “s/^[ ]*[0-9]\+[ ]*//” )  Son çalıştırdığımız komutu sed ile index ve boşlukları silerek gösterir.

[$RETRN_VAL] Dönüş değerimiz.

Log dosyasını daha detaylı hale getirmek için loglanmasını istediğiniz değişkeni ekleyebilirsiniz.

 

Son olarak unutmadan sunucumuz kendi halinde değilse sürekli işlem yapıyorsak log dosyamız baya şişecektir bunun önüne geçmek için log rotate yapmamız gerek.

sudo -e /etc/logrotate.d/rsyslog

Açalım ve log dosyamızı buraya ekleyelim

Screenshot from 2016-09-01 16-28-03


TR | Linux Bash Aktivitelerinin Loglanması Gökay Atar

]]>
https://canyoupwn.me/tr-linux-bash-aktivite-loglanmasi/feed/ 0
TR | Linux Bash History Formatı https://canyoupwn.me/tr-linux-bash-history-formati/ https://canyoupwn.me/tr-linux-bash-history-formati/#respond Thu, 01 Sep 2016 06:00:24 +0000 https://canyoupwn.me/?p=4119 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bash Nedir ? Bash GNU işletim sistemi için bir kabuk ya da başka bir deyişle komut dili yorumlayıcısıdır. Bourne-Again SHell sözcüklerinde türetilmiş bir kısaltmadır. Unix altında, bash kabuğu diğer benzerlerine nazaran daha fazla özelliğe ve işleve sahiptir. Linux işletim sistemi için de derlenen bash ise hem tcsh, hem de ksh‘dan özellikler taşır. Linux terminali içinde […]

TR | Linux Bash History Formatı Mert Gücü

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bash Nedir ?

Bash GNU işletim sistemi için bir kabuk ya da başka bir deyişle komut dili yorumlayıcısıdır. Bourne-Again SHell sözcüklerinde türetilmiş bir kısaltmadır. Unix altında, bash kabuğu diğer benzerlerine nazaran daha fazla özelliğe ve işleve sahiptir. Linux işletim sistemi için de derlenen bash ise hem tcsh, hem de ksh‘dan özellikler taşır.

echo_shell

Linux terminali içinde echo $SHELL yazdığımız taktirde, işletim sistemi altında default olarak çalışan shell’i(kabuğu) görebiliriz.

/bin/bash  Bu şekilde bir çıktı veriyor. Bin klasörü altında bash çalıştığını anlayabiliriz.

Bash ve bash shell scripting hakkında ayrıca araştırma yapılması faydalı olacaktır. Bu yazıda asıl konumuz olan Bash History ve bunun sıkılaştırması ve gerekli sıkılaştırma işlemleri yapılmadığı taktirde saldırganın bunu ne amaçlarla kullanabileceğini üzerinde duracağız.

Bash History

Bash history /home/user ( ~ ) dizini altında bulunan ve gizli klasör olan .bash_history dosyasının içerisine kaydolmaktadır.

ls-la

cat .bash_history  komutu ile geçmişte yazılmış olan bash komutlarını okumak mümkün iken, bash ekranında direk olarak history  komutuda kaydedilmiş komutları vermektedir.

echo $HISTSIZE  komutu ile ekrana kaç adet geçmiş komut bastırabildiğimizi görebilir ve istersek bunu değiştirebiliriz.

BASH HISTORY KOMUTLARI

  • echo $BASH : Kullanılan kabuk ve dosya yolu.
  • echo $HISTSIZE : .bash_history dosyasının kaç kayıt tuttuğunun çıktısını verir.
  • history | tail : Son 10 komutu listeler.
  • history | more : Birden başlayarak listeler.
  • history n  : “n” değeri yerine yazılan sayı kadar sondan başlayarak komut listeler.
  • CTRL + R : İstediğimiz komutu aramak için arama ekranı açar.
  • history | grep value : “value” değeri yerine girdiğiniz değeri history içerisinde arayıp, değerin gectiği bütün geçmiş komutları getirir.
  • !10 : 10. komutu çalıştırır.
  • !! : Son çalıştırılan komutu tekrar çalıştırır.
  • history -c : Historyi temizler. Burada önemli bir ayrıntı vardır. history -c  komutu shell ekranında history  yazdığınızda gelen çıktıları temizler. Dolayısıyla geçmiş komutlar .bash_history  dosyası altında tutulmaya devam eder.

 

BASH HİSTORYSIZE DEĞİŞTİRİLMESİ

echo $HISTSIZE  komutu ile bash listesinde tutulan toplam komut sayısını öğrenildiğinden bahsetmiştik. Bu komut home/user (~)  dizini altında bulunan .bashrc  dosyası altında bulunmaktadır. Dolayısıyla bu dosyaya girerek değişiklik yapmamız mümkündür.

BASH HISTORYNİN YARARLARI VE ZARARLARI

Bir tehdit açısından ele aldığımızda bash historysinin bazı yararları ve zararları bulunmaktadır.

Avantajları ve Sıkılaştırması

Olası saldırı durumlarında, öncesinde ve sonrasında saldırganın sisteminizdeki izini sürmenize yardımcı olur. Hangi dizinleri erişim sağlanmış, veri kaybı olmuş mu, hangi izinler değiştirilmiş gibi bir çok etkenden haberdar olmuş oluyorsunuz. Özellikle (“Bu komutları ben girmedim”) dediğiniz komutlar mevcut ise sisteminizde bir ziyaretçi bulunuyor olabilir.

Tabi bu yararlardan verimli faydalanabilmek için bazı önlemler alınması gerekmektedir.

ls,la,profile

chattr +a /home/user/.bash_history 
chattr +a /home/user/.bash_profile 
chattr +a /home/user/.bash_login 
chattr +a /home/user/.profile 
chattr +a /home/user/.bash_logout 
chattr +a /home/user/.bashrc

chatter +a  komutu ile sadece ekleme yapılabilir özelliğini veriyoruz. Böylelikle root kullanıcısı dışında her hangi bir silme düzenleme işlemi yapılamaz hale gelecektir.

Dezavantajları

Bash History bütün komutları sakladığı için plain-text şifreler, önemli gizli dosyalar gibi bir çok dosyada listelenecektir.


TR | Linux Bash History Formatı Mert Gücü

]]>
https://canyoupwn.me/tr-linux-bash-history-formati/feed/ 0
TR | Mod Evasive ile DOS/DDOS Koruması https://canyoupwn.me/tr-mod-evasive-ile-dosddos-korumasi/ https://canyoupwn.me/tr-mod-evasive-ile-dosddos-korumasi/#respond Mon, 29 Aug 2016 17:46:13 +0000 https://canyoupwn.me/?p=4085 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

DOS/DDOS kavramını daha önceki yazımızda incelemiştik. Sunucularımızı bu saldırılardan korumamız için geliştirilen mod evasive yazılımının kurulumu ve konfigürasyonunu yapmaya başlıyalım. Test sistemimiz ubuntu server üzerinde apache çalışan bir sistem. Kurulum Kurulum için alttaki komutla mod evasive kurulumunu yapıyoruz. sudo apt-get install libapache2-mod-evasive Kurulum başarıyla tamamlanıp tamamlanmadığını kontrol etmek için; sudo apachectl -M | grep evasive […]

TR | Mod Evasive ile DOS/DDOS Koruması Mustafa Kaan Demirhan

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

DOS/DDOS kavramını daha önceki yazımızda incelemiştik. Sunucularımızı bu saldırılardan korumamız için geliştirilen mod evasive yazılımının kurulumu ve konfigürasyonunu yapmaya başlıyalım. Test sistemimiz ubuntu server üzerinde apache çalışan bir sistem.

Kurulum

  • Kurulum için alttaki komutla mod evasive kurulumunu yapıyoruz.
sudo apt-get install libapache2-mod-evasive

Ekran görüntüsü_2016-08-15_15-04-54

  • Kurulum başarıyla tamamlanıp tamamlanmadığını kontrol etmek için;
sudo apachectl -M | grep evasive

komutundan evasive20_module (shared)  çıktısını alıp almadığımızı kontrol edelim.

Ekran görüntüsü_2016-08-15_15-04-54

Konfigürasyon

  • Konfigürasyon için alttaki konumdaki dosyayı açıyoruz.
sudo nano /etc/apache2/mods-enabled/evasive.conf

Ekran görüntüsü_2016-08-15_15-04-54

  • Aktifleştirmek istediğimiz parametrelerin başından #  i kaldırıp gerekli düzenlemeleri yapmalıyız.

Ekran görüntüsü_2016-08-15_15-04-54

Parametreler

  • DOSHashTableSize: Kayıt kontrol sıklığı için tutulacak hash tablosu boyutu.
  • DOSPageCount: DOSPageInterval  parametresinde belirtilen zaman aralığında kaç istek yapılacağını belirler.
  • DOSSiteCount: DOSSiteInterval  parametresinde belirtilen zaman aralığında sayfadan çekilecek resim/css dosya limitlerini belirler.
  • DOSPageInterval: DOSPageCount  için zaman değeri.
  • DOSSiteInterval: DOSSiteCount  için zaman değeri.
  • DOSBlockingPeriod: Engellenen IP nin ne kadar süre engelleneceğini belirler.
  • DOSEmailNotify: Mail olarakbilgilendirme için mail adresi girilmelidir.
  • DOSLogDir: Logların tutulacağı dizini belirtir.

 

  • Gerekli konfigürasyonu kendi sistemimize göre ayarladıktan sonra ctrl+x  komutu ile dosyadan çıkıp dosyayı kaydediyoruz.
  • Ayarların geçerli olması için alttaki komutlardan biriyle apache yi yeniden başlatıyouz.
sudo service apache2 restart
sudo /etc/init.d/apache2 restart

Ekran görüntüsü_2016-08-15_15-04-54

Test

  • Kurulumumuzu test etmek için mod-evasive içerisinde gelen perl scripti çalıştırarak kurulumumuzu kontrol edebiliriz.
sudo perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl

Ekran görüntüsü_2016-08-15_15-04-54

SS de görüldüğü üzere 403 dönüyor yani kurulumumuz başarıyla tamamlayıp test etmiş olduk.


TR | Mod Evasive ile DOS/DDOS Koruması Mustafa Kaan Demirhan

]]>
https://canyoupwn.me/tr-mod-evasive-ile-dosddos-korumasi/feed/ 0
TR | Linux Varnish https://canyoupwn.me/tr-linux-varnish/ https://canyoupwn.me/tr-linux-varnish/#respond Mon, 29 Aug 2016 09:16:25 +0000 https://canyoupwn.me/?p=3673 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

  Varnish Cache Nedir? Varnish bir http hızlandırıcı yazılımıdır.Peki bu http hızlandırıcı yazılımı nedir? Web application accelerator(Web uygulama hızlandırıcı) ziyaret ettiğimiz internet sayfalarına erişimi hızlandırmak amacıyla tasarlanmış sistemlerdir. Web sunucu,dinamik ve statik web sayfaları Bir internet sitesini ziyaret etmek istediğimizde o sitenin web sunucuna istekler göndermiş oluruz.Bu web sunucularında ise sitede yayınlanmak istenen sayfalar,resimler veya dökümanlar gibi metaların […]

TR | Linux Varnish Murat TORAMAN

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!


varnish-1

 

Varnish Cache Nedir?

Varnish bir http hızlandırıcı yazılımıdır.Peki bu http hızlandırıcı yazılımı nedir? Web application accelerator(Web uygulama hızlandırıcı) ziyaret ettiğimiz internet sayfalarına erişimi hızlandırmak amacıyla tasarlanmış sistemlerdir.

Web sunucu,dinamik ve statik web sayfaları

Bir internet sitesini ziyaret etmek istediğimizde o sitenin web sunucuna istekler göndermiş oluruz.Bu web sunucularında ise sitede yayınlanmak istenen sayfalar,resimler veya dökümanlar gibi metaların tutulması sağlanır.Bir nevi sitelerin depoları olarak bilinebilir.Bu ziyaret etmek istediğimiz siteler dinamik ve statik olarak ayrılabilir.Statik web sitelerinin güncellenme sıklığı azdır.Yani uzun bir süre değişiklik olamadan yayın yapabilirler.Değişken bir yapı göstermezler.Dinamik web siteleri ise her bir ziyaretçiye özel olarak tasarlanabilir ve değişken bir yapı göstermektedir.Kullanıcı-üye içeren bir web sitesi ise her üyenin sayfası farklı içeriklere sahip olabilir.Örneğin Google anasayfasına erişmek isteyen her kullanıcı aynı içerik ile karşılaşabilir.Fakat birde facebook profil sayfasını ele alırsak her kullanıcının sayfası farklı olabilir.

Nasıl Çalışır?

         Varnish yazılımı ziyaret ettiğimiz statik web sitelerine istek gönderdiğimizde içerikleri web sunucusu üzerinden geri döndürmek yerine içerikleri kendi önbelleğinde var ise ordan döndürmektedir.Buda bize hız ve zaman kazancı olarak geri dönmektedir.Ayrıca web sunucusunu yormadığı için sunucunun daha sağlıklı çalışmasına neden olabilir.Statik web sitelerindeki html,css,jpg,png,pdf gibi içerikler önbelleğe alınabildiği gibi varnish dinamik web sitelerindeki bazı içerikleri de önbelleğine alabilmektedir. Varnish’in en büyük avantajlarından biri ise bu içeriklerin ne zaman dinamik olarak oluşturulup ne zaman statik olarak oluşturacağını bilmesidir.Bu olayı bildiğimiz bir olayla bağdaştırmak istersek şu örneği verebiliriz.Her gün ekmek aldığımız bakkala gitmek yerine ekmek isteğimizi kapıcıya iletiriz ve kapıcı da bize isteğimizi getirir.Böylece bakkala gitmek için harcadığımız zaman ve enerjiden kazanç elde ederiz. Varnishte de kazancımız büyük oranda hız kazancı olmaktadır.

  • Linux için kurulum aşamalarını ekran görüntüleriyle inceleyelim.

İlk olarak aşağıda vereceğimiz adresi ziyaret ederek işletim sistemimize uygun kurulum yönergelerini ve dosyalarını elde edebiliriz.

https://varnish-cache.org/releases/index.html

Ayrıca vereceğimiz varnish linkinden dokümantasyonlara,yeniliklere,versiyonlara göz atabilirsiniz.

https://varnish-cache.org
  • Bu adresteki kurulum yönergeleri ise şu kısımdadır.

varnish-2

  • Bizim inceleme yapacağımız sistemimiz Kali Linux – Debian sistem olduğu için  Installation on Debian  kısmına göz atalım.

varnish-3

  • apt-transport-https  paketini yükleyerek kuruluma başlayalım.

varnish-4

varnish - 5

  • Daha sonra kendi depo adresini ekleyelim.
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add - echo "deb https://repo.varnish-cache.org/debian/ jessie varnish-4.1"\

varnish-6

  • Daha sonra girdi kısmına
/etc/apt/sources.list.d/varnish-cache.list

yazalım

varnish-7

  • Şu şekilde bir ekran görmekteyiz devam edelim.

varnish-8

  • Herhangi bir hata durumunda /etc/apt/sources.list dosyasına kendimiz depo adresini ekleyebiliriz.Bunun için aşağıdaki adımları takip edelim.
nano /etc/apt/sources.list
  • Komutu ile kaynak depo dosyamıza yazmak için nano  metin editörü ile açalım.
deb https://repo.varnish-cache.org/debian/ jessie varnish-4.1
  • Yeni bir satıra bu kodu ekleyerek kaydedip kapatalım.
apt-get update

ile depomuzu güncelleyelim.

apt-get install varnish
  • Komutu ile varnish’i kuralım.

varnish-9

varnish-10

  • Ve aşağıdaki ekran ile kurulumu tamamlamış bulunmaktayız.

varnish-11

  • Kurulum işlemimizi tamamladık şimdi Varnish konfigürasyon ayarlarımızı yapalım.
nano /etc/default/varnish

komutu ile varnish dosyamızı düzenleyelim.

varnish-12

  • Daha sonra Alternative 2 kısmında DAEMON_OPTS = “-a:80 \  kısmını yazdığımız şekilde değiştirelim.

varnish-13

  • “-a: 80 \” kısmını değiştirdikten sonra kaydedip çıkalım.
  • Daha sonra default.vcl dosyamızı düzenleyelim.

varnish-14

backend default{ .host = “127.0.0.1”; .port = “8080”; }
  • “backend default” kısmını belirtildiği gibi düzenleyelim.Kaydedip çıkalım.

varnish-15

  • Varnish dosyalarımızın konfigürasyon ayarlarını da tamamladık.
  • Şimdide apache2 ayarlarımıza göz atalım.
nano /etc/apache2/ports.conf

komutu ile apache2 port ayarlarını düzenleyelim.

varnish-16

  • Ports.conf dosyasının içerisine şu satırları ekleyelim:
 NameVirtualHost 127.0.0.1:8080
 Listen 127.0.0.1:8080

varnish-17

  • Daha sonra
nano /etc/apache2/sites-available/default

komutu ile default dosyamızı düzenleyelim.

varnish-18

  • default içerisine <VirtualHost 127.0.0.1:8080>  ekliyoruz ve kaydedip kapatıyoruz.

varnish-19

  • Apache2 konfigrasyon ayarlarımızıda tamamladık.Şimdi apache2 ve varnish servislerimizi yenileyelim.
service apache2 restart
service varnish restart

varnish-20

  • Ayarlarımızı tamamladık şimdi ayarlarımızı kontrol etmek için test edelim.
  • Apache2 servisini :8080 portuna ayarlamıştık.Varnish yazılımını kullanarak ise :80 portundan ulaşacağız görelim.
  • İlk olarak varnish’i kullanmadan erişmeyi deneyelim.Bunun için 8080 portunu kullanıyoruz.
ab –n 6000 –c 1 http://127.0.0.1:8080/

komutu ile çıktılarımızı inceleyelim.

varnish-21

  • Şimdide Varnish üzerinden erişelim ve sonuçları görelim.

varnish-22

  • Varnish üzerinden erişimimizin sonuçlarınıda böylece görmüş olduk.

Yazımızda Varnish kurulum,konfigürasyon ayarları ve apache-Varnish test eylemleri ile Varnish yazılımını inceledik.


TR | Linux Varnish Murat TORAMAN

]]>
https://canyoupwn.me/tr-linux-varnish/feed/ 0
TR | Linux Gereksiz Servislerin Kapatılması https://canyoupwn.me/tr-linux-gereksiz-servislerin-kapatilmasi/ https://canyoupwn.me/tr-linux-gereksiz-servislerin-kapatilmasi/#respond Sat, 27 Aug 2016 16:11:38 +0000 https://canyoupwn.me/?p=3635 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Sisteminize yüklü olarak gelen fakat kullanmadığınız servisleri kapatmak hem güvenlik hem de performans açısından yararlı olacaktır. Kullanmadığınız servisler sistem kaynaklarını neden boşa harcasın ki ? Ya da kullanmadığınız servis üzerinde çıkan güvenlik zafiyeti yüzünden neden zarar görelim?   Servisimizi durdurur systemctl stop servisadı Servisimizi başlatır systemctl start servisadı Servisimizi yeniden başlatır systemctl restart servisadı Servisimizi […]

TR | Linux Gereksiz Servislerin Kapatılması Gökay Atar

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Sisteminize yüklü olarak gelen fakat kullanmadığınız servisleri kapatmak hem güvenlik hem de performans açısından yararlı olacaktır. Kullanmadığınız servisler sistem kaynaklarını neden boşa harcasın ki ? Ya da kullanmadığınız servis üzerinde çıkan güvenlik zafiyeti yüzünden neden zarar görelim?

 

  • Servisimizi durdurur
systemctl stop servisadı
  • Servisimizi başlatır
systemctl start servisadı
  • Servisimizi yeniden başlatır
systemctl restart servisadı
  • Servisimizi kesintiye uğratmadan yapılandırma dosyasını yeniden yükler
systemctl reload servisadı
  • Servislerimizin durumunu gösterir
systemctl status servisadı
  • Aktif sistem servisleri listeler
systemctl list-units --type service
  • Tüm sistem servislerini listeler
systemctl list-units --type service --all
  • Servisimizin sistem başlangıcında başlatır
systemctl enable servisadı
  • Servisimizin sistem başlangıcında açılmasını kapatır
systemctl disable servisadı
  • Servislerin etkin olup olmadığını gösterir
systemctl list-unit-files --type service
  • Servis konfigrasyonlarını gösterir
systemctl show servisadı
  • Servis bağımlıklarını gösterir
systemctl list-dependencies servisadı
  • Sistemde dinlenen soketleri gösterir
systemctl list-sockets
  • Sistemde sorun çıkaran servisleri gösterir
systemctl --fail
  • Uzaktaki sunucun servis yapılandrıması için
systemctl -H kullanıcı@host komut servisadı
  • Aktif işleri gösteir
systemctl list-jobs
  • Servis loglrarını gösterir
journalctl -u servisadı
  • Şimdi basitçe etkin ve etkin olmayan servislerimize bakalım bunun için şu komutu kullanıyorduk
systemctl list-units --type service

1

  • Yukarıda ki listede sistem tarafından otomatik çalıştırılan ama benim kullanmadığım servisler var. Mesela bluetooth servisini ele alalım.  Bluetoothu kullanmıyoruz kapatmak için
systemctl stop bluetooth.service

komutunu verebiliriz.  Fakat sistem yeniden başladığında bluetooth servisimiz otomatik olarak yeniden açılacak eğer sistem başlangıcında da açılmasını istemiyorsak

 systemctl disable bluetooth.service

komutunu verebilirz.

  • Şimdi servisimizin durumunu kontrol edelim
 systemctl status bluetooth.service

3

Böylece kullanmadığımız servisi kapatmış olduk.

İhtiyaç duymadığınız ya da gereksiz yere amacınız dışında işlem yapan servislerinizi tespit ederek kapatmanız bir nebze size yarar sağlayacaktır.


TR | Linux Gereksiz Servislerin Kapatılması Gökay Atar

]]>
https://canyoupwn.me/tr-linux-gereksiz-servislerin-kapatilmasi/feed/ 0
TR | Linux PHP Sıkılaştırma https://canyoupwn.me/tr-linux-php-sikilastirma/ https://canyoupwn.me/tr-linux-php-sikilastirma/#respond Fri, 12 Aug 2016 07:20:21 +0000 https://canyoupwn.me/?p=3620 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PHP Sıkılaştırma Linux sistemlerimiz üzerinde yüklediğimiz PHP için başlangıçta gelen ayarlara ek olarak bazı değişiklikler yapmamız gerekmektedir.Default olarak gelen ayarlar kısmında güvenlik konusunda eksiklikler bulunmaktadır ve bunların bilinçli bir şekilde giderilmesi gerekmektedir.Bütün bu işlemlere başlamadan önce ilk hedefimiz düşmanımızı tanımak olmalıdır.Bu anlamda karşıdan bize gelebilecek olan saldırı türleri ve detayları hakkında ne kadar çok bilgi […]

TR | Linux PHP Sıkılaştırma Ali TONKAZ

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PHP Sıkılaştırma

Linux sistemlerimiz üzerinde yüklediğimiz PHP için başlangıçta gelen ayarlara ek olarak bazı değişiklikler yapmamız gerekmektedir.Default olarak gelen ayarlar kısmında güvenlik konusunda eksiklikler bulunmaktadır ve bunların bilinçli bir şekilde giderilmesi gerekmektedir.Bütün bu işlemlere başlamadan önce ilk hedefimiz düşmanımızı tanımak olmalıdır.Bu anlamda karşıdan bize gelebilecek olan saldırı türleri ve detayları hakkında ne kadar çok bilgi sahibi olursak kendimizi koruma konusunda o kadar başarılı oluruz.Sadece başlıklar halinde bahsetmek gerekirse zaafiyetler aşağıdaki gibi listelenebilir

  • Full Path Disclosure
  • Arbitrary File Upload
  • Arbitrary File Delete
  • Arbitrary File Download
  • Local File Inclusion
  • Remote File Inclusion
  • Cookie Injection
  • Header Injection
  • Sql Injection
  • Xml Injection
  • XXE Injection
  • Email Injection
  • Html Injection
  • Xpath Injection
  • Code Injection
  • Command Injection
  • Object Injection
  • Cross Site Scripting
  • Cross Site Request Forgery
  • Broken Authentication and Session Management

Evet ilk adımı gerçekleştirdik.Şimdi ise PHP yüklendiği zaman hazır gelen modülleri inceleyelim.Burdaki amacımız PHP modülleri arasında bizim ihtiyacımız olmayanları bulmak ve onları ihtiyacımız olana dek kaldırmaktır.

php -m

php1

Burada listelenenler arasından kaldırmak istediğimiz modülü 3 farklı şekilde kaldırabiliriz.

– rm komutu ile silebilirsiniz
– mv komutu ile adını değiştirebiliriz
– config ayarlarını değiştirerek disable edebiliriz.

Fakat burada belirtilen bütün modülleri kaldırmamıza PHP izin vermemektedir.Bunun için yapmamız gereken ilk kurulumda yüklenilmesi istediğimiz modülleri belirterek bu işlemi gerçekleştirmektir.

Bu adımı da hallettikten sonra şimdi sahip olduğumuz PHP’nin dışarıya bilgi sızdırmasını engellemeye çalışacağız.Bunun için php.ini dosyası içinde yer alan expose_php özelliğini

expose_php=off

şeklinde değiştiriyoruz.Burdaki amacımız PHP’nin dışarıya hangi server üzerinde çalıştığımız,hangi PHP versiyonunu kullandığımızı gibi bilgileri vermesini engellemektir.

PHP üzerinde bir hata oluştuğu zaman bu hatayı hata mesajı şeklinde dışarıya vermemek için yine php.ini içinde display_errors özelliğini disabled etmemiz gerekmektedir.

display_errors=Off

Disable ettiğimiz bu hata mesajlarını daha sonra log_erros özelliğini aktif ederek log kayıtları şeklinde tutmamız gerekmektedir.

log_errors=On
error_log?/var/log/httpd/php_scripts_error.log

Daha sonra yine php.ini dosyası içindeki file_uploads özelliğini kapatmamız gerekmektedir.

file_uploads=off

Burdaki amacımız dışarıdan bizim istediğimiz dışında dosya girişine izin vermemek ve bunu en basit yoldan engellemektir. Projemizde dışarıdan dosya alımı gibi bir işlev kullanmamız gerektiğini farzedelim.Bu gibi durumlarda yapmamız gereken file_upload özelliğini aktif etmek ve buna ek olarak dışarıdan gelen dosyaların maksimum boyutlarını belirtmemiz gerekmektedir.

file_uploads=On
upload_max_filesize=1M

Yukarda bahsi geçen saldırı çeşitlerinden RFI saldırısına karşı önlem almak amacıyla php.ini dosyası içerisinde yer alan allow_url_fopen ve allow_url_include özelliklerinin kapatılması gerekilmektedir

allow_url_fopen=Off
allow_url_include=Off

Yine aynı şekilde php.ini dosyası içerisinde yer alan sql.safe_mode özelliğini de aktif etmememiz gerekmektedir.

sql.safe_mode=On

Bunu özellliği aktif hale getirdiğimiz zaman mysql_connect,mysql_pconnect gibi fonskiyonlar dışarıdan gelen argümanları göz ardı ederek sadece başlangıçta bizim tanımladığımız parametrelere göre hareket etmektedir.
Sonraki adımda yapmamız gereken POST işlem boyutlarını kontrol sınırlamaktır.Bunun için yapmamız gereken php.ini dosyası içerisinde post_max_size ifadesine değer atamaktır.

post_max_size=1K

Bunu yapmaktaki amacımıza gelecek olursak eğer karşımızda kötü niyetli bir kullanıcı varsa,bizim sistemimize boyutu çok büyük bir POST isteği atmayı deneyebilir ve böylece bizim kaynaklarımızı sömürmüş olur.Bİzde bu ve bunun gibi durumlardan kaçınmak için bunun üst sınırını belirleyerek önlem alırız.

Şimdi ise sahip olduğumuz kaynakların kontrolünü sağlamak için yine php.ini dosyası içindeki bazı değerleri belirleyeceğiz.

max_execution_time = 30
max_input_time = 30
memory_limit = 40M

Yukarıdaki işlemlerde bir PHP scriptinin maksimum çalışma zamanını,yine bu script için maksimum input süresini belirlemiş olduk.Son olarak ise bir PHP scriptinin tüketebileceği maksimum hafıza miktarı için limit belirleyerek kontrolsüz bir şekilde bir PHP sayfasının kaynaklarımızı harcamasına engel oluyoruz.
Bir sonraki güvenlik önlemi olarak PHP içinde yer alan ve tehlikeli olarak adlandırılan fonskiyonları kaldırmaktır.Bunun için php.ini dosyasında aşağıdaki ayarları yapmamız gerekmektedir.

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

Buradaki amacımızdan bahsetmeden önce burda kullanılan fonksiyonlardan bazılarından bahsedelim.

shell_exec fonksiyonu kabuk üzerinde komut çalıştırılmasını sağlar ve çalışan komutun çıktısını geri döndürür.

curl_exec fonksiyonu bir curl oturumunu işleme sokar

parse_ini_file fonksiyonu ise bir yapılandırma dosyasını çözümler.

Evet bazı fonksiyonlardan bahsettik ve gördüğünüz üzere bu fonksiyonlar dışarıdan sistem üzerinde komut çalıştırılması,dışarıya bilgi çıkarılması gibi tehlikeli durumlara sebep olabilmektedir.Bu yüzden bu fonskiyonların disabled edilmesi gerekmektedir.

Şimdi ise PHP’nin hangi klasör yapısı altında çalışmasına izin verileceğini belirlememiz gerekmektedir.Tek klasör altında çalışmasına izin verilebileceği gibi birden fazla klasör altında çalışmasına izin de verilebilir.Bunun için php.ini dosyası içerisinde

 

open_basedir="/var/www/html"

şeklinde düzenleme yapabiliriz.Böylelikle bu klasöre yetkisi olmayan kişilerin sistem üzerinde PHP kodlarını çalıştırmasını engellemiş oluruz.
PHP üzerinde gerçekleşen session işlemlerinin kayıtlarının tutulduğu bir dizin vardır.Bu dizin bütün kullanıcılara açık bir dizin ise session ile ilgili bilgileri başkalarının da okumasına olanak sağlar.Bu durumdan korunmak için php.ini dosyası içinde aşağıdaki değişikliği yaparız.

session.save_path="/var/lib/php/session"
upload_tmp_dir="/var/lib/php/session"

Daha sonra belirlediğimiz yolu sadece root yetkisi ile müdahale edilecek şekilde değiştirelim

chmod 0700 /var/lib/php/session

En son olarak kontrol ettiğimizde çıktı bu şekilde olmaktadır.

php2
Bunun dışında daha genel bir güvenlik önlemi olarak sistemimi her zaman güncel tutmamız gerekmektedir.Bunun için Linux,Apache,PHP ve MySQL için gelen güvenlik güncellemelerini almamız önerilmektedir.Eğer PHP’yi paket yöneticisi ile kurduysak

yum update

komutu ile ya da

apt-get update && apt-get upgrade

komutu ile güncellemeleri alabiliriz.

Sonraki adım olarak dosya ve dizin erişimi üzerinde değişiklikler yapmalıyız.Öncelikli olarak Apache’yi root olmayan bir kullanıcı ile çalıştırmamız gerekmektedir.Bütün dosyalar ve dizin yapısı root olmayan bir kullanıcı tarafından sahiplenilmedilir.Bunun için aşağıdaki kod ile dizinin sahibini direk olarak değiştirebiliriz.

chown -R apache:apache /var/www/html/

Bu dosyalara verilen izinlerin sadece okuma izni olduğundan emin olmak için aşağıdaki komutu çalıştırıyoruz.

chmod -R 0444 /var/www/html/

Bu işlemi de gerçekleştirdikten sonra aşağıdaki şekilde kontrol edebiliriz.

php3
Bitmek bilmeyen güvenlik önlemlerinin bir diğer adımı olarak Apache,PHP,MySQL konfigurasyon dosyalarının izinlerini yazmaya karşı korumalı olarak değiştiriyoruz.

chattr +i /etc/php.ini
chattr +i /etc/php.d/*
chattr +i /etc/my.ini
chattr +i /etc/httpd/conf/httpd.conf
chattr +i /etc/

Bu komutu /var/www/html dizini altındaki dosyaları için de uygulayabiliriz.

chattr +i /var/www/html/

Daha sonra sisteme düşen logları düzenli bir şekilde takip etmemiz gerekmektedir.Apache log dosyaları için

tail -f /var/log/httpd/error_log
grep 'login.php' /var/log/httpd/error_log
egrep -i "denied|error|warn" /var/log/httpd/error_log

komutlar ile,PHP logları için

tail -f /var/log/httpd/php_scripts_error.log
grep "...etc/passwd" /var/log/httpd/php_scripts_error.log

komutları ile istenen takibi yapabiliriz.
Son olarak ise dışarıdan ekstra programlar yükleyerek güvenliği artırabiliriz.Örneğin Mod_securtiy programını yükleyerek ve üzerinde bazı kurallar belirleyerek saldırılardan korunabiliriz.SELinux prgoramı ile Apache’nin SELinux ile korunmasını sağlayabiliriz.(Not:Yazıda bahsedilen php.ini,error_log gibi dosyaları tam yolları sistemler ve sürümler arasında farklılık gösterebilir.Bahsedilen kodların tam olarak çalışması için doğru yolların verildiğinden emin olunuz)


TR | Linux PHP Sıkılaştırma Ali TONKAZ

]]>
https://canyoupwn.me/tr-linux-php-sikilastirma/feed/ 0
TR | Linux TCP Wrappers Kullanımı https://canyoupwn.me/tr-linux-tcp-wrappers-kullanimi/ https://canyoupwn.me/tr-linux-tcp-wrappers-kullanimi/#respond Thu, 11 Aug 2016 09:24:30 +0000 https://canyoupwn.me/?p=3644 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

TCP Wrappers, makinemiz ile aynı ağda bulunan istemcilerin hangi servislere erişebileceğini kontrol eden ve bu erişim ile ilgili kayıtları tutan bir pakettir. Bunu paket içerisinde bulunan libwrap kütüphanesi ile gerçekleştirir. Unix işletim sistemleri genellikle TCP Wrappers ile compile edilmiş olarak gelir. Sistemde firewall’den sonra ekstra bir güvenlik katmanı oluşturarak uygulanan kurallar sayesinde firewall aşıldığında dahi […]

TR | Linux TCP Wrappers Kullanımı CanYouPwnMe

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

TCP Wrappers, makinemiz ile aynı ağda bulunan istemcilerin hangi servislere erişebileceğini kontrol eden ve bu erişim ile ilgili kayıtları tutan bir pakettir. Bunu paket içerisinde bulunan libwrap kütüphanesi ile gerçekleştirir. Unix işletim sistemleri genellikle TCP Wrappers ile compile edilmiş olarak gelir. Sistemde firewall’den sonra ekstra bir güvenlik katmanı oluşturarak uygulanan kurallar sayesinde firewall aşıldığında dahi servislere erişimin network seviyesinde korunmasını sağlar. Ayrıca birden fazla server uygulamasının erişim kuralları için tek bir dosyanın kullanılması yönetimi merkezileştirir ve kolaylaştırır.

Linux’ta TCP Wrappers’ın bir servisi destekleyip desteklemediğini öğrenmek için ldd komutunu aşağıdaki gibi kullanabiliriz. Whereis komutu ile de servisin bulunduğu dizin öğrenilebilir.

tcpwrappers_ldd

Bu komut ile sshd (SSH daemon)’ın TCP Wrapper ile desteklendiğini görmüş olduk. Bununla birlikte yaygın olarak bilinen pop3, ftp, telnet gibi servisler de TCP Wrapper tarafından desteklenmektedir.

TCP Wrappers Nasıl Konfigüre Edilir?

TCP Wrappers için etc dizininin altında hosts.allow ve hosts.deny olmak üzere iki adet konfigürasyon dosyası bulunur. İstenen servislere erişime izin vermek için istemci hosts.allow dosyasına, erişimi engellemek için ise hosts.deny dosyasına yazılır.

Konfigürasyon dosyalarının çalışma mantığında ilk olarak hosts.allow dosyası kontrol edilir. Eğer bir kayıt varsa erişime izin verilir ve başka bir işlem yapılmaz. Hosts.allow dosyasında herhangi bir kayıt bulunmazsa deny dosyası kontrol edilir. Burada bir kayıt bulunursa erişim bu istemci için engellenir. Her iki dosyada da bir kural bulunmazsa default kurallar dahilinde istemciye erişim hakkı verilir. Dosya izinlerini yazarken bu sıra dikkate alınmalıdır; çünkü hosts.allow dosyasında izin verilmeyen bir istemci için hosts.deny dosyasında yazılan kuralların bir önemi yoktur.

Her iki dosya için de yazılan kural formatı aşağıdaki gibidir.

daemon : client [:option1:option2:...]

daemon (servis)  : Kural yazılmak istenen servisin adı yazılır. Birden fazla servis için kural yazılacaksa virgül ile ayrılır.

client (istemci)  : Kuralın uygulanacağı istemcinin adı veya IP adresi yazılır. Yine birden fazla istemci için kural yazılacaksa virgül ile ayrılır.

options (seçenekler)  : Kural uygulandığında isteğe bağlı eylemlerin gerçekleşmesi için kullanılır. Örneğin, bu kural işlendiğinde “mail gönder” veya “loglama yap” seçenekleri verilebilir.

192.168.10.0/24 ağında bulunan 192.168.10.21 adresi haricindeki tüm hostlardan gelen sshd isteklerine izin vermek için  /etc/hosts.allow ve /etc/hosts.deny dosyalarını aşağıdaki gibi düzenleyelim.

Minik Not : TCP Wrappers, IPv4 adresleri için CIDR gösterimini (192.168.10.0/24) desteklemez.

tcpwrappers_allow

sshd : 192.168.10.0/255.255.255.0 EXCEPT 192.168.10.21

tcpwrappers_allow1

tcpwrappers_deny

sshd : ALL

tcpwrappers_deny2

Dosyaları düzenleyip kaydettikten sonra ssh ile bağlanmayı denediğimizde yazdığımız kural 192.168.10.21 adresine bağlanmayı  engelleyecektir.

tcpwrappers

TCP Wrappers ile spawn ve twist seçeneklerini kullanarak shell komutu çalıştırabiliriz.

Spawn  : Bir shell komutunu child process olarak başlatır.

Örneğin, /etc/hosts.allow dosyasını aşağıdaki gibi düzenleyerek izin verilen kural dahilinde istemci ve process bilgilerini /var/log/audit_sshd dosyasına loglayabiliriz.

sshd : 192.168.10.0/255.255.255.0 EXCEPT 192.168.10.21
: spawn /bin/echo '/bin/date' SSHD connection from client %c to server %s pid %p >>/var/log/audit_sshd.log

%c  : Username ve hostname gibi istemci bilgilerini yazdırır.

%s  : IP adresi, host ve servis bilgileri gibi çeşitli server bilgilerini yazdırır.

%p  : Daemon process ID bilgisini yazdırır.

Twist  : İsteği özel bir komutla değiştirmek için kullanılır. Genellikle izin verilmek istenmeyen istemciler için bir tuzak gibi kullanılır ve bu şekilde istemciye mesaj da yollanabilir.

/etc/hosts.deny dosyası aşağıdaki gibi düzenlenirse 192.168.10.0/24 ağındaki bir istemci telnet servisine bağlanmak istediğinde TCP Wrappers erişimi engeller ve istemciye mesaj gönderir.

telnetd : 192.168.10.0/255.255.255.0
: twist /bin/echo "What are you doing %a!"

%a  : İstemcinin IP adresini yazdırır.


TR | Linux TCP Wrappers Kullanımı CanYouPwnMe

]]>
https://canyoupwn.me/tr-linux-tcp-wrappers-kullanimi/feed/ 0
TR | Linux Dosya ve Dizin Güvenliği https://canyoupwn.me/linux-dosya-ve-dizin-guvenligi/ https://canyoupwn.me/linux-dosya-ve-dizin-guvenligi/#respond Wed, 10 Aug 2016 11:40:11 +0000 https://canyoupwn.me/?p=3657 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Linux Dosya ve Dizin Güvenliği Linux Sistem Sıkılaştırması ve Linux Sistem Güvenliği’nde öncelik vermemiz konularda birisi de Linux Dosya ve Dizin Güvenliği’dir. Windows işletim sistemi, hepimizin bildiği üzere Linux’a göre daha çok son kullanıcıya yöneliktir. Sıradan bir kullanıcı bile bir çok dosyaya erişim sağlayabilmekte, bilgileri okuyabilmektedir. Dosya izin ve güvenliği Windows işletim sisteminde oldukça geri […]

TR | Linux Dosya ve Dizin Güvenliği Bahadır KINALI

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Linux Dosya ve Dizin Güvenliği

Linux Sistem Sıkılaştırması ve Linux Sistem Güvenliği’nde öncelik vermemiz konularda birisi de Linux Dosya ve Dizin Güvenliği’dir.

Windows işletim sistemi, hepimizin bildiği üzere Linux’a göre daha çok son kullanıcıya yöneliktir. Sıradan bir kullanıcı bile bir çok dosyaya erişim sağlayabilmekte, bilgileri okuyabilmektedir. Dosya izin ve güvenliği Windows işletim sisteminde oldukça geri plandadır. Windows işletim sistemi üzerindeki bu rahatlık güvenlik konusunda Linux’un yaygınlaşmasına katkıda bulunmuştur denebilir. Linux çok daha kararlı ve güvenilir bir işletim sistemidir.

Dosya ve Dizinlerdeki Erişim Hakları

Erişim haklarına linux dosya güvenliğinin en kritik noktası diyebiliriz. Her dosyaya ayrı ayrı verilen bu erişim hakları sayesinde çok daha rahat ve güvenli bir şekilde linux sistem yönetimi sağlanmaktadır. Her dosyanın başlangıçta Linux tarafından belirlenen ön tanımlı izin hakları vardır. Hem bu ön tanımlı izinleri hemde daha sonraki süreçte tüm bu erişim/yetki hakları değiştirilebilir.

Her dosyanın bir sahibi, bir grubu ve çeşitli izin hakları bulunmaktadır. Dosyanın üzerinde hangi işlemlerin yapılabileceğine ancak o dosyaya sahip olan kullanıcı karar vermektedir. Tüm erişim hakları “dosya sahibi – dosyanın hangi gruba dahil olduğu – diğerleri” olarak belirlenir.

Tüm bu izinler ve erişim hakları dosyalarda olduğunu gibi, dizinlerde de geçerlidir.

Erişim hakları üç farklı şekilde karşımıza çıkmaktadır.

Okuma izni:

  • Eğer bir dosyanın okuma izni var ise dosyanın içeriği okunabilir.
  • Eğer bir dizinin okuma izni var ise dizin içeriği görüntülenebilir.
  • İki durum için izin yok ise de iki durum da olumsuz sonuçlanmış olur.

 

Yazma izni:

  • Eğer bir dosyanın yazma izni var ise dosyanın içeriğini değiştirebilir, silebilirsiniz.
  • Bir dizinin yazma izni var ise, dizin içerisinde dosya oluşturma, değiştirme veya silme işlemleri yapılabilir.
  • İzinler yoksa yine tüm durumlar olumsuz sonuçlanmış olur.

 

Çalıştırma(Derleme) izni:

  • Dosyalardaki çalıştırma izni, o dosyanın çalıştırılabilir olduğu anlamına gelmektedir.
  • Dizinlerdeki çalıştırma izni ise o dizin içerisindeki dosyaların görüntülenebilir ve dosya içerisine erişilebilir olduğu anlamına gelmektedir.
  • İzinler yoksa yine tüm durumlar olumsuz sonuçlanmış olur.

 

Dikkat edilmesi gereken en kritik konu sistem yöneticisinin konuya hakim olması ve tüm erişim haklarını oldukça özenle düzenlemelidir.

Temel olarak konu hakkında bilgi edindikten sonra yavaş yavaş uygulama yapmaya başlayalım.

ls -al  komutunu kullanırsak, bulunduğumuz dizindeki tüm (gizli dosyalar dahil) dosyaları liste halinde görüntülemiş oluruz.

linux-dosya-ve-dizi-güvenliği-1

Yukarıda bulunduğumuz dizindeki her bir dosya liste halinde görüntülenmektedir. Her bir dosya ile ilgili ayrıntılı bilgiler de bulunmaktadır.

Screen Shot 2016-08-10 at 13.14.24

Açıklamada da görüldüğü gibi kullanıcı yetkileri için 2. alan üzerine yoğunlaşmamız gerekmektedir. İkinci alanda bulunan harfler: rwxrw-r–

İkinci kısım yukarıda görüldüğü gibi 9 karakter uzunluğundadır. Bu 9 karakterin ilk üç tanesi dosya sahibinin yetkilerini gösterir, ikinci üç tanesi dosyanın dahil olduğunu grubun yetkilerini gösterir, en sonraki üç karakter ise diğer tüm kullanıcıların yetkilerini gösterir.

rwx: dosya sahibinin yetkileri. Anlamı; Dosya sahibi dosyayı okuyabilir, dosyada değişiklik yapabilir ve dosyayı çalıştırabilir.

rw-: dosyanın dahil olduğu grubun yetkileri. Anlamı, dosya okunabilir, dosyada değişiklik yapılabilir ama dosya çalıştırılamaz.

r–: diğer tüm kullanıcıların yetkileri. Anlamı, dosya okunabilir ama dosyada değişiklik yapılamaz ve çalıştırılamaz.

 

Dosya Yetkilerinin Değiştirilmesi

Dosya yetkilerini değiştirmek için chmod  komutunu kullanmamız gerekmektedir. Bu komutu kullanırken aynı zamanda bilmemiz gereken değişkenler:

+: Yetki eklemek için kullanılır.

-: Yetki çıkarmak için kullanılır.

=: Yetkiyi direk verilen değerler gibi yapar. (örnek kullanım ve açıklama aşağıda vardır)

u: Dosya sahibini belirtir.

g: Dosyanın dahil olduğu grubu belirtir.

o: Diğer kullanıcıları belirtir.

Birkaç örnek yapalım:

Screen Shot 2016-08-10 at 13.51.09

Resimde deneme.txt dosyasının yetkilerini görüyoruz. İlk önce tüm kullanıcılarda (dosya sahibi, dahil olduğu grup ve diğer kullanıcılar) “çalıştırılabilir”(r) yetkisinin bulunduğunu görüyoruz. Ardından chmod -r deneme.txt  komutu ile tüm kullanıcılardan “okuma” yetkisini “-” işareti ile çıkarmış olduk. Herhangi bir kullanıcıyı özel olarak belirtmediğimiz için yetki tüm kullanıcı ve gruplardan çıkarıldı.

Bir örnek daha yapalım ve bu sefer sadece dosya sahibineokuma” yetkisini “ekleyelim”.

Screen Shot 2016-08-10 at 14.00.06

 

 

 

Son örnek olarak dosyanın dahil olduğu grubun yetkilerini sadece çalıştırılabilir yapmak istersek, bazı yetkileri eklemek çıkarmak yerine direk “=  işaretini kullanarak doğrudan istediğimiz yetkileri atamış oluruz.

Screen Shot 2016-08-10 at 14.29.39

 

 

 

Örneklerde de görüldüğü herhangi dosya yada dizine; gerek istediğimiz kullanıcı yada gruplara gerek de tüm hepsine birden “+”,“-“ veya “=” kısayolları ile “okunabilir”, “yazılabilir” ve “çalıştırılabilir” yetkilerini gerekli kısayollar ile ekleyebilir çıkarabilir yada eşitleyebiliriz.

 

Kullanıcı yetkilerini sadece sembolik gösterim(rwx) ile yapmak zorunda değiliz. Dilersek ikili(binary) yada sekizlik(octal) gösterimleri de kullanabiliriz. Küçük bir tablo ile özetlemek gerekirse:

Screen Shot 2016-08-10 at 14.13.10

 

 

 

 

Pratik bir kullanım olduğu için sekizlik gösterim ile ilgili bir kaç örnek yapalım.

Screen Shot 2016-08-10 at 14.23.45

 

 

 

 

 

Örnek olarak kullanıcıya tüm yetkileri verelim, dahil olunan gruba sadece okuma ve yazma son olarak diğer kullanıcılara sadece okuma izni verelim. Bunu sembolik gösterim ile yapmak istersek: chmod u=rwx,g=rw,o=r deneme.txt  komutunu kullanmamız gerekmektedir ve görüldüğü gibi pek de pratik değil. Onun yerine örnektede de görüldüğü gibi daha pratik bir yöntem kullanabiliriz.

Screen Shot 2016-08-10 at 14.38.11

 

 

Tam olarak istediğimiz sonucu daha hızlı bir şekilde elde etmiş olduk.

UMASK(Ön tanımlı yetkiler)

Linux sistemlerde her dosya ve dizinin ön tanımlı izinlerinin olduğundan bahsetmiştik. Bir sistemde ön tanımlı olarak değerin ne olduğunu öğrenmek için umask komutunu kullanıyoruz. Genelde o değer 0022 olarak gelir.

Screen Shot 2016-08-10 at 16.22.40

 

 

Bu gelen sayıyı anlamı şudur: dizin taban izninden, umask değeri çıkarılır ve dosya iznini bulmuş oluruz.

666 – 022= 644 bizim bundan sonra oluşturulacak dosyalarımızın yetkisini belirlemiş olur. Bunu örnekle göstermek gerekirse:

Screen Shot 2016-08-10 at 16.38.22

 

 

Eğer default umask değerini değiştirmek istersek debian tabanlı sistemlerde .bashrc, diğer linux dağıtımlarında /etc/profile dosyasını düzenleyebilirsiniz.

Screen Shot 2016-08-10 at 16.30.05  

bu değişiklikten sonra, tekrardan umask değerine bakmak gerekirse:

Screen Shot 2016-08-10 at 16.31.39

Gerekli değişikliğin gerçekleştiğini görürüz ve bundan sonra oluşturacağımız dosyalar bu değişiklikten etkilenecektir. Örn:

Screen Shot 2016-08-10 at 16.37.41

Dosyanın Sahibinin ve Grubunun değiştirilmesi

Daha önce de görmüş olduğumuz gibi Linux işletim sistemlerinde her dosya ve dizinin bir sahibi ve grubu vardır. Şimdiye kadar yaptığımız yetki işlemlerini dosya sahibi, grubu ve diğer kullanıcılar için yapmıştır. Bu başlık altında da dosyanın sahibinin ve grubunun değiştirilmesinden bahsedeceğiz.

Linux işletim sistemlerinde bir dosyanın sahibi değiştirmek için chown komutunu kullanırız. Komutu kullanırken yeni kullanıcıyı ve dosyayı da belirtmemiz gerekmektedir. Örnek olarak deneme.txt dosyasının sahipliğini “root” kullanıcısından “cypm” kullanıcısına taşıyalım.

Screen Shot 2016-08-10 at 15.41.19

 

 

 

Resimde görüldüğü gibi dosyanın sahiplik bilgilerini değiştirmiş olduk. Yine çok benzer bi komut olan chgrp komutu da dosyanın grup bilgilerini değiştirmemize yaramaktadır.

Screen Shot 2016-08-10 at 15.48.00

 

 

Örnekte deneme.txt dosyasının grup bilgisini “cypm” olarak değiştirdik.

Tüm bu güzelliklerin yanında bazı kişilere göre linux işletim sistemlerinde şöyle bir tehlike bulunmaktadır. Yetkili kullanıcıların (genelde root olan kullanıcılar), yetkilerini kötüye kullanarak normal kullanıcıların kişisel dosyalarına erişim sağlayabilmesidir. Herşeye yetkisi olan bir kullanıcı yada hiyerarşik kullanıcı sistemi: sistem kararlılığı için çok gerekli bir durum iken, bu gibi durumlarda da zayıf nokta haline gelebilmektedir.


TR | Linux Dosya ve Dizin Güvenliği Bahadır KINALI

]]>
https://canyoupwn.me/linux-dosya-ve-dizin-guvenligi/feed/ 0