Blog (18)
Komentarze (134)
Recenzje (0)
@themamuthJak trwoga to do „boga" cz. 3 - LDAP, bash

Jak trwoga to do „boga" cz. 3 - LDAP, bash

27.07.2016 16:42, aktualizacja: 17.08.2016 12:44

Na początku za wszystko chciałbym podziękować rodzinie i akademii...

Niestety życie to nie film, nie jest łatwe. Często po wielu bojach i wyzwaniach nie czeka nas nic innego jak kolejna potyczka i zmagania. Po dwóch wpisach przyszedł czas na otwarcie pieczęci i wypuszczenia na świat czterech jeźdźców apokalipsy

[youtube=https://www.youtube.com/watch?v=KSymAAFF39A] Zanim przystąpimy do gry ponownie poukładajmy pionki na naszej szachownicy.

Szachy czarodziejów

W poprzednich wpisach dokonaliśmy instalacji DNS, skonfigurowaliśmy też w domyślnej startowej konfiguracji serwer LAMP (Linux, Apache2, MySQL, PHP). Zainstalowaliśmy nakładkę phpMyAdmin na silnik baz danych która, znacznie ułatwiła nam tworzenie i edycję danych. Całą konfigurację sprawdziliśmy zakładając użytkownika i bazę w wyżej wymienionej platformie. Zainstalowaliśmy Joomla która, już w "pełni" wykorzystywała wszystkie cztery procesy działające na naszej wirtualnej maszynie. Po tej bitwie oprócz potu, łez i krwi pozostałą Ci jedynie duma i zachwyt że, udało Ci się przebrnąć przez te trzy laboratoria.

A co jeśli powiem Ci że, to co do tej port zrobiłeś jest nic nie warte.

598470
Spokój, spokój cisza na sali. Skąd ten bunt, ja się pytam? Skąd ten bunt?
Spokój, spokój cisza na sali. Skąd ten bunt, ja się pytam? Skąd ten bunt?

Wykonana praca jest warta - zaliczenia. Warta jest też merytoryczna wiedza którą, tu zdobyłeś.

Teraz pewnie drogi czytelniku trochę Ci namieszałem. Raz mówi że, nie warte raz że warte? O co tu chodzi?

Zadajmy sobie fundamentalne pytanie. Czy tak skonfigurowany serwer byłbyś w stanie wystawić na światło dzienne zwane internetem? Odpowiedz powinna być natychmiastowa i jedna słuszna. NIE!

Wspominałem już kilkukrotnie że, prezentowane tu środowisko jest środowiskiem testowym a nie środowiskiem produkcyjnym. Same silne hasła nie wystarczą na to by oprzeć się naporowi ogromnej fali którą, jest internet. A w wodzie tej pełno jest wygłodniałych ryb które, tylko czekają by dorwać się do twojego akwenu którym, jest twoja wewnętrzna infrastruktura IT.

Dzięki użytkownikowi NieGooglujMnie mogę mój wpis uzupełnić o bardzo ważną kwestię jaką jest bezpieczeństwo. Jednak nie będzie to wpis, bynajmniej w tym wpisie o tym jak to zrobić. Ale pozostawię tu mały ślad który, warto zbadać:

SSH

  • http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html
  • https://feeding.cloud.geek.nz/posts/hardening-ssh-servers/
  • https://askubuntu.com/questions/2271/how-to-harden-an-ssh-server

Apache2

  • http://www.tecmint.com/apache-security-tips
  • https://geekflare.com/apache-web-server-hardening-security/

MySQL

  • https://www.upguard.com/articles/top-11-ways-to-improve-mysql-security

PHP

  • http://www.phptherightway.com/

LInux

  • https://www.debian.org/doc/manuals/securing-debian-howto/

Pamiętaj:

Bezpieczeństwa systemów informacyjnych nie należy traktować jako jednorazowe przedsięwzięcie, ale jako proces, który powinien być modyfikowany wraz z pojawiającymi się zmianami w otoczeniu wewnętrznym i zewnętrznym organizacji.

- Ryszard Borowiecki, Mirosław Kwieciński (red.), Monitorowanie otoczenia : przepływ i bezpieczeństwo informacji. w stronę inteligencji przedsiębiorstwa, Zakamycze, Kraków 2003, ISBN: 83‑7333-246-4

Czterech jeźdźców apokalipsy

Lightweight Directory Access Protocol bo takie jest rozszerzenie skrótu (LDAP) jest protokołem przeznaczonym do korzystania z usług katalogowych, bazujący na standardzie X.500. Jest to również nazwa usługi katalogowej pozwalającej na wymianę informacji za pośrednictwem TCP/IP. Wykorzystywany jest praktycznie w adresacji sieci Internet/Intranet w celu zapewnienia niezawodności, skalowalności i bezpieczeństwa danych. W odróżnieniu od X.500 nie potrzebuje ani szerokiego pasma, ani dużej mocy obliczeniowej. Ponieważ pracuje w oparciu o protokół TCP/IP (które działa tylko w warstwie transportowej modelu OSI), daje niezwykle szybkie odpowiedzi na żądania zgłaszane przez klienta. Dane grupowane są w strukturze przypominającej drzewo katalogów. Każdy obiekt jest jednoznacznie identyfikowany poprzez swoje położenie w drzewie, tzw. Distinguished Name (DN).

Laboratorium 3

Do zabawy z LDAP będziemy potrzebować doinstalować do naszego Serwera Ubuntu kilka pakietów:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install slapd ldap-utils

Instalacja tych pakietów wymaga interakcji z użytkownikiem tak jak było to w przypadku instalacji MySQL i phpMyAdmin. W pierwszym oknie nadajemy hasło dla użytkownika administracyjnego LDAP - nie mylić z użytkownikiem administracyjnym systemu operacyjnego.

Konfiguracja pakietu slapd - hasło dla konta admin
Konfiguracja pakietu slapd - hasło dla konta admin

W oknie tym tak jak już wspomniałem nadajemy hasło dla użytkownika admin LDAP.

Konfiguracja pakietu slapd - powtórzenie hasła dla konta admin
Konfiguracja pakietu slapd - powtórzenie hasła dla konta admin

Powtarzamy hasła dla użytkownika admin.

Wykorzystując polecenie konfiguracji pakietu uruchamiamy konfigurację pakietu slapd poleceniem:

sudo dpkg-reconfigure slapd
598503

Re‑konfigurator zapyta nas się czy "Po włączeniu tej opcji , nie zostanie utworzona żadna wstępna konfiguracja lub bazy danych dla Ciebie. Czy Pominąć konfigurację serwera OpenLDAP" odpowiadamy wybierając opcje "Nie" gdyż zależy nam na skonfigurowaniu LDAP.

598505

Konstruujemy bazowy wpis DN dla LDAP wpisując DNS domain name lab.pl

598507

Podajemy nazę organizacji tu tez wpiszmy lab.pl

598509

Ustawiamy hasło dla administratora LDAP

598511

Potwierdzamy hasło poprzez wpisanie takiego samego hasła jak w punkcie poprzednim

598513

Wybieramy database backend poprzez wybranie opcji HDB. Więcej informacji o backendach znajdziecie tutaj:

598516

Na pytanie czy ma usunąc bazę odpowiadamy "Nie".

598518

Starą konfiguracje i bazę przenosimy poprzez wybranie opcji "Tak".

598520

Uruchamiamy protokuł w wersji LDAPv2

Zmieniamy wpis BASE usuwając znak # i poprawiamy tak by odpowiadał pod nasza domenę dc=lab,dc=pl. Zmieniamy też wpis URL usuwając znak # i poprawiamy wpis by wskazywał na localhost ldap://localhost wszystkie zmiany robimy w pliku /etc/ldap/ldap.conf

sudo nano /etc/ldap/ldap.conf
598524

Po konfiguracji LDAP, otwieramy przeglądarkę i pobieramy oprogramowanie JXplorer do przeglądania struktury LDAP

598526
598527

Naciskamy Connection z górnego menu.

598529

Potem w oknie Open LDAP/DSML Connection ustawiamyn odpowiednio

  • pole Host na adres IP serwera,
  • pole port na 389,
  • pole protocol na LDAP v3,
  • pole Base DN na cd=lab,dc=pl.

W sekcji Security

  • pole Level wybieramy opcję User + Password,
  • w polu User DN wpisujemy cn=admin,dc=lab,dc=pl,
  • w polu Password wpisujemy podane wcześniej haslo.
  • Po przyciśnięciu przycisku OK zostanie nawiązane połączenie.
598534
598535

W oknie głównym aplikacji po lewej stronie otworzy nam się drzewo LDAP gdzie po kliknięcie w gałąź lab, będziemy mogli dodać nowego użytkownika przez prawo klik na wpisie lab i wybranie z menu podręcznego opcji New.

598537

W nowo otwartym oknie konfigurujemy odpowiednio

  • pole, Parent DN powinno zawierać wpis dc=lab,dc=pl,
  • pole Enter RDN powinno zawierać cn=user1.

Z pola selekt box zatytułowanego Available Classes wybieramy i przenośimy do Selected Classes klasy typu

  • simpleSecurityObject
  • top
  • percon
  • posixAccount

Taką konfiguracje na koniec potwierdzamy przyciskiem OK.

598543
598544

W oknie głownym teraz w elemencie Table Editor bedziemy mieli mozliwośc wprowadzenia ustwień dla usera1. Odpowiednio usupełniamy:

  • gidNumber wartościa 100
  • homeDirectory wartościa /home/user1
  • sn - jest to pole opisu.
  • uid wartośc user1
  • uidNumber wartość 10001
  • userPassword - podajemy hasło dla naszego user1

na sam koniec zmiany zatwierdzamy przyciskiem submit

598548

Tak o to mamy dodanego użytkownika user1 do struktury LDAP. Możemy teraz odłączyć się od LDAP w programie i przechodzimy z powrotem do konsoli terminala putty.

598550

Testujemy działanie komendy:

 ldapsearch -x -LLL

Komenda tam powinna nam zwrócić to co przedstawia obrazek powyżej.

598554

Po rozszerzeniu polecenia o parametr uid=user1 otrzymamy informacje o użytkowniku user1.

ldapsearch -x -LLL uid=user1

Po skonfigurowaniu jak powyżej środowiska LDAP i sprawdzeniu że wszystko działa możemy przejść do kolejnego laboratorium.

Laboratorium 4

Wykorzystując edytor nano utwórzmy nowy plik w którym umieścimy kod BASH do tworzenia nowych użytkowników. Przydatne polecenia z którymi warto się zapoznać:

ldapsearch – przeszukiwanie LDAP
cut – wybór lub cięcie tekstu
grep – delektowanie wyświetlania
tr – translacja danych (zmiana wielkości liter, zamiana znaków, itp.)
echo – wyświetlanie na ekranie
read – czytanie ze standard IO do zmiennej tekstu
if – wykonanie warunkowe
sort – sortowanie danych
head – odczytanie informacji od początku ileś linii
ldapmodify – wprowadzanie zmian do LDAP
chmod – zmiana uprawnień do obiektu
chown – zmiana właściciela obiektu
mkdir – tworzenie katalogu

Przykładowy kod BASH do czytania parametru do programu oraz danych w programie

#!/bin/bash
echo "Podaj dane i zakoncz ENTER:"
read dane
echo „Wprowadzono dane: ” $dane

Zmiana uprawnień:

chmod +x nazwa_pliku

Przykład wywołania:

./nazwa_pliku

Przygotujmy program pozwalający utworzyć użytkownika w LDAP na podstawie 3 danych:

  • Imienia
  • Nazwiska
  • Hasła

Na podstawie tak zdobytych danych utworzymy nazwę użytkownika. Konto powinno zawierać 1 literę imienia i całe nazwisko (np. jkowalski). Nazwa konta powinna być z małych liter. Powinno mieć następny numer UID (następny wolny powyżej 10000)

Przykład pobierania ostatniego UIDNumber z LDAP (największa wartość)

zmienna=$(ldapsearch -x -LLL uidnumber | grep "uidNumber" | cut -d" " -f2 | sort -n -r | head -1)
echo $zmienna
zmienna=$[$zmienna+1]
echo $zmienna

Powinno mieć przypisany katalog domowy w /home/nazwa_użytkownika. Powinien zostać utworzony taki właśnie katalog na dysku wraz z przypisaniem uprawnień chmod i chown. Katalogi użytkownika powinny być tworzone dopiero po poprawnym wykonaniu zakładania konta w LDAP. Do sprawdzenie poprawności wykonania poprzedniej komendy służy zmienna $? I można sprawdzić poleceniem if :

if [ "$?" = "0" ]
then
polecenie_1
polecenie_2
polecenie_3
fi

Tworzenie katalogu, zmiana uprawnień i zmiana właściciela:

mkdir /home/katalog_użytkownika
chmod 700 /home/katalog_użytkownika
chown $zmienna:100 /home/katalog_użytkownika

Hasło jest w polu LDAP o nazwie „userpassword” Polecenie dodawania użytkownika po utworzeniu danych wsadowych ldif w pliku

ldapmodify  -a -x -D cn=admin,dc=lab,dc=pl -W -f nazwa_pliku

Przykłady kodów BASH. Czytanie ze standard IN (wprowadzanie danych do skryptu) z wyświetlaniem ich

read nazwisko
echo $nazwisko
echo -n "Podaj nazwisko: "
read nazwisko
echo "Wprowadzono: "$nazwisko

Zapisanie informacji do pliku w trybie "nadpisywania danych"

echo "dn: $user,dc=lab,dc=pl" > /root/katalog/plik

Zapisanie informacji do pliku w trybie "doklejania danych"

echo "uid: "$LoginName >> /root/katalog/plik
echo "userpassword: "$UserPassword >> /root/katalog/plik

Zamiana znaków (duże na małe)

zmienna=$(echo $zmienna1 | tr [:upper:] [:lower:])

Wycięcie jednej litery z ciągu

litera=$(echo $imie | cut -c 1)

A tak prezentuje się skrypt w całośći:


#!/bin/bash

####################################################################################
#                        Skrtpt dodający LDAP made by TheMamuth                    #
#               ver 1.0                                                            #
#                                                                                  #
#               uzywajcie i korzystajcie :)                                        #
#                                                                                  #
#                                                                                  #
####################################################################################

# begin

# -- Poprosimy użytkownika o imię
echo -n "PODAJ SWOJE IMIĘ: "
read imie

# -- Poprosimy użytkownika o nazwisko
echo -n "PODAJ SWOJE NAZWISKO: "
read nazwisko

# -- Teraz wyswietlmy użytkownikowi jego wprowadzone dane
echo " "
echo "##############################################################################"
echo "WPROWADZIŁEŚ IMIE: " $imie "ORAZ NAZWISKO: " $nazwisko
echo "##############################################################################"
echo " "

echo -n "PODAJ OPIS DLA TWOEJEGO KONTA: "
read opis
echo " "

# -- Jak można już zauważyć,  polecenie echo wyświetla wprowadzone dane miedzy cudzysłowami
# -- read to kontener na zmienną -> read <nazwa_zmiennej>

# -- Teraz pobierzmy hasło od naszego użytkownika które, chce używać do logowania w ldap
echo -n "PODAJ HASLO DO LDAP:"
read -s haslo
echo " "

# -- teraz według polecenia mamy zmienić wszystkie duże litery na małe w imieniu i nazwisku
imie=$(echo $imie | tr [:upper:] [:lower:])
nazwisko=$(echo $nazwisko | tr [:upper:] [:lower:])

# -- teraz należy pobrać pierwsza literę imienia i dokleić ja przed nazwiskiem
litera=$(echo $imie |cut -c 1)
username=$litera$nazwisko

# -- teraz należy z pobranych danych utworzyć plik który, posłuży nam jako wpis dodający usera, wzorujemy się na tym co utworzyliśmy w poprzednim
# -- labie.

#-- pobranie uidnumber
uidnumber=$(ldapsearch -x -LL uidnumber | grep "uidNumber:" | cut -d" " -f2 | sort -n -r | head -1)
echo "OSTATNI uidNumber TO: " $uidnumber
#-- zwiększenie uidnumber, bo nie może się powtarzac
uidnumber=$[$uidnumber+1]
echo "NOWY uidNumber TO: " $uidnumber

#-- pobranie gidnumber
gidnumber=$(ldapsearch -x -LL gidnumber | grep "gidNumber:" | cut -d" " -f2 | sort -n -r | head -1)
echo "gidNumber to: " $gidnumber
echo "Login to: " $username

# -- pobralismy potrzebne nam zmienne czas teraz na utworzenie pliku
echo "dn: cn="$username",dc=lab,dc=pl" > ldap.txt
echo "cn: "$username >> ldap.txt
echo "gidNumber: "$gidnumber >> ldap.txt
echo "homeDirectory: /home/"$username >> ldap.txt
echo "objectClass: simpleSecurityObject" >> ldap.txt
echo "objectClass: person" >> ldap.txt
echo "objectClass: posixAccount" >> ldap.txt
echo "objectClass: top" >> ldap.txt
echo "sn: "$opis >> ldap.txt
echo "uid: "$username >> ldap.txt
echo "uidNumber: "$uidnumber >> ldap.txt
echo "userpassword: "$haslo >> ldap.txt

# -- polecenie dodające usera do ldap
ldapmodify -a -x -D cn=admin,dc=lab,dc=pl -W -f ldap.txt

# -- tworzymy warunek który sie wykona jeżeli powyższe polecenie nie zglosi bledu;
if [ "$?" = 0 ]; then
        # -- Tworzymy katalog;
        mkdir /home/$username
        # -- Nadajemy uprawnieni;
        chmod 700 /home/$username
        # -- Zmieniamy właściciela;
        chown $uidnumber:100 /home/$username
 # -- Komunikat;
        echo "Wszystko wukonane - if"
fi

# end;

Skrypt zapisujemy i tak zapisanemu pliku nadajemy uprawnienia

chmod +x <nazwa_pliku>

aby go wykonać.

./<nazwa_pliku>

Uruchommy nasz skrypt i dodajmy nowego użytkownika LDAP. Po poprawnym dodaniu możemy przejść do kolejnego ćwiczenia.

Uwaga: Skrypt nie jest idealny a jedynie spełnia założenia ćwiczenia - możesz go ulepszyć dodając weryfikacje hasła, kontrolę wpisywanych wartości itp.

Laboratorium 5

Uruchamiamy integrację systemu operacyjnego z LDAP. W tym celu musimy zainstalować kilka dodatków rozszerzających.

sudo apt-get install libnss-ldap

W trakcie instalacji system poprosi o podanie danych pozwalających na przyłączenie się do LDAP (podaj adres 127.0.0.1):

598615

Wpisujemy adres ldap://127.0.0.1

598617

Wpisujemy dc=lab,dc=pl

598619

Wersje LDAP wybieramy 3

598621

Wybieramy opcje TAK

598623

Wybieramy opcje TAK

598625

Wpisujemy cn=admin,dc=lab,dc=pl

598627

Podajemy hasła dla konta głównego LDAP

598629

Wpisujemy cn=admin,dc=lab,dc=pl

598631

Podajemy hasło

598633
598634

Zmieniamy ustawienia w pliku "/etc/ldap/ldap.conf" usuwamy znak komentarza w pozycji scope sub oraz pam_password clear

598636

W pliku /etc/nsswitch.conf dopisujemy do sekcji passwd, group, shadow, słowo ldap.

Laboratorium 6

To laboratorium jest uwieńczeniem sukcesu, naszych zmagań z poprzednimi trzema laboratoriami. Wystarczy tylko zrestartować ldap ssh i zalogować się na użytkownika ldap.

sudo /etc/init.d/libnss-ldap restart && sudo /etc/init.d/ssh restart

.Gratulację :).[youtube=https://www.youtube.com/watch?v=KSymAAFF39A]

P.S. Rozwiązanie zagadki z poprzedniego laboratorium - by ze zdalnego komputera (komputer z którego będziesz wyświetlał stronę www) móc połączyć się po adresie http://lab.lokalne/ należy wpisać w ustawieniach danych o serwerach DNS, adres serwera DNS który, jest jednocześnie adresem IP naszej maszyny wirtualnej.

Wybrane dla Ciebie
Komentarze (6)