Linux podstawy

Struktura katalogów

/bin - pliki binarne, wykonywalne, np. ls, cd czy cp

/sbin - pliki binarne, wykonywalne, tylko na uprawnieniach root-a.

/boot - pliki do uruchamiania systemu: jądro, pliki bootloader-a

/dev - lista urządzeń

/etc - pliki konfiguracyjne i ustawienia systemowe

/home - katalogi użytkowników systemu

/lib - biblioteki współdzielone używane przez "programy", pliki wykonywalne z /bin i sbin

/mnt - montowanie dysków, obrazów płyt, innych miejsc storage-u

/opt - katalog na aplikacje od osób trzecich

/proc - system plików z informacjami o procesach aktualnie działających w systemie

/root - pliki użytkownika root

/var - katalog z plikami które często ulegają zmianie np. logi systemowe, strony www, pliki baz danych

/tmp - pliki które usuwane są zawsze podczas restartu systemu

/usr - pliki programów dla użytkowników systemu, pliki samodzielnie kompilowanych programów

Skrypty startowe systemu

/etc/systemd/system/* - pliki ze skryptami startowymi usług

vim /etc/systemd/system/apache.service - przykład

systemctl enable apache.service - podpięcie skryptu do auto uruchamiania

systemctl daemon-reload - przeładowanie i wczytanie podpiętych skryptów

Polecenia

ls - lista plików i katalogów
ls -la - lista plików z szczegółami: data utworzenia, uprawnieniach, właściciel, wielkość w bajtach itp.
ls -la [nazwa-pliku] - informacje tylko o jednym pliku
ls -lah - pokazuje wielkości plików w MB zamiast w bajtach

du -sh [katalog] - pokazuje rozmiar katalogu
du -shc [katalog] - asd

cd - wchodzenie do wskazanej ścieżki, katalogu

../ - ścieżka wstecz o jeden wyżej

touch - tworzenie nowego pliku

cat [nazwa-pliku] - wylistowanie/wypisanie w konsoli zawartości wskazanego pliku
cat [nazwa-pliku] | more - wylistowanie zawartości pliku z możliwością przeglądania/scrolowania

mv - przenoszenie pliku w inne miejsce, zmiana nazwy pliku

mkdir - tworzenie nowego katalogu

cp - kopiowanie pliku

rm - kasowanie wskazanego pliku
-r - rekurencja, kasowanie plików znajdujących się wewnątrz drzewa
-f - wyłączenie pytania o potwierdzenie usunięcia kolejnych plików z wewnątrz

rmdir - usuwanie katalogu z zawartością

which - wskazanie miejsca gdzie znajduje się plik wykonywanego polecenia

wc -l - pokazanie ile plik ma linii

Przekierowanie informacji input/output

0 - standardowy input

1 - standardowy output

2 - błędy z output-u

echo "jakaś informacja" > plik.txt - zapisanie wyniku komendy do wskazanego pliku

echo "jakaś informacja 2" >> plik.txt - dopisanie wyniku komendy do końca wskazanego pliku

ls /root/ 2>> plik.txt - zapisanie błędu z komendy do pliku

cat < plik.txt - przekierowanie danych z pliku jako dane wejścia dla komendy cat

Prawa dostępu do plików i katalogów

Opis

Litera

Znaczenie

Parametr liczbowy

Read

r

Odczyt

4

Write

w

Zapis

2

eXecute

x

uruchomienie

1

-

Brak uprawnień

0

drwxr--r-- 2 jarekteam jarek 0 jan 1 12:00 plik.txt

d jeśli to katalog lub - jeśli to plik. l - link. c - plik specjalny. b - plik specjalny z przypisaniem.
Uprawnienie x na katalogu mówi o tym, że można do niego wejść(zrobić ls).
3 kolejne znaki: rwx - uprawnienia właściciela pliku
3 kolejne znaki: r-- - uprawnienia grupy do której należy plik
3 kolejne znaki: r-- - uprawnienia pozostałych użytkowników systemu
jarekteam - nazwa grupy przypisanej do pliku
jarek - nazwa właściciela pliku

Wartość liczbowa uprawnień

r - 4

w - 2

x - 1

r - 4

w - 2

x - 1

r - 4

w - 2

x - 1

1

1

1

1

0

1

1

0

0

4

2

1

4

0

1

4

0

0

4+2+1 = 7

4+0+1 = 5

4+0+0 = 4

7

5

4

chmod 754 plik.txt - ustawienie uprawnień read/write/execute dla wskazanego pliku dla właściciela, grupy oraz innych użytkowników.

Grupa

Działanie

Uprawnienie

u właściciel

+ dodawanie uprawnienia

r odczyt

g grupa

- odbieranie uprawnienia

w zapisa

o inni użytkownicy

= przypisywanie uprawnienia

x wykonanie

a wszyscy

chmod +x plik.txt - dodanie uprawnień wykonywania dla wszystkich userów
chmod u+x plik.txt - dodanie uprawnień wykonywania dla właściciela pliku
chmod a-w plik.txt - odebranie uprawnień odczytu dla wszystkich
chmod 754 plik.txt - ustawienie uprawnień za jednym razem

Instalacja pakietów

apt - package manager debiana
apt --help - help dla polecenia apt
apt list --installed - lista zainstalowanych pakietów
sudo apt update - pobranie informacji o aktualizacjach pakietów
cat /etc/apt/sources.list - lista źródeł z których pobierane są informacje o pakietach
sudo apt upgrade - uruchomienie aktualizacji pakietów
apt search [nazwa-pakietu] - wyszukiwanie pakietów po nazwie
sudo apt install vim - instalacja pakietu np. vim

Pakowanie plików

zip -er archiwum.zip plik1 plik2 katalog1 katalog2 - spakowanie wskazanych plików o folderów oraz zabezpieczenie archiwum hasłem.
-e - opcja używana do szyfrowania archiwum
-r - opcja używana do rekursywnego dodawania katalogów

unzip archiwum.zip -d ścieżka_docelowa - wypakowanie archiwum do wskazanego katalogu. Użycie bez -d wypakuje zawartość archiwum do miejsca w którym się znajdujemy.

unzip -l archiwum.zip - listuje rzeczy z archiwum bez wypakowywania

tar -cvf archiwum.tar folder/ - spakowanie folderu do archiwum.tar
-c - tworzenie nowego archiwum
-v - wyświetlanie komunikatów z pakowania/rozpakowania
-f - podanie nazwy archiwum
-x - wypakowywanie
-z - kompresja gzip
-j - kompresja bzip2

Pobieranie plików

wget ścieżka-do-pliku-w-internecie - pobieranie publicznego pliku

scp [z] [do] - pobieranie pliku przez ssh
scp -p 1234 jarek@milewski.it:/home/jarek/plik.txt /home/jarek
-r - do pobierania/wysyłania katalogów
-p - podanie portu ssh

Wyszukiwanie plików i katalogów

find [gdzie] -name [nazwa-pliku] - wyszukiwanie pliku, casesensitive
find [gdzie] -iname [nazwa-pliku] - wyszukiwanie pliku bez casesensitive
find [gdzie] -iname "*.txt" - wyszukiwanie plików kończących się na ".txt"
find [gdzie] -size +1M - wyszukiwanie plików powyżej 1MB
find [gdzie] -type d -newer [nazwa-pliku] - wyszukiwanie katalogów nowszych niż podany plik
find [gdzie] -mtime +10 -mtime -13 - wyszukiwanie plików które są starsze niż 10 dni ale nie są starsze niż 13 dni
find ścieżka -name "nazwa" -exec polecenie {} \; - wykonanie polecenia na plikach
find . -name "plik.txt" -exec rm {} \;

Plik z użytkownikami

Plik /etc/passwd

root:x:0:0:root:/root:/bin/bash

root - nazwa użytkownika
x - symbol który reprezentuje zaszyfrowane hasło
0 - identyfikator użytkownika
0 - identyfikator grupy
root - nazwa grupy
/root - katalog domowy
/bin/bash - powłoka z której korzysta user

Procesy

ps - lista procesów
-e - wszystkie procesy w systemie
-f - więcej informacji
-u - wskazanie użytkownika
-eH - zrobienie drzewa z procesów

kill -9 [PID] - ubijanie procesu

pstree - lista procesów w formie drzewa

top, htop, gtop - lista aktywnych procesów

ctrl+c - ubicie procesu w terminalu

ctrl+z - zatrzymanie procesu w terminalu
fg - ponownie uruchomienie procesu

Dodanie & na końcu powoduje uruchomienie procesu w tle

jobs - pokazuje jakie procesy działają w tle
fg [num] - podłączenie się do wskazanego procesu w tle
bg [num] - ponowne uruchomienie procesu do p[racy w tle
ps -ef | grep [nazwa-procesu] - wyszukiwanie procesu

Zarządzanie kluczami ssh

ssh-keygen -t rsa - generowanie kluczy
cat id_rsa.pub | ssh user@server 'cat >> ~/.ssh/authorized_keys' - wysłanie klucza na inny serwer

vim /etc/ssh/sshd_config - edycja ustawień ssh, np. zmiana portu
systemctl restart ssh.service - restart usługi ssh

sudo passwd -d nazwa_uzytkownika - zablokowanie użytkownikowi możliwości logowania się po haśle

Wyszukiwanie po zawartości plików

grep "[regex]" [katalog/plik] - wyszukiwanie regexa
np. grep "^abc" /home/jarek/plik.txt - wszystkie linijki zaczynające się od abc
-n - pokazanie linii w której znalazło się to czego szukamy
-v - wylistowanie co nie pasuje do wskazanego regexa
-i - ignorowanie wielkości znaków
-c - wyświetlenie tylko liczby wystąpień

ps -ef | grep [nazwa-procesu] - wyszukiwanie procesu

Przeszukiwanie logów

tail - wyświetlenie ostatniej linijki z pliku
-n [num] - wyświetlenie ostatnich X linii z pliku
-f - śledzi zmiany w pliku i podaje je w czasie rzeczywistym
head - to samo co tail tylko dla początku pliku

awk - przeszukiwanie plików o określonym formacie

-F <separator> lub --field-separator=<separator>: Określa separator pól w wejściowych danych. Domyślnie jest to spacja. Przykład: awk -F, '{print $1}' file.csv - używa przecinka jako separatora pól i wyświetla pierwsze pole każdego wiersza pliku file.csv.

-v <zmienna>=<wartość>: Definiuje zmienną awk i przypisuje jej wartość. Przykład: awk -v name="John" '{print "Hello,", name}' data.txt - wyświetla "Hello, John" dla każdego wiersza pliku data.txt.

NR: Reprezentuje numer bieżącego rekordu (wiersza). Przykład: awk 'NR > 1' data.txt - wyświetla wszystkie wiersze pliku data.txt, z pominięciem pierwszego wiersza.

NF: Reprezentuje liczbę pól w bieżącym rekordzie (wierszu). Przykład: awk 'NF > 3' data.txt - wyświetla wszystkie wiersze pliku data.txt, które mają więcej niż 3 pola.

BEGIN i END: Specjalne bloki BEGIN i END, które są wykonywane na początku i końcu przetwarzania pliku, odpowiednio. Przykład: awk 'BEGIN{print "Start"} {print $1} END{print "Finish"}' data.txt - wyświetla pierwsze pole każdego wiersza pliku data.txt, a na początku i końcu wyświetla "Start" i "Finish".

FILENAME: Zmienna zawierająca nazwę bieżącego przetwarzanego pliku. Przykład: awk '{print FILENAME, $0}' file1.txt file2.txt - wyświetla nazwę pliku, a następnie całą zawartość każdego wiersza plików file1.txt i file2.txt.

-i inplace lub --inplace: Edytuje plik wejściowy na miejscu, bez konieczności tworzenia pliku tymczasowego. Przykład: awk -i inplace '{gsub("foo", "bar"); print}' file.txt - zamienia każde wystąpienie "foo" na "bar" w pliku file.txt.

Sprawdzanie otwartych portów - nmap i netstat

nmap - skanowanie portów

-p <porty>: Określa skanowane porty lub zakresy portów. Przykład: nmap -p 80,443,8080 target - skanuje tylko porty 80, 443 i 8080 na celu o nazwie "target".

-A lub --all: Włącza intensywne skanowanie, które zawiera skanowanie portów, skanowanie systemu operacyjnego i skanowanie wersji usług. Przykład: nmap -A target - wykonuje intensywne skanowanie na celu o nazwie "target".

-sV lub --version-all: Skanuje usługi, aby zidentyfikować ich wersje. Przykład: nmap -sV target - wykonuje skanowanie wersji usług na celu o nazwie "target".

-sS lub --syn: Wykonuje skanowanie SYN, które jest najczęściej używane do skanowania portów w celu wykrycia otwartych usług. Przykład: nmap -sS target - wykonuje skanowanie SYN na celu o nazwie "target".

-oX <plik> lub --xml <plik>: Zapisuje wyniki skanowania w formacie XML. Przykład: nmap -oX results.xml target - zapisuje wyniki skanowania na celu o nazwie "target" w pliku "results.xml".

-T<0-5>: Określa tryb czasowy skanowania, gdzie 0 to tryb najwolniejszy, a 5 to tryb najbardziej agresywny. Przykład: nmap -T4 target - wykonuje skanowanie na celu o nazwie "target" z trybem czasowym 4.

-v lub -vv: Włącza tryb verbose, który wyświetla bardziej szczegółowe informacje o skanowaniu. Przykład: nmap -v target - wykonuje skanowanie na celu o nazwie "target" w trybie verbose.

--script <nazwa_skryptu>: Uruchamia określony skrypt nmap dla dodatkowej analizy i testowania. Przykład: nmap --script http-enum target - wykonuje skrypt http-enum na celu o nazwie "target".

-O lub --osscan-limit: Wykonuje skanowanie systemu operacyjnego, próbując zidentyfikować system operacyjny na podstawie odpowiedzi hosta. Przykład: nmap -O target - wykonuje skanowanie systemu operacyjnego na celu o nazwie "target".

netstat

neststat -plnt - wylistowanie otwartych portów na maszynie na której się znajdujemy
- z sudo pokaże name info jakie programy są uruchomione na danym porcie