Lablara erişmek için: https://tryhackme.com/r/room/linuxfundamentalspart1 , https://tryhackme.com/r/room/linuxfundamentalspart2 , https://tryhackme.com/r/room/linuxfundamentalspart3

“Linux Temelleri” oda serisinin ilk bölümüne hoş geldiniz. Büyük olasılıkla bir Windows veya Mac makine kullanıyorsunuz, her ikisi de görsel tasarım ve çalışma şekilleri açısından farklıdır. Tıpkı Windows, iOS ve MacOS gibi Linux da başka bir işletim sistemidir ve akıllı arabalara, android cihazlara, süper bilgisayarlara, ev aletlerine, kurumsal sunuculara ve daha fazlasına güç veren dünyanın en popüler işletim sistemlerinden biridir. Linux’un arkasındaki bazı tarihi konuları ele alacağız ve sonunda bir Linux sihirbazı olma yolculuğunuza başlayacağız! Bu odada şunları yapacaksınız: Tarayıcınızda etkileşimli bir Linux makinesinde ilk komutlarınızı çalıştırmak Dosya sistemiyle etkileşim için kullanılan bazı temel komutları öğretmek Dosyaları nasıl arayabileceğinizi göstermek ve shell operatörlerini tanıtmak.

Linux Nerelerde Kullanılır?

Linux’un, Windows gibi işletim sistemlerine (OS) kıyasla yaklaşılması çok daha göz korkutucu olduğu söylenebilir. Her iki çeşidin de kendi avantajları ve dezavantajları vardır. Örneğin, Linux oldukça daha hafif bir işletim sistemidir ve her gün bir şekilde Linux kullandığınızdan emin olabilirsiniz! Linux, aşağıdakiler gibi şeyleri güçlendirir:

Linux Çeşitleri

“Linux” adı aslında UNIX (başka bir işletim sistemi) tabanlı birden fazla işletim sistemi için bir şemsiye terimdir. Linux’un açık kaynak olması sayesinde, Linux’un çeşitleri, sistemin ne için kullanıldığına en uygun olacak şekilde her türlü şekil ve boyutta gelir.

Örneğin, Ubuntu ve Debian, oldukça yaygın Linux dağıtımlarıdır çünkü çok genişletilebilirler. Yani Ubuntu’yu bir sunucu olarak (web siteleri ve web uygulamaları gibi) veya tam teşekküllü bir masaüstü olarak çalıştırabilirsiniz. Bu seri için, Ubuntu kullanacağız.

Ubuntu Server, yalnızca 512MB RAM ile çalışabilir.

Windows’un farklı sürümleri (7, 8 ve 10) olduğu gibi, Linux’un da birçok farklı sürümü/dağıtımı vardır.

Araştırma: Linux işletim sisteminin ilk sürümü hangi yıl yayınlandı?

Cevap: 1991

linux makine’ye nasıl erişeceğinizi anlatan bir yazı bulunmakta start machine diyerek makinenizi aktif edin.

Daha önce de bahsettiğimiz gibi, Ubuntu gibi işletim sistemlerini kullanmanın en büyük avantajlarından biri ne kadar hafif olabildikleridir. Elbette bunun dezavantajları da yok değil; örneğin, genellikle GUI (Grafik Kullanıcı Arayüzü) ya da makineyle etkileşim kurmak için kullanabileceğimiz bir masaüstü ortamı (yüklü değilse) bulunmuyor. Bu sistemlerle etkileşime geçmenin büyük bir kısmı “Terminal” kullanmaktır. “Terminal” tamamen metin tabanlıdır ve ilk başta göz korkutucudur. Bununla birlikte, bazı komutları parçalara ayırırsak, bir süre sonra terminali kullanmaya hızlı bir şekilde aşina olursunuz!

Dosyalara gitmek, içeriklerinin çıktısını almak ve dosya oluşturmak gibi temel işlevleri yapabilmemiz gerekiyor! Bunu yapmak için gereken komutlar kendiliğinden açıklayıcıdır (tabii ki ne olduklarını bildikten sonra…) Aşağıdaki tabloda ayrıştırdığım ilk iki komutla başlayalım:

KomutAçıklama
echoVerilen herhangi bir metni çıktılar.
whoamiŞu anda hangi kullanıcı olarak oturum açtığımızı öğrenir.

Kullanılan her komutun bir örneği için aşağıdaki parçacıklara bakın…

Using echo

tryhackme@linux1:~$ echo "Hello Friend!"

Using whoami to find out the username of who we’re logged in as

tryhackme@linux1:~$ whoami

Soru: Eğer “TryHackMe” metninin çıktısını almak isteseydik, komutumuz ne olurdu?

Cevap: echo tryhackme

Deploy edilmiş Linux makinenizde oturum açtığınız kişinin kullanıcı adı nedir?

Cevap: tryhackme

Dosya Sistemi ile Etkileşim

Komutlar:

KomutTam Adı
lslisteleme
cddizin değiştirme
catbirleştirme (concatenate)
pwdmevcut çalışma dizinini yazdırma (print working directory)
  1. Geçerli Dizinimizdeki Dosyaları Listeleme (ls)

İlk olarak, mevcut dizinimizde ne olduğunu bilmeliyiz. Bu, “ls” komutu kullanılarak yapılır.

tryhackme@linux1:~$ ls
'Önemli Dosyalar' 'Belgelerim' Notlar Resimler

Bu çıktıda, aşağıdaki dizinlerin mevcut olduğunu görebiliriz:

İpucu: ls ve dizin adını kullanarak, o dizinin içeriğini listeleyebilirsiniz. Örneğin, ls Resimler.

  1. Geçerli Dizinimizi Değiştirme (cd)

Artık hangi klasörlerin mevcut olduğunu bildiğimize göre, “cd” komutunu kullanarak bu dizinlere geçiş yapabiliriz. Örneğin, “Resimler” dizinine geçmek için cd Resimler yazarız:

tryhackme@linux1:~/Resimler$ ls
kopek_resim1.jpg kopek_resim2.jpg kopek_resim3.jpg kopek_resim4.jpg

Bu durumda, dört tane köpek resmi olduğu görülüyor.

  1. Bir Dosyanın İçeriğini Çıktılama (cat)

Dosyaların içeriğini görmek için “cat” komutunu kullanırız. Örneğin, “Belgeler” dizininde bir “todo.txt” dosyası varsa, bunun içeriğini aşağıdaki gibi görüntüleyebiliriz:

tryhackme@linux1:~/Belgeler$ ls
todo.txt
tryhackme@linux1:~/Belgeler$ cat todo.txt
Yapmam gereken önemli bir şey var!

Bu örnekte:

İpucu: cat ve dosya adını kullanarak, bir dosyanın içeriğini görüntüleyebilirsiniz. Örneğin, cat /home/ubuntu/Belgeler/todo.txt.

  1. Geçerli Çalışma Dizinimizin Tam Yolunu Bulma (pwd)

Mevcut çalışma dizinimizi bulmak için “pwd” komutunu kullanırız. Bu, o an hangi dizinde olduğumuzu tam olarak gösterir:

tryhackme@linux1:~/Belgeler$ pwd
/home/ubuntu/Belgeler

Bu komut:

Bu bilgiyi kullanarak, gelecekte dizin değiştirmek için cd /home/ubuntu/Belgeler komutunu kullanabiliriz.

Bu komutlar, Linux dosya sisteminde gezinmek ve dosyalarla etkileşim kurmak için temel araçlardır.

Soru: Deploy ettiğiniz Linux makinesinde kaç tane klasör var?

Cevap: 4

Soru: Hangi dizin bir dosya içerir?

Cevap: folder4

Bu dosyanın içeriği nedir?

Cevap: Hello World!

Bu dosyaya gitmek ve yeni geçerli çalışma dizinini bulmak için cd komutunu kullanın. Yol nedir?

Cevap: /home/tryhackme/folder4

Linux’un Etkili Kullanımı
Görünüşe göre öyle değil gibi görünse de, Linux’un en etkileyici özelliklerinden biri gerçekten ne kadar verimli olabileceğinizdir. Elbette, bu yalnızca ne kadar aşina olduğunuzla sınırlıdır. Ubuntu gibi işletim sistemleriyle (OS) zamanla etkileşime geçtikçe, şimdiye kadar öğrendiğimiz temel komutlar kas hafızasına yerleşmeye başlayacaktır.

Bu sistemlerin ne kadar verimli olabileceğini göstermek için, kullanıcı erişimine sahip olduğumuz tüm sistemde dosyaları hızla aramak için komutlar kullanabiliriz. Sürekli olarak cd ve ls komutlarını kullanmak yerine, find gibi komutlarla bu tür işleri otomatikleştirebiliriz.

Bu noktada Linux biraz daha göz korkutucu hale gelmeye başlar, ancak bunu parçalara ayırıp size kolaylaştıracağız.

Find Kullanımı
find komutu harikadır çünkü çok basit veya oldukça karmaşık bir şekilde kullanılabilir, tam olarak ne yapmak istediğinize bağlı olarak. Ancak, öncelikle temellere bağlı kalalım.

Aşağıdaki kod parçacığını alın; kullanılabilir dizinlerin bir listesini görebiliriz:

“ls” Kullanarak Geçerli Dizinimizin İçeriğini Listeleme

tryhackme@linux1:~$ ls
Masaüstü Belgeler Resimler klasör1
tryhackme@linux1:~$

Şimdi, elbette, dizinler kendileri içinde daha fazla dizin içerebilir. Belirli dosyaları aramak için her birini incelemek zorunda kaldığımızda bu bir baş ağrısı olabilir. find komutunu kullanarak bunu bizim için yapabiliriz!

Basit başlayalım ve aradığımız dosyanın adını zaten bildiğimizi varsayalım, ancak tam olarak nerede olduğunu hatırlamıyoruz! Bu durumda, “passwords.txt” dosyasını arıyoruz.

Dosya adını hatırlarsak, find -name passwords.txt komutunu kullanarak bu belirli dosyayı geçerli dizinimizdeki her klasörde arayabiliriz:

“find” Kullanarak “passwords.txt” Adlı Dosyayı Bulma

tryhackme@linux1:~$ find -name passwords.txt
./klasör1/passwords.txt
tryhackme@linux1:~$

find komutu dosyayı bulmayı başardı — meğer “klasör1/passwords.txt” konumundaymış — harika. Ama diyelim ki dosyanın adını bilmiyoruz veya .txt uzantılı her dosyayı aramak istiyoruz. find bunu da yapmamıza olanak tanır!

Basit bir joker karakter (*) kullanarak .txt ile biten herhangi bir şeyi arayabiliriz. Bizim durumumuzda, geçerli dizinimizdeki tüm .txt dosyalarını bulmak istiyoruz. find -name *.txt komutunu kullanacağız. find komutu her .txt dosyasını buldu ve her birinin konumunu verdi:

“find” Kullanarak .txt Uzantılı Dosyaları Bulma

tryhackme@linux1:~$ find -name *.txt
./klasör1/passwords.txt
./Belgeler/todo.txt
tryhackme@linux1:~$

find komutu şunları buldu:

Bu çok da zor değildi, değil mi?

Grep Kullanımı
Öğrenmesi harika olan bir başka yardımcı program da grep’in kullanımıdır. grep komutu, belirli değerleri aramak için dosyaların içeriğini taramamıza olanak tanır.

Örneğin, bir web sunucusunun erişim günlüğünü ele alalım. Bu durumda, bir web sunucusunun access.log dosyasında 244 giriş var.

“wc” Kullanarak “access.log” Dosyasındaki Girişleri Sayma

tryhackme@linux1:~$ wc -l access.log
244 access.log
tryhackme@linux1:~$

cat gibi bir komut burada pek işe yaramayacaktır. Örneğin, belirli bir kullanıcı/IP adresinin ziyaret ettiği şeyleri aramak istiyorsak, 244 giriş arasında arama yapmak pek de verimli değildir.

grep komutunu kullanarak bu dosyanın tamamını, aradığımız değerin bulunduğu tüm girişleri arayabiliriz. Bir web sunucusunun erişim günlüğü örneği ile devam edersek, “81.143.211.90” IP adresinin ziyaret ettiği her şeyi görmek istiyoruz (bu hayali bir IP adresidir).

“grep” Kullanarak “access.log” Dosyasındaki “81.143.211.90” IP Adresini Bulma

tryhackme@linux1:~$ grep "81.143.211.90" access.log
81.143.211.90 - - [25/Mar/2021:11:17 + 0000] "GET / HTTP/1.1" 200 417 "-" "Mozilla/5.0 (Linux; Android 7.0; Moto G(4))"
tryhackme@linux1:~$

grep komutu bu dosyayı taradı ve verdiğimiz değeri içeren tüm girişleri bize gösterdi.

Soru: “THM” ön ekine sahip bayrağı bulmak için “access.log” üzerinde grep kullanın. Bayrak nedir?

Cevap:THM{ACCESS}

Linux operatörleri, Linux ile çalışırken bilginizi güçlendirmenin harika bir yoludur. Değinmeye değer birkaç önemli operatör vardır. Temellere değineceğiz ve bunları küçük parçalara ayıracağız.

Genel bir bakışta, aşağıdaki operatörleri göstereceğim:

Sembol / OperatörAçıklama
&Bu operatör, komutları terminalinizin arka planında çalıştırmanıza olanak tanır.
&&Bu operatör, terminalinizde bir satırda birden fazla komutu birleştirmenize olanak tanır.
>Bu operatör bir yönlendiricidir – bu, bir komutun çıktısını (örneğin bir dosyanın çıktısını almak için cat kullanmak) başka bir yere yönlendirebileceğimiz anlamına gelir.
>>Bu operatör, > operatörü ile aynı işlevi yapar, ancak çıktıyı ekler, yani hiçbir şeyin üzerine yazılmaz.

Bu operatörleri biraz daha ayrıntılı olarak ele alalım.

Operatör “&”

Bu operatör, komutları arka planda çalıştırmamıza olanak tanır. Örneğin, büyük bir dosyayı kopyalamak istediğimizi varsayalım. Bu, oldukça uzun sürecek ve dosya başarılı bir şekilde kopyalanana kadar başka hiçbir şey yapmamızı engelleyecektir.

“&” kabuk operatörü, bir komut yürütmemizi ve bunun arka planda çalışmasını sağlar (örneğin bu dosya kopyalama) ve bu sayede başka işler yapmamıza olanak tanır!

Operatör “&&”

Bu kabuk operatörü, ne kadar aşina olunduğuna göre biraz yanıltıcıdır. “&” operatöründen farklı olarak, “&&” operatörünü komutlar listesini çalıştırmak için kullanabiliriz. Örneğin, command1 && command2 şeklinde. Ancak, command2’nin yalnızca command1 başarılı olduysa çalışacağını belirtmek gerekir.

Operatör “>”

Bu operatör, çıktı yönlendirici olarak bilinir. Bu, temel olarak, çalıştırdığımız bir komutun çıktısını alıp başka bir yere gönderebileceğimiz anlamına gelir.

Bunun harika bir örneği, Görev 4’te öğrendiğimiz echo komutunun çıktısını yönlendirmektir. Elbette, echo howdy gibi bir şey çalıştırmak “howdy” sonucunu terminalimize geri döndürecektir — bu çok kullanışlı değil. Bunun yerine, “howdy” çıktısını yeni bir dosyaya yönlendirebiliriz!

Diyelim ki “hey” mesajı ile “welcome” adlı bir dosya oluşturmak istiyoruz. echo hey > welcome komutunu çalıştırabiliriz ve dosya “hey” içeriği ile oluşturulacaktır:

> Operatörünü Kullanma

tryhackme@linux1:~$ echo hey > welcome

“welcome” Dosyasının İçeriğini cat ile Görüntüleme

tryhackme@linux1:~$ cat welcome
hey

Not: Eğer “welcome” gibi bir dosya zaten varsa, içeriği üzerine yazılır!

Operatör “>>”

Bu operatör de bir çıktı yönlendiricidir, ancak daha önce tartıştığımız > operatöründen farklıdır. Bu operatör, içeriği dosyanın sonuna ekler, yani içeriği değiştirmez.

Önceki örneğe devam edersek, “hey” içeriğine sahip “welcome” adlı dosyamız olduğunu varsayalım. echo komutunu kullanarak > operatörü ile “hello” eklemek istersek, dosya artık sadece “hello” içerecektir ve “hey” kaybolacaktır.

operatörü, içeriği dosyanın sonuna eklememize olanak tanır:

>> Operatörünü Kullanma

tryhackme@linux1:~$ echo hello >> welcome

“welcome” Dosyasının İçeriğini cat ile Görüntüleme

tryhackme@linux1:~$ cat welcome
hey
hello

Soru 1: Bir komutu arka planda çalıştırmak istesek, hangi operatörü kullanmalıyız?

Cevap: &

Soru 2: “passwords” adlı bir dosyanın içeriğini “password123” ile değiştirmek istesem, komutum ne olur?

Cevap: echo password123 > passwords

Soru 3: Şimdi “passwords” adlı dosyaya “password123” ile birlikte “tryhackme” eklemek istersem, komutum ne olur?

Cevap: echo tryhackme >> passwords

Soru 4: cevap vermeye gerek yok

Tebrikler, bu aşamaya gelmeyi başardınız! Linux ile ilk etkileşimleriniz için oldukça fazla şey öğrendik. Ancak, bunlar bir Linux makinesiyle etkileşimde bulunurken kullanacağınız en temel işlevlerdir.

Bu odanın sizin için zorlayıcı olmamış olmasını umuyorum. Daha önce de belirttiğim gibi, bu şeylere çok sık kullanacağınız için çok çabuk aşina olacaksınız.

Hızlıca özetlemek gerekirse, şunları öğrendik:

  1. Linux’un bugün neden bu kadar yaygın olduğunu anlama
  2. İlk Linux makinenizle etkileşime geçme!
  3. En temel komutlardan bazılarını çalıştırma
  4. Dosya sisteminde gezinmeye giriş ve verileri bulmayı daha verimli hale getirmek için find ve grep gibi komutları kullanmayı öğrendik!
  5. Komutlarınızı güçlendirmek için önemli kabuk operatörlerinden bazılarını öğrenme

Bu odada biraz vakit geçirin ve öğrendiklerinizi pekiştirin. Kendinizi biraz daha rahat hissettiğinizde, Linux Temelleri Bölüm 2’ye geçin.

Şimdi Linux Fundementals Part 2‘ ile devam edelim.

Elden geçirilmiş “Linux Temelleri” serisinin ikinci bölümüne hoş geldiniz. Bu serinin ilk bölümündeki bilgilerimizi uygulayacağız, bu nedenle daha fazla ilerlemeden önce o odayı tamamlamanızı şiddetle tavsiye ederim. 2. bölümde, tarayıcı içi işlevselliği bir kenara bırakacağız ve uzak makinelerin terminallerine giriş yapabilmek ve bunları kontrol edebilmek için temel bir beceri olan başlangıç yapmanıza yardımcı olacağız. Sadece bu değil, aynı zamanda oda size şunları da sunacak: Bayrakları ve argümanları kullanmayı tanıtarak ilk birkaç komutunuzun potansiyelini ortaya çıkarmak Dosyaları kopyalamak ve taşımak gibi daha kullanışlı komutları gerçekleştirmek için dosya sistemi bilginizi ilerletmek Dosya ve klasörlere erişimin nasıl yönetildiğini ve erişimimizi nasıl belirleyebileceğimizi keşfetmek İlk birkaç komut dosyanızı ve çalıştırılabilir dosyanızı çalıştırmak!

hemen makinenize ssh atın ve gelin bölümde zaten nasıl yapmanız gerektiği adım adım anlatılmış bu kısmı es geçiyorum.

Çoğu komut, argümanların sağlanmasına izin verir. Bu argümanlar, bir tire (-) ve belirli bir anahtar kelime ile tanımlanır; bu anahtar kelimelere bayraklar veya anahtarlar denir.

Daha sonra hangi komutların argümanlara izin verdiğini ve bunların tam olarak ne yaptığını nasıl belirleyebileceğimizi tartışacağız.

Bir komut kullanırken, aksi belirtilmedikçe, varsayılan davranışını gerçekleştirecektir. Örneğin, ls çalıştığımız dizinin içeriğini listeler. Ancak, gizli dosyalar gösterilmez. Komutların davranışını genişletmek için bayraklar ve anahtarlar kullanabiliriz.

ls örneğimizi kullanarak, ls bize aşağıdaki ekranda gösterildiği gibi yalnızca “folder1” adlı bir klasör olduğunu bildirir. Aşağıdaki ekran görüntülerindeki içeriklerin yalnızca örnekler olduğunu unutmayın.

Bir dizinin içeriğini görüntülemek için ls kullanma:

tryhackme@linux2:~$ ls
folder1
tryhackme@linux2:~$

Ancak, -a argümanını (tümünün kısaltması) kullandıktan sonra, aniden “.hiddenfolder” gibi birkaç dosya ve klasör içeren bir çıktı alırız. . ile başlayan dosyalar ve klasörler gizli dosyalardır.

Gizli klasörleri görüntülemek için ls kullanma:

tryhackme@linux2:~$ ls -a 
.hiddenfolder folder1
tryhackme@linux2:~$

Bu komutları kabul eden komutların bir de --help seçeneği vardır. Bu seçenek, komutun kabul ettiği olası seçenekleri listeleyecek, kısa bir açıklama sağlayacak ve nasıl kullanılacağına dair bir örnek sunacaktır.

ls komutu ile kullanabileceğimiz seçenekleri listeleme:

tryhackme@linux2:~$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                               e.g., '--block-size=M'; see SIZE format below
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information);
                               with -l: show ctime and sort by name;
                               otherwise: sort by ctime, newest first
  -C                         list entries by columns
      --color[=WHEN]         colorize the output; WHEN can be 'always' (default
                               if omitted), 'auto', or 'never'; more info below
  -d, --directory            list directories themselves, not their contents
  -D, --dired                generate output designed for Emacs' dired mode
  -f                         do not sort, enable -aU, disable -ls --color
  -F, --classify             append indicator (one of */=>@|) to entries
      --file-type            likewise, except do not append '*'
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                               single-column -1, verbose -l, vertical -C
      --full-time            like -l --time-style=full-iso
  -g                         like -l, but do not list owner
      --group-directories-first
tryhackme@linux2:~$

Bu seçenek, aslında man sayfasının (kısaltması manuel) biçimlendirilmiş bir çıktısıdır ve bu, Linux komutları ve uygulamaları için belgeler içerir.

Man(ual) Sayfası

Manuel sayfalar, hem sistem komutları hem de bir Linux makinesinde bulunan uygulamalar için harika bir bilgi kaynağıdır ve bu makinenin kendisinde ve çevrimiçi olarak erişilebilir.

Bu belgeleri görüntülemek için man komutunu ve ardından belgesini okumak istediğimiz komutu kullanabiliriz. ls örneğimizi kullanarak, ls için manuel sayfaları görüntülemek için man ls kullanırdık:

ls komutu ile kullanabileceğimiz seçenekleri listeleme:

tryhackme@linux2:~$ man ls
LS(1)                                               User Commands                                               LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about the FILEs (the current directory by default).  Sort entries alphabetically if none of
       -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

       --author
              with -l, print the author of each file

       -b, --escape
              print C-style escapes for nongraphic characters

       --block-size=SIZE
              with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE format below

 Manual page ls(1) line 1 (press h for help or q to quit)

Soru: Kılavuz sayfasında gezinmek için hangi yön ok tuşunu kullanacağız?

Cevap: Down

Soru: Çıktıyı “insan tarafından okunabilir” bir şekilde görüntülemek için hangi bayrağı kullanacağız?

Cevap: -h

Linux makinelerinde dosya sistemiyle etkileşim kurarken en temel komutlardan bazılarını ele aldık. Örneğin, ls ve find komutlarıyla klasörlerin içeriğini listelemeyi ve bulmayı ve cd komutuyla dosya sisteminde gezinmeyi öğrendik.

Bu görevde, dosya sistemiyle etkileşim kurmak için daha fazla komut öğreneceğiz ve şunları yapmamıza izin verecek komutları öğreneceğiz:

Daha spesifik olarak, aşağıdaki komutları ele alacağız:

KomutTam AdıAmacı
touchtouchDosya oluşturma
mkdirmake directoryKlasör oluşturma
cpcopyDosya veya klasör kopyalama
mvmoveDosya veya klasör taşıma
rmremoveDosya veya klasör silme
filefileBir dosyanın türünü belirleme

İpucu: cat kullanırken olduğu gibi, bu komutlar için tam dosya yollarını da belirtebiliriz, yani directory1/directory2/note gibi.

Dosya ve Klasör Oluşturma (touch, mkdir)

Linux’ta dosya ve klasör oluşturmak basit bir işlemdir. İlk olarak, bir dosya oluşturmayı ele alacağız. touch komutu tam olarak bir argüman alır – oluşturmak istediğimiz dosyaya vermek istediğimiz isim. Örneğin, touch note komutunu kullanarak “note” dosyasını oluşturabiliriz. touch sadece boş bir dosya oluşturur. Boş dosyaya içerik eklemek için echo gibi komutlar veya nano gibi metin düzenleyicileri kullanmamız gerekir.

tryhackme@linux2:~$ touch note
tryhackme@linux2:~$ ls
folder1 note

Bu, bir klasör oluşturmak için mkdir komutunu kullanmak kadar basit bir işlemdir ve yine oluşturmak istediğimiz dizine vermek istediğimiz adı belirtiriz. Örneğin, mkdir mydirectory komutunu kullanarak “mydirectory” dizinini oluşturabiliriz.

tryhackme@linux2:~$ mkdir mydirectory
tryhackme@linux2:~$ ls
folder1 mydirectory note

Dosya ve Klasör Silme (rm)

rm, şu ana kadar ele aldığımız komutlar arasında dikkat çekicidir. Dosyaları rm komutunu kullanarak basitçe silebilirsiniz. Ancak, bir dizini silmek için -R anahtarını dizin adıyla birlikte belirtmeniz gerekir.

tryhackme@linux2:~$ rm note
tryhackme@linux2:~$ ls
folder1 mydirectory
tryhackme@linux2:~$ rm -R mydirectory
tryhackme@linux2:~$ ls
folder1

Dosya ve Klasör Kopyalama ve Taşıma (cp, mv)

Linux makinesinde dosya kopyalama ve taşıma önemli bir işlevdir. cp ile başlayarak, bu komut iki argüman alır:

  1. Mevcut dosyanın adı
  2. Kopyalanacak yeni dosyanın adı

cp, mevcut dosyanın tüm içeriğini yeni dosyaya kopyalar. Aşağıdaki ekranda, “note” dosyasını “note2” olarak kopyalıyoruz.

tryhackme@linux2:~$ cp note note2
tryhackme@linux2:~$ ls
folder1 note note2

Bir dosyayı taşımak, tıpkı cp komutunda olduğu gibi iki argüman alır. Ancak, mv yeni bir dosya oluşturmak veya mevcut dosyayı kopyalamak yerine, ikinci argüman olarak belirtilen dosyayı birleştirir veya değiştirir. mv komutunu bir dosyayı yeni bir klasöre taşımak için kullanabileceğiniz gibi, bir dosya veya klasörün adını değiştirmek için de kullanabilirsiniz. Aşağıdaki örnekte, “note2” dosyasını “note3” olarak yeniden adlandırıyoruz. “note3” artık “note2″nin içeriğine sahip olacaktır.

tryhackme@linux2:~$ mv note2 note3
tryhackme@linux2:~$ ls
folder1 note note3

Dosya Türünü Belirleme

Dosyaların amacı veya içeriği hakkında varsayımlarda bulunmak yanıltıcı olabilir ve insanları sık sık yanıltır. Dosyaların amacını kolaylaştırmak için genellikle bir uzantısı vardır. Örneğin, metin dosyaları genellikle “.txt” uzantısına sahiptir. Ancak, bu zorunlu değildir.

Örneklerimizde kullandığımız dosyaların şu ana kadar bir uzantısı yoktu. Dosyanın neden orada olduğunu bilmeden – amacını gerçekten bilmiyoruz. Burada devreye file komutu giriyor. Bu komut bir argüman alır. Örneğin, “note” dosyasının gerçekten bir metin dosyası olup olmadığını doğrulamak için file komutunu kullanacağız.

tryhackme@linux2:~$ file note
note: ASCII text

Soru: “newnote” adlı dosyayı nasıl oluşturursunuz?

Cevap: touch newnote

Soru: makinede, “tryhackme’nin” home dizinindeki “unknown1” dosyasının türü nedir?

Cevap: ASCII text

Soru: “myfile” dosyasını “myfolder” dizinine nasıl taşıyabiliriz?

Cevap: mv myfile myfolder/

Soru: Bu dosyanın içeriği nedir?

Cevap: THM{FILESYSTEM}

Şimdiye kadar, bazı kullanıcıların belirli dosyalara veya klasörlere erişemediğini öğrendiniz. Önceki görevlerimizde, sahip olduğumuz erişim haklarını belirlemek ve nereye gittiğimizi görmek için bazı komutları nasıl kullanacağımızı keşfettik.

Daha önce, komutların bayraklar ve anahtarlar aracılığıyla nasıl genişletilebileceğini öğrendik. Örneğin, ls komutu, mevcut dizindeki içerikleri listelemeye yarar. -l anahtarını kullandığınızda, aşağıdaki ekran görüntüsünde olduğu gibi on sütun görürüz. Ancak, sadece ilk üç sütuna ilgi duyuyoruz:

ls -lh kullanarak dizindeki tüm dosyaların izinlerini listelemek

tryhackme@linux2:~$ ls -lh
-rw-r--r-- 1 cmnatic cmnatic 0 Feb 19 10:37 file1
-rw-r--r-- 8 cmnatic cmnatic 0 Feb 19 10:37 file2

Görünüşte karmaşık olsa da, bu üç sütun, bir dosya veya klasörün belirli özelliklerini ve bu dosya veya klasöre erişimimizin olup olmadığını belirlemede çok önemlidir. Bir dosya veya klasör, aşağıdaki gibi birkaç özelliğe sahip olabilir:

Kullanıcılar Arası Geçiş

Linux’ta kullanıcılar arasında geçiş yapmak oldukça basittir, su komutunu kullanarak bu geçişi gerçekleştirebilirsiniz. Root kullanıcısı (veya sudo aracılığıyla root izinleri kullanarak) değilseniz, bu geçişi sağlamak için iki şeye ihtiyacınız vardır:

su komutu bazı anahtarlar alabilir. Örneğin, bir komutu giriş yaptıktan sonra çalıştırma veya belirli bir shell kullanma gibi. Daha fazla bilgi için su komutunun man sayfasını okumanızı öneririm. Ancak, -l veya --login anahtarını ele alacağım.

Basitçe, -l anahtarını su komutuna verdiğimizde, gerçek kullanıcı olarak sisteme giriş yapmayı daha çok taklit eden bir shell başlatırız — yeni kullanıcının birçok özelliğini miras alırız, örneğin ortam değişkenleri ve benzerleri.

su ile kullanıcıya geçiş yapmak:

tryhackme@linux2:~$ su user2
Password:
user2@linux2:/home/tryhackme$

Örneğin, su komutunu “user2″ye geçiş yapmak için kullandığınızda, yeni oturumunuz önceki kullanıcının ana dizinine düşer.

su -l ile kullanıcıya geçiş yapmak:

tryhackme@linux2:~$ su -l user2
Password:
user2@linux2:~$ pwd
/user2@:/home/user2$

Burada, -l kullandığınızda, yeni oturumunuz otomatik olarak “user2″nin ana dizinine düşer.

Soru: Makinede, “important” öğesinin sahibi kimdir?

Cevap: user2

Soru: user2’ye geçmek için komut ne olmalıdır?

Cevap: su user2

Soru: important dosyasının içeriğindeki flag nedir?

Cevap: THM{SU_USER2}

/etc

Bu kök dizini, sisteminizdeki en önemli kök dizinlerden biridir. “etc” (et cetera’nın kısaltması) klasörü, işletim sisteminiz tarafından kullanılan sistem dosyalarını depolamak için yaygın bir yerdir.

Örneğin, aşağıdaki ekran görüntüsünde vurgulanan “sudoers” dosyası, sudo veya kök kullanıcısı olarak bir dizi komutu çalıştırma iznine sahip kullanıcılar ve grupların listesini içerir.

Ayrıca, “passwd” ve “shadow” dosyaları da belirtilmiştir. Bu iki dosya, Linux için özeldir çünkü sisteminizdeki her kullanıcı için şifrelerin nasıl şifrelenmiş olarak saklandığını gösterir. Bu şifreleme genellikle sha512 formatında yapılır.

/etc dizininin bazı dikkat çekici içerikleri

tryhackme@linux2:/etc$ ls
shadow passwd sudoers sudoers.d

/var

“/var” dizini, “var” kelimesi değişken veriyi temsil eder ve Linux kurulumlarında bulunan ana kök klasörlerden biridir. Bu klasör, sistemde çalışan hizmetler veya uygulamalar tarafından sıklıkla erişilen veya yazılan verileri depolar. Örneğin, çalışan hizmetlerden ve uygulamalardan gelen günlük dosyaları burada saklanır (/var/log), veya belirli bir kullanıcıya bağlı olmayan diğer veriler (örneğin, veritabanları) bu dizinde bulunur.

/var dizininin bazı dikkat çekici içerikleri

tryhackme@linux2:/var$ ls
backups log opt tmp

/root

“/home” dizininden farklı olarak, “/root” klasörü doğrudan “root” sistem kullanıcısının ana dizinidir. Bu dizin, kök kullanıcı için yalnızca ana dizin olarak kullanılır. Genellikle, bu kullanıcının verileri varsayılan olarak “/home/root” gibi bir dizinde bulunur, ancak bu dizin kök kullanıcının ev dizinidir.

/root dizininin bazı dikkat çekici içerikleri

root@linux2:~# ls
myfile myfolder passwords.xlsx

/tmp

Bu dizin, Linux kurulumlarında bulunan benzersiz bir kök dizinidir. “Temporary” (geçici) anlamına gelen /tmp dizini, yalnızca bir veya iki kez erişilmesi gereken verileri depolamak için kullanılır. Bilgisayar yeniden başlatıldığında, bu klasörün içeriği temizlenir, tıpkı bilgisayarınızdaki bellek gibi.

Penetrasyon testlerinde bizim için faydalı olan şey, varsayılan olarak herhangi bir kullanıcının bu klasöre yazabilmesidir. Yani, bir makineye erişim sağladığımızda, bu klasör bizim için toplama komut dosyalarımız gibi şeyleri depolamak için iyi bir yer olabilir.

/tmp dizininin bazı dikkat çekici içerikleri

root@linux2:/tmp# ls
todelete trash.txt rubbish.bin

Linux Fundementals 3‘den devam edelim:

Terminal Metin Editörleri

Şu ana kadar, dosyalara metin eklemek için echo komutu ve pipe operatörleri (> ve >>) kombinasyonunu kullandık. Ancak bu yöntem, birden fazla satıra sahip dosyalarla çalışırken verimli bir çözüm sunmaz.

Nano

Nano ile başlamak oldukça kolay! Nano kullanarak bir dosya oluşturmak veya düzenlemek için nano dosya_adı komutunu kullanabilirsiniz — burada “dosya_adı” düzenlemek istediğiniz dosyanın adını temsil eder.

Nano’yu Tanıyalım

tryhackme@linux3:/tmp# nano myfile
  GNU nano 4.8                                             myfile                                                       

^G Get Help    ^O Write Out   ^W Where Is    ^K Cut Text    ^J Justify     ^C Cur Pos     M-U Undo       M-A Mark Text
^X Exit        ^R Read File   ^\ Replace     ^U Paste Text  ^T To Spell    ^_ Go To Line  M-E Redo       M-6 Copy Text

Komutu çalıştırmak için enter tuşuna bastığınızda, nano açılacaktır ve metninizi girmeye veya düzenlemeye başlayabilirsiniz. Her satır arasında yukarı ve aşağı ok tuşları ile gezinebilir veya yeni bir satır başlatmak için klavyenizdeki “Enter” tuşunu kullanabilirsiniz.

Nano ile Metin Yazma

tryhackme@linux3:/tmp# nano myfile
  GNU nano 4.8                                             myfile                                             Modified  

Hello TryHackMe
I can write things into "myfile"


^G Get Help    ^O Write Out   ^W Where Is    ^K Cut Text    ^J Justify     ^C Cur Pos     M-U Undo       M-A Mark Text
^X Exit        ^R Read File   ^\ Replace     ^U Paste Text  ^T To Spell    ^_ Go To Line  M-E Redo       M-6 Copy Text

Nano’nun hatırlaması kolay birkaç özelliği vardır ve genel olarak bir metin editöründen beklediğiniz temel işlevleri kapsar, bunlar arasında:

Bu özellikleri kullanmak için “Ctrl” tuşuna (Linux’ta ^ ile temsil edilir) ve ilgili harfe basabilirsiniz. Örneğin, çıkmak için “Ctrl” ve “X” tuşlarına basmak yeterlidir.

VIM

VIM, çok daha gelişmiş bir metin editörüdür. Tüm gelişmiş özelliklerini bilmenizi beklemiyoruz, ancak Linux becerilerinizi güçlendirmek için faydalı olabilir.

VIM’in bazı avantajları, daha uzun bir alışma süreci gerektirse de şunları içerir:

Daha fazla bilgi için TryHackMe’nin VIM’e odaklanan bir odası mevcuttur!

Soru: Nano kullanarak “tryhackme “nin home dizininde bulunan “task3” dosyasını düzenleyin. Bayrak nedir?

Cevap: THM{TEXT_EDITORS}

Dosya İndirme ve Transferi

Dosya İndirme – Wget

Bilgisayar dünyasında temel özelliklerden biri, dosyaları transfer edebilme yeteneğidir. Örneğin, bir program, script veya resim indirmek isteyebilirsiniz. Neyse ki, dosyaları indirmek için birkaç yöntem mevcut.

Bu görevde wget komutunun kullanımını ele alacağız. Bu komut, web üzerindeki dosyaları HTTP üzerinden indirmenizi sağlar; sanki bir tarayıcıda dosyayı erişiyormuşsunuz gibi. İndirmek istediğiniz dosyanın adresini vermeniz yeterlidir. Örneğin, “myfile.txt” adlı dosyayı bilgisayarınıza indirmek istiyorsanız, web adresini bildiğinizi varsayarsak komut şu şekilde olacaktır:

wget https://assets.tryhackme.com/additional/linux-fundamentals/part3/myfile.txt

Dosya Transferi – SCP (SSH)

Secure Copy, veya SCP, güvenli bir şekilde dosya kopyalamak anlamına gelir. Normal cp komutunun aksine, bu komut SSH protokolü kullanarak iki bilgisayar arasında dosya transferi sağlar ve hem kimlik doğrulama hem de şifreleme sunar.

SOURCE ve DESTINATION modeli kullanarak SCP komutu ile:

Eğer her iki sistemde de kullanıcı adları ve şifreleri biliyorsanız, örneğin, önemli bir dosyayı uzak bir makineden kendi makinenize kopyalamak için SCP komutunu şu şekilde kullanabilirsiniz:

Uzak Makineden Dosya Kopyalama

scp [email protected]:/home/ubuntu/documents.txt notes.txt

Burada:

Kendi Makinenizden Uzak Makineye Dosya Kopyalama

scp important.txt [email protected]:/home/ubuntu/transferred.txt

Burada:

Dosyaları Sunma – WEB

Ubuntu makineleri, python3 ile birlikte gelir ve Python, “HTTPServer” adlı hafif ve kullanımı kolay bir modül sunar. Bu modül, bilgisayarınızı hızlı ve kolay bir web sunucusuna dönüştürür ve dosyalarınızı sunmanızı sağlar, böylece diğer bilgisayarlar wget ve curl gibi komutlarla bu dosyaları indirebilirler.

Python3’ün “HTTPServer” modülü, komutu çalıştırdığınız dizindeki dosyaları sunar, ancak bu dizini değiştirmek için manuel sayfalarda bulabileceğiniz seçenekler sunar. Komutu çalıştırmak için terminalde şu komutu kullanın:

Python ile Web Sunucusu Başlatma

python3 -m http.server

Örneğin, “webserver” adlı bir dizinden “file” adlı dosyayı sunuyorsak:

tryhackme@linux3:/webserver# python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Şimdi, wget komutunu kullanarak dosyayı indirin. Python3 sunucusu port 8000’de çalıştığı için wget komutunuzda bu portu belirtmelisiniz. Örneğin:

Port 8000’de Çalışan Web Sunucusundan Dosya İndirme

tryhackme@mymachine:~# wget http://10.10.47.15:8000/myfile

Not: Python3 web sunucusunu başlattığınız terminal açık kalmalıdır ve wget komutunu başka bir terminalden çalıştırmalısınız. Aşağıdaki örnekte olduğu gibi:

Web Sunucusundan Dosya İndirme Örneği

tryhackme@linux3:/tmp# wget http://10.10.47.15:8000/file

2021-05-04 14:26:16  http://127.0.0.1:8000/file
Connecting to http://127.0.0.1:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51095 (50K) [text]
Saving to: ‘file’

file                    100%[=================================================>]  49.90K  --.-KB/s    in 0.04s

2021-05-04 14:26:16 (1.31 MB/s) - ‘file’ saved [51095/51095]

Bu modülün bir kusuru, indekslemenin hiçbir yolu olmamasıdır, bu nedenle kullanmak istediğiniz dosyanın tam adını ve konumunu bilmeniz gerekir. Bu yüzden Updog kullanmayı tercih ediyorum. Updog nedir? Daha gelişmiş ama hafif bir web sunucusu. Ama şimdilik Python’un “HTTP Sunucusu “nu kullanmaya devam edelim.

Dosyaları Sunma — WEB

Ubuntu makineleri python3 ile önceden paketlenmiş olarak gelir. Python, “HTTPServer” adlı hafif ve kullanımı kolay bir modül sağlar. Bu modül, bilgisayarınızı hızlı ve kolay bir web sunucusuna dönüştürür ve böylece kendi dosyalarınızı sunabilirsiniz, bu dosyalar başka bir bilgisayar tarafından curl ve wget gibi komutlarla indirilebilir.

Python3’ün “HTTPServer” modülü, komutu çalıştırdığınız dizindeki dosyaları sunar, ancak bu dizini manuel sayfalarda bulabileceğiniz seçeneklerle değiştirebilirsiniz. Komutu başlatmak için terminalde şu komutu çalıştırmanız yeterlidir:

python3 -m http.server

Aşağıdaki ekran görüntüsünde, “webserver” adlı bir dizinden “file” adlı tek bir dosya sunulmaktadır.

Şimdi, wget kullanarak dosyayı bilgisayarın IP adresini ve dosya adını kullanarak indirelim. Bu modülün bir dezavantajı, indeksleme yapmanın bir yolu olmamasıdır, bu yüzden kullanmak istediğiniz dosyanın tam adını ve konumunu bilmelisiniz. Bu nedenle, ben Updog kullanmayı tercih ediyorum. Updog nedir? Daha gelişmiş ama yine de hafif bir web sunucusudur. Ancak şimdilik Python’un “HTTP Server” modülünü kullanmaya devam edelim.

Yukarıdaki ekran görüntüsünde, wget’in “file” adlı dosyayı başarılı bir şekilde bilgisayarımıza indirdiğini görebiliriz. Bu istek, herhangi bir web sunucusu gibi SimpleHTTPServer tarafından günlüğe kaydedilir, bu da aşağıdaki ekran görüntüsünde gösterilmiştir.

  1. Dosyayı TryHackMe AttackBox’ına indirin: http://MACHINE_IP:8000/.flag.txt

İçerikleri nelerdir?

THM{WGET_WEBSERVER}
  1. Öğrendiklerinizi uygulamak için dosyalar oluşturun ve indirin. Python3’ün “HTTPServer” modülü hakkındaki dokümantasyonu nasıl okuyabileceğinizi görün.

İşiniz bittiğinde Python3 HTTPServer modülünü durdurmak için Ctrl + C tuşlarına basın.

GÖREV 5: process 101

GÖREV 5: Süreçler 101

Süreçler, makinenizde çalışan programlardır. Kernel tarafından yönetilirler ve her sürecin, PID olarak bilinen bir kimlik numarası vardır. PID, sürecin başlama sırasına göre artar. Örneğin, 60. süreç, 60 PID’ye sahip olacaktır.

Süreçleri Görüntüleme

Kullanıcı oturumumuzda çalışan süreçlerin listesini ve durum kodu, çalıştırılan oturum, CPU kullanım süresi ve çalıştırılan program veya komutun adı gibi ek bilgileri sağlamak için ps komutunu kullanabiliriz:

ps

Bu komut, temel süreç bilgilerini sağlar ve aşağıdaki gibi bir çıktı üretir:

PID TTY          TIME CMD
  1 ?        00:00:01 systemd
  2 ?        00:00:00 kthreadd
  3 ?        00:00:00 ksoftirqd/0
  4 ?        00:00:00 kworker/0:0H
  5 ?        00:00:00 kworker/0:0

Bu bilgiler şunları içerir:

Yukarıdaki örnekte, ikinci süreç olan ps‘nin PID’si 204’tür ve bir sonraki komutta bu 205 olarak artar.

Tüm Süreçleri Görüntüleme

Diğer kullanıcılar tarafından çalıştırılan süreçleri ve oturumdan başlatılmayan (yani sistem süreçleri) süreçleri görmek için, ps komutuna aux parametresini eklememiz gerekir:

ps aux

Bu komut, çok daha kapsamlı bir süreç listesi sağlar ve aşağıdaki gibi bir çıktı üretir:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  22520  1088 ?        Ss   10:14   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    10:14   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    10:14   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    10:14   0:00 [kworker/0:0H]

Bu bilgiler şunları içerir:

Bu komut sayesinde, sistemde çalışan tüm süreçleri ve ilgili bilgileri görebilirsiniz.

Toplam 5 süreç görebildiğimize dikkat edin – şimdi nasıl “root” ve “cmnatic” olduğuna dikkat edin Çok kullanışlı bir başka komut da top komutudur; top size sisteminizde çalışan süreçler hakkında tek seferlik bir görünüm yerine gerçek zamanlı istatistikler verir. Bu istatistikler her 10 saniyede bir yenilenecektir, ancak çeşitli satırlara göz atmak için ok tuşlarını kullandığınızda da yenilenecektir. Sisteminiz hakkında bilgi edinmek için bir başka harika komut da top komutudur.

Süreçleri Yönetme

Süreçleri sonlandırmak için sinyaller gönderebilirsiniz; bu sinyaller, sürecin kernel tarafından ne kadar “temiz” bir şekilde işleneceği ile ilgilidir. Bir komutu sonlandırmak için, uygun bir şekilde adlandırılmış kill komutunu ve sonlandırmak istediğimiz sürecin PID’sini kullanabiliriz. Örneğin, PID 1337’yi sonlandırmak için kill 1337 kullanırız.

Aşağıda, bir süreç öldürüldüğünde gönderilebilecek bazı sinyaller bulunmaktadır:

Süreçler Nasıl Başlar?

Öncelikle, namespace’lerden bahsedelim. İşletim Sistemi (OS), namespace’lerini kullanarak bilgisayardaki kaynakları (CPU, RAM ve öncelik gibi) süreçlere böler. Bunu, bilgisayarınızı dilimlere ayırmak gibi düşünebilirsiniz — bir pastaya benzer. Bu dilim içindeki süreçler, belirli bir miktar işlem gücüne erişebilir, ancak bu, genel olarak tüm süreçler için mevcut olanın küçük bir kısmı olacaktır.

namespace’ler, güvenlik için harikadır çünkü süreçleri birbirinden izole etmenin bir yoludur — yalnızca aynı namespace’lerde bulunan süreçler birbirini görebilir.

Daha önce PID’nin nasıl çalıştığını konuşmuştuk ve burada devreye girer. 0 kimlik numarasına sahip süreç, sistem başladığında başlatılan bir süreçtir. Bu süreç, Ubuntu’daki sistemd gibi sistemin init sürecidir ve kullanıcı süreçlerini yönetme yolu sağlar ve işletim sistemi ile kullanıcı arasında bulunur.

Örneğin, bir sistem boots ve initialises, sistemd başlatılan ilk süreçlerden biridir. Başlatmak istediğimiz herhangi bir program veya yazılım, sistemd’nin bir alt süreci olarak başlatılır. Bu, sistemd tarafından kontrol edildiği anlamına gelir, ancak kendi süreci olarak çalışır (sistemd’den kaynakları paylaşmasına rağmen), bu da onu tanımlamamızı kolaylaştırır.


Sistem Başlatılması Sırasında Başlatılması İstenen Uygulamalar

Bazı uygulamalar, sistemin başlatılması sırasında otomatik olarak başlatılabilir. Örneğin, web sunucuları, veritabanı sunucuları veya dosya transfer sunucuları gibi yazılımlar kritik olabilir ve sistem yöneticileri tarafından sistem açılırken başlatılacak şekilde yapılandırılabilir.

Bu örnekte, Apache web sunucusunun manuel olarak başlatılmasını ve ardından sistemin her açılışta Apache2’yi başlatmasını sağlayacağız.

Systemctl Kullanımı

Systemctl komutu, systemd süreci/daemon’u ile etkileşimde bulunmamızı sağlar. Örneğin, Apache’nin başlatılması için systemctl start apache2 komutunu kullanacağız. Apache’yi durdurmak için de benzer şekilde systemctl stop apache2 komutunu kullanırız.

Systemctl ile yapabileceğimiz dört işlem şunlardır:


Linux’ta Arka Plan ve Ön Plan İşlemleri

İşlemler iki durumda çalışabilir: Arka planda ve ön planda. Örneğin, terminalinizde çalıştırdığınız komutlar, “echo” gibi, ön planda çalışır. Bu, komutun çıktısının hemen terminale döneceği anlamına gelir. Arka planda çalışan bir işlem, komutun çıktısının hemen terminale dönmemesi ve terminalde başka işlemler yapılabilmesi anlamına gelir.


Burada echo "Hi THM" komutunu çalıştırıyoruz ve çıktının doğrudan bize döneceğini bekliyoruz. Ancak, komutun sonuna & operatörünü eklediğimizde, gerçek çıktıyı almak yerine sadece echo işleminin ID’sini alıyoruz — çünkü işlem arka planda çalışıyor.

Bu, dosya kopyalama gibi komutlar için mükemmeldir çünkü komutu arka planda çalıştırabilir ve dosya kopyalamanın tamamlanmasını beklemeden başka komutlar çalıştırmaya devam edebiliriz.

Script’leri çalıştırırken de aynı şekilde yapabiliriz — & operatörünü kullanmak yerine, klavyenizde Ctrl + Z tuşlarına basarak bir işlemi arka plana alabilirsiniz. Bu, bir script veya komutun çalışmasını “durdurmanın” etkili bir yoludur.



Bu script, ben durdurana veya işlemi askıya alana kadar sürekli olarak “This will keep on looping until I stop!” mesajını tekrar edecek. Ctrl + Z kullanarak işlemi askıya alabiliriz (T^Z ile gösterildiği gibi). Şimdi terminalimiz mesajlarla dolmuyor — ta ki işlemi tekrar ön planda çalıştırana kadar, ki bunu aşağıda tartışacağız.

Bir işlemi ön planda çalıştırma

Şimdi arka planda çalışan bir işlemimiz var, örneğin background.sh script’imiz, bu işlemi ps aux komutunu kullanarak doğrulayabiliriz. Bu işlemi geri alıp, etkileşimde bulunmak için ön planda çalıştırabiliriz.

Ctrl + Z veya & operatörü ile işlemi arka plana aldığımızda, fg komutunu kullanarak bu işlemi tekrar ön plana getirebiliriz. Aşağıda olduğu gibi, fg komutunu kullanarak arka planda çalışan işlemi terminalde tekrar kullanıma alabiliriz ve script’in çıktısı artık bize geri döner.

  1. Önceki ID’si “300” olan bir süreci başlatacak olsaydık, bu yeni sürecin ID’si ne olurdu? 301
  2. Bir süreci temiz bir şekilde öldürmek istersek, ona hangi sinyali gönderirdik? SIGTERM
  3. Makinede (MACHINE_IP) çalışan süreci bulun. THM{PROCESSES}
  1. “myservice” hizmetini durdurmak için hangi komutu kullanırız? systemctl stop myservice
  2. Sistemin açılışında aynı hizmeti başlatmak için hangi komutu kullanırız? systemctl enable myservice
  3. Önceden arka plana alınmış bir süreci tekrar ön plana getirmek için hangi komutu kullanırız? fg

Görev 6 -: Sisteminizi Yönetme: Otomasyon

Kullanıcılar, sistem başlatıldığında belirli bir eylemi veya görevi planlamak isteyebilirler. Örneğin, komutları çalıştırmak, dosyaları yedeklemek veya favori programlarınızı (örneğin Spotify veya Google Chrome) başlatmak.

Burada cron sürecinden bahsedeceğiz, ancak daha spesifik olarak crontab’lerle nasıl etkileşimde bulunabileceğimizi ele alacağız. Crontab, sistem başlatıldığında başlatılan süreçlerden biridir ve cron işleri (cron jobs) oluşturma ve yönetme işlevini yerine getirir.

Bir crontab, cron süreci tarafından her satırı adım adım çalıştırmak üzere tanınan özel bir dosyadır. Crontab’ler 6 belirli değeri gerektirir:

DeğerAçıklama
MINNe zaman dakika olarak çalıştırılacağı
HOURNe zaman saat olarak çalıştırılacağı
DOMNe zaman ayın günü olarak çalıştırılacağı
MONNe zaman yılın ayı olarak çalıştırılacağı
DOWNe zaman haftanın günü olarak çalıştırılacağı
CMDGerçekten çalıştırılacak komut

Örneğin, dosyaları yedeklemek isteyebilirsiniz. “cmnatic” kullanıcısının “Documents” klasörünü her 12 saatte bir yedeklemek istiyorsanız, aşağıdaki formatı kullanabilirsiniz:

0 */12 * * * cp -R /home/cmnatic/Documents /var/backups/

Crontab’lerin ilginç bir özelliği de wildcard veya yıldız işareti (*) desteğidir. Eğer belirli bir alan için değer sağlamak istemiyorsanız, yani hangi ay, gün veya yıl olduğunu önemsemiyorsanız, sadece her 12 saatte bir çalıştırılmasını istiyorsanız, o alana bir yıldız koyabilirsiniz.

Başlangıçta bu biraz kafa karıştırıcı olabilir, bu yüzden “Crontab Generator” gibi çevrimiçi araçlar kullanarak formatınızı oluşturmak size yardımcı olabilir! Ayrıca “Cron Guru” sitesini de kullanabilirsiniz!

Crontab’ler, crontab -e komutuyla düzenlenebilir ve bir editör (örneğin Nano) seçerek crontab’ınızı düzenleyebilirsiniz.

Soru: Makinedeki crontab ne zaman çalışacak?

Cevap: @reboot

Introducing Packages & Software Repos

Geliştiriciler yazılımlarını topluluğa sunmak istediklerinde, yazılımlarını bir “apt” deposuna gönderirler. Onaylanırlarsa, programları ve araçları kullanıma sunulur. Linux’un en dikkat çekici özelliklerinden ikisi burada kendini gösterir: Kullanıcı erişilebilirliği ve açık kaynak araçlarının değeri.

Bir Ubuntu 20.04 Linux makinesinde ls komutunu kullanarak bu dosyalar gateway/registry olarak işlev görür.

Depoları Yönetme (Ekleme ve Kaldırma)

İşletim Sistemi sağlayıcıları kendi depolarını yönetirken, topluluk depolarını da listenize ekleyebilirsiniz! Bu, işletim sisteminizin yeteneklerini genişletmenizi sağlar. Ek depo eklemek için add-apt-repository komutunu kullanabilir veya başka bir sağlayıcıyı listeleyebilirsiniz. Örneğin, bazı sağlayıcılar, coğrafi olarak daha yakın bir depo sunabilir.

Genellikle, yazılımı Ubuntu sistemimize yüklemek için apt komutunu kullanırız. apt komutu, paketleri ve yazılım kaynaklarını yönetmenize, yazılım yüklemenize veya kaldırmanıza olanak tanıyan paket yönetim yazılımının bir parçasıdır.

Şimdi, yukarıda açıkladığımız add-apt-repository komutunu kullanarak bir depo ekleme ve kaldırma işlemini adım adım gerçekleştirelim. Yazılım yükleme işlemlerini dpkg gibi paket yükleyicileri aracılığıyla yapabilseniz de, apt‘in avantajı, sisteminizi güncellediğinizde eklediğiniz yazılım depolarının da güncellenmesi anlamına gelir.

Bu örnekte, varsayılan Ubuntu depolarında bulunmayan Sublime Text metin editörünü Ubuntu makinemize depo olarak ekleyeceğiz. Yazılım eklerken, indirdiğiniz yazılımın bütünlüğü GPG (Gnu Privacy Guard) anahtarları kullanılarak garanti edilir. Bu anahtarlar, geliştiricilerin yazılımınızı “işte bizim yazılımımız” diyerek sunduğu güvenlik kontrolüdür. Anahtarlar, sisteminizin güvendiği ve geliştiricilerin kullandığı anahtarlarla eşleşmezse, yazılım indirilmez.

Öyleyse, başlayalım. Önce Sublime Text 3’ün geliştiricilerinin GPG anahtarını eklememiz gerekiyor. (Not: TryHackMe örnekleri internete erişim sağlamadığından, bu adımı uygulamanız beklenmez, çünkü başarısız olacaktır.)

  1. GPG anahtarını indirip apt-key ile güvenilir olarak ekleyelim:
   wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
  1. Şimdi bu anahtarı güvenilir listeye ekledik, artık Sublime Text 3’ün deposunu apt kaynak listemize ekleyebiliriz. İyi bir uygulama, eklediğimiz her topluluk/üçüncü taraf deposu için ayrı bir dosya oluşturmaktır.

2.1. /etc/apt/sources.list.d dizininde sublime-text.list adında bir dosya oluşturalım ve depo bilgilerini şu şekilde ekleyelim:

2.2. Ve şimdi Nano veya seçtiğiniz bir metin düzenleyicisini kullanarak Sublime Text 3 deposunu bu yeni oluşturulan dosyaya ekleyin ve kaydedin:

2.3. Bu girişi ekledikten sonra, apt‘in bu yeni girişi tanımasını sağlamak için apt update komutunu kullanmamız gerekiyor.

2.4. Başarıyla güncellendikten sonra, apt install sublime-text komutunu kullanarak eklediğimiz ve güvenilir olarak işaretlediğimiz yazılımı yüklemeye başlayabiliriz.

Paketleri kaldırmak, bu sürecin tersini yapmak kadar kolaydır. Bu işlem add-apt-repository --remove ppa:PPA_Name/ppa komutunu kullanarak veya daha önce oluşturduğumuz dosyayı manuel olarak silerek yapılır. Kaldırdıktan sonra, sadece apt remove [yazılım-adı] komutunu kullanabiliriz; örneğin apt remove sublime-text.


TASK 8 -: Sisteminizi Yönetme: Log’lar

Linux Temelleri Bölüm 1’de günlük dosyalarına ve bunların bulunabileceği yerlere kısaca değinmiştik. Ancak, hızlıca tekrar göz atalım. /var/log dizininde bulunan bu dosya ve klasörler, sisteminizde çalışan uygulama ve hizmetlere ait günlük bilgilerini içerir. İşletim Sistemi (OS), bu günlükleri otomatik olarak yönetmede oldukça iyi hale gelmiştir ve bu işleme “dönüşüm” denir.

Ubuntu makinesinde çalışan üç hizmetten bazı günlükleri özetledim:

Bu hizmetler ve günlükler, sisteminizin sağlığını izlemek ve korumak için harika bir yol sağlar. Ayrıca, bir web sunucusu gibi hizmetlerin günlükleri, her bir isteğe dair bilgi içerir — bu da geliştiricilerin veya yöneticilerin performans sorunlarını teşhis etmelerine veya bir saldırganın etkinliğini araştırmalarına olanak tanır. Örneğin, ilgi çekici iki tür günlük dosyası şunlardır:


Elbette, işletim sisteminin kendisi hakkında ve kullanıcıların gerçekleştirdiği eylemler hakkında bilgi saklayan günlükler de vardır. Örneğin, kimlik doğrulama denemeleri gibi.

  1. Siteyi ziyaret eden kullanıcının IP adresi nedir?

10.9.232.111

  1. Hangi dosyaya eriştiler?

catsanddogs.jpg


GÖREV 9 -: Sonuçlar ve Özetler

Linux Temelleri modülünün sonuna hoş geldiniz. Linux ile etkileşime girdikçe tanışıklığınız artacaktır. Linux, göreceli kolaylıkla çok güçlü şeyler yapma potansiyeline sahiptir (umarım bu modül boyunca bunu keşfetmişsinizdir).

Özetlemek gerekirse, bu odada aşağıdaki konulara giriş yaptınız:

Linux araçları veya yardımcı programlarıyla ilgili diğer TryHackMe odalarında öğrenmeye devam edin, bu ve diğer konular hakkında yazılarımı takipte kalın.


Stay informed with the latest cybersecurity insights and best practices. Subscribe now for exclusive tips and updates

. (socials ).

. (location) .

We would love to here from you

They’ve never learned the most important rule of cyberspace – Computers dont lie but liars can compute.