Ferex Blog

czyli coś o niczym

Przemyślenia dotyczące Mikrusa

Napisano przez Ferex dnia 07-07-2019

Ostatnie notki z tego co widzę podobały się i nie tylko mnie, ale także Unknow wstawił je do panelu Mikrusa.
Chyba wiadomo, że musi wtedy wejść następna?

Mikrusie, ja wracam!

Kto zna braci Wysockich ten zna, ten też powinien wiedzieć, że Michał wraz ze mną przygotował obrazy pod Mikrusa. Osobiście także mam posklejane kilka, ale z jednego jestem dumny, a zwłaszcza z tego poniżej:


Jest to obraz który ma zainstalowany Xorg, xRDP (tak, działa tak, że można podłączyć się do niego jak do pulpitu zdalnego), edytor tekstu leafpad, program Megasync, menedżer plików PCManFM, oraz jeszcze GCC, WeeChat, oraz irssi, dzięki czemu jakby ktoś chciał to może pisać programy w języku C oraz pisać na czacie IRC.

Pewnie możecie zastanawiać się dlaczego taki obraz zrobiłem? Postanowiłem że stworzę jakiś gotowy obraz OpenVZ który będzie taką podstawką dla tych co chcą się uczyć, a to dlatego, że zauważam, że terminal strasznie odstrasza wiele osób i woleliby tryb graficzny, a że Windows taki ma to super, biorę Windowsa - niestety, nie tędy droga, Linux też to posiada!
Dodatkowo ten obraz posiada program Megasync i mając konto na chmurze MEGA można wrzucać sobie kopie zapasowe albo pliki które się zrobiło, bo np. weźmy pod uwagę awarię, padnie coś no i będzie trzeba reinstalację zrobić - ale obraz zawsze będzie taki sam i zawsze będzie można na szybko wszystko odtworzyć. O Michale Wysockim wspomniałem dlatego, że wraz z nim zrobiliśmy obrazy małych serwerów WWW, ja na Devuanie, on zaś na Alpine.
Dlaczego o tym wspominam? Właśnie dlatego, że jeśli komuś zależy na nauce pisania stron www to proszę bardzo, od wyboru do wyboru, albo lekkie Alpine


albo Devuan


weźcie też pod uwagę, że obraz Alpine pokazany wyżej nie posiada serwera MySQL dlatego tak mało waży, ale dla chętnych jest także z MySQL


Wszystko zostało stworzone po to by każdy kto chciałby się uczyć miał narzędzia do tej nauki, dlatego też dla przykładu powstał współdzielony serwer www z obsługą php, współdzielona mała baza mysql, dzięki którym można spokojnie wykorzystywać dla przykładu mój obraz i mieć na tym w dodatku stronę www! Ciekawe co nie? Odpowiednio sformułowane .htaccess i możecie dzielić się z innymi osobami swoimi plikami

Tak na wstępie do dalszej części

Widzieliście wyżej zrzut ekranu z pulpitu mojego obrazu co nie? To dobrze. Powinniście też wiedzieć, że ma tam zainstalowane wszystkie rzeczy niezbędne do dalszej nauki. Czy może ktoś z Was w takim razie widział taką grę jak CLMystery?

Na temat CLMystery wspominam dlatego, że ta "gra" to chyba najszybszy sposób zrozumienia co mam na myśli. Wyobraź sobie czytelniku, że masz 50000 linijek tekstu który masz przeczytać w 3 godziny i rozwiązać jakąś tam zagadkę. Dasz radę to zrobić w 3 godziny?! Wątpię, bo to jednak 50000 linijek, a Ty na to nie masz czasu. Dlatego jest właśnie taka gra by pokazać jak za pomocą takich narzędzi jak grep, awk, head, more, cat, wydobyć z tekstu to co się chce. Przykład? Mamy dajmy tekst, 50000 linijek, wiemy, że szukamy słowa dla przykładu "słyszał" i chcielibyśmy wiedzieć co jest dwie linie po oraz przed tym słowem, więc piszemy:

cat /sciezka/do/pliku.txt | grep "słyszał" -B 2 -A 2

Wyrażenie -B znaczy "before" czyli przed, zaś -A znaczy "after" czyli po.
Teraz chciałbym zobaczyć przykładowo duży plik, ale interesuje mnie tylko jego początek i to w dodatku pięć pierwszych linijek, więc piszemy:

cat /sciezka/do/pliku.txt | head -n 5

Proste?
Wybrałem sobie z logów takie o to coś

lut 08 02:07:32 miamivice.andrzejszczepaniak.co.uk sshd[22337]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=223.111.139.244 user=root

Taki niby log, ale jest problem z wybraniem jednak adresu IP, bo co jeśli chcielibyśmy przelecieć cały dziennik i wybrać tylko i wyłącznie sam adres IP bez słówka "rhost=". Są na to dwa sposoby:
- albo wrzucamy rhost=**** (gdzie **** to adres IP) i usuwamy wszędzie słówko "rhost="
- albo używamy awka

Jak? Bardzo prosto, budujemy pewne wyrażenie które pomoże wybrać nam co chcemy, np.

cat /sciezka/do/logu/plik.txt | grep rhost | awk -F 'rhost=' '{print $2}' | awk -F ' ' '{print $1}'

Najpierw wychwytujemy samo wyrażenie "rhost=", a później wybieramy adres IP. Zakładamy także że coś będzie po adresie IP, więc zabezpieczam się tym, że jeżeli pojawi się spacja po adresie IP to wybierz tylko adres IP czyli kolumnę numer 1.
Tak, awk manewruje po kolumnach, ale można to też zmienić, choć jest to ułatwienie bo mamy tekst np.
Basia Nijaka
Dla awk słówko "Basia" to kolumna numer jeden, zaś "Nijaka" kolumna numer dwa i teraz wiedząc o tym można bardzo fajnie manewrować po tekście i wybierać co się chce. Odsyłam także do poradnika tutaj -> klik!

Jakby ktoś chciał spróbować i przyswoić sobie budowanie prostych skryptów w bashu to polecam zagrać w tą grę, a jeśli ktoś posiada na swoim serwerze vps ten obraz to katalog z grą jest w /root/Pulpit/clmystery

Dobra, chcę programować, w czym to robić?

W czym? Rzuć okiem na aplikację vim. U Ciebie na obrazie powinien być tak skonfigurowany vim, że powinien pokazywać numer linijki, przy rozszerzeniu pokaże kolorowanie składni, oraz możesz klikać myszką w dowolny fragment kodu, czy tekstu i go od razu poprawić.
Pokazać Wam magię? To patrzcie:



Wcisnąłem klawisz F8 i z automatu wykonał komendę gcc nazwapliku.c && ./nazwapliku, tylko potrzebne jest to abyście zapisali najpierw plik np. w miejsce /sciezka/do/pliku/plik.c i potem otworzyli ten plik vimem, to wtedy zadziała. Jak to zrobiłem? Patrzcie na to:

map :w :!gcc % -o %< && ./%<

Zmapowałem sobie do konfiguracji vim klawisz F8, który ma wykonać komendę którą ja chcę - dlatego vim jest świetny na początek bo można sobie zmapować wiele klawiszy, po swojemu i mieć jaki jakby "Visual Studio Code" ale w wersji terminalowej Jak już zdążył ktoś zauważyć, składnia jest błędna
Nadal ktoś uważa, że nie można zacząć nauki na linuxie? Właśnie po to powstał Mikrus, by uczyć!

Napisałem na temat chmury MEGA, ale warto też szyfrować swoje dane!

Dlatego też macie prostą instrukcję jak kodować takie pliki

openssl genrsa -out key.pem 4096
openssl rsa -in key.pem -out key.pub -pubout
openssl rsautl -in plik-odkodowany -out plik-zakodowany.enc -pubin -inkey key.pub -encrypt
openssl rsautl -in plik-zakodowany.enc -out plik-odkodowany -inkey key.pem -decrypt

Pierwsza komenda tworzy klucz który będzie służyć do szyfrowania danych, drugi natomiast tworzy klucz publiczny z klucza prywatnego. Trzecia i czwarta komenda to komendy na zaszyfrowanie pliku i odkodowanie pliku. Jak zauważyliście, nawet już opisałem który to który, więc będzie łatwo Wam teraz takie dane szyfrować.

Ktoś mógłby się teraz czepić - dlaczego wszystko komendami i poleceniami, ja chcę wszystko okienkowo! - niestety, tutaj pierwsze akuku!
Chcesz okienkowo? A jak powiesz konsolowo aplikacji okienkowej by coś wykonała? Jeżeli masz sobie robić codziennie backupy to weź może pod uwagę, że chyba nie stworzysz skryptu który będzie odpalać aplikację z okienka i na niej działać bo tak się nie da, dlatego lepiej wszystko robić komendami bo teraz można napisać prosty skrypt kopii zapasowych, a później nawet napisać skrypt który czyści co ileś czasu te dane by na chmurze nie zabrakło miejsca.
Chyba lepiej jednak wszystko mieć oskryptowane?

#!/bin/bash
now=$(date +"%m_%d_%Y")
tar -czvf /tmp/archiwum.tar.gz plik1 plik2 /katalog/jakis /katalog/jakis2 /plik/gdzies/daleko
openssl rsautl -in /tmp/archiwum.tar.gz -out /tmp/archiwum_$now.enc -pubin -inkey /lokalizacja/klucza/key.pub -encrypt
mv /tmp/archiwum_$now.enc /katalog/gdzie/mega/synchronizuje/dane
rm /tmp/archiw*

Oczywiście klucz prywatny zalecam nie trzymać na Mikrusie, lecz gdzieś na komputerze, mailu (o ile macie włączoną podwójną weryfikację czyli 2fa), bądź na pendrive, by w razie czego nikt nie miał dostępu do klucza prócz Was i by był on bezpieczny. Klucz publiczny możecie trzymać spokojnie na Mikrusie bo służy on tylko do zaszyfrowania danych, lecz do odszyfrowania trzeba podać klucz prywatny, stąd ważne by był on bezpieczny. Wyżej macie na szybko napisany schemat skryptu tworzenia kopii zapasowych, a skoro macie już taki schemat to czas by coś go wykonywało dzień w dzień, czyż nie?

Cron!

Cron to taki program który wykonuje zlecone przez nas, raczej napisane przez nas zadania, o porze o której mu podamy. Przyjmijmy, że chcemy by kopia odbywała się codziennie dla przykładu o 3 w nocy, więc do crona powinniśmy wpisać takie o to coś:

0 3 * * * /lokalizacja/skryptu/kopii-zapasowych.sh

Proste? Proste
Pozostaje jeszcze pytanie gdzie to wstawić, a mniej więcej tu:

crontab -e

Otwieracje edytor crontaba i wpisujecie to co powyżej. Po zamknięciu edytora cron wczyta tą regułkę i będzie codziennie o 3:00 uruchamiał skrypt który mu podacie.

Małe podsumowanie

Na sam koniec chyba najlepszym zdaniem będzie to, że mało kto docenia możliwości Linuxa i możecie wierzyć mi bądź nie, ale serwery VPS to najlepsza chyba rzecz jaka istnieje, a dlaczego?
Wyobraźcie sobie, że macie jakiś większy serwer VPS za który płacicie, a teraz podzielcie go sobie na mniejsze instancje. Jeden obraz systemu to serwer www, drugi obraz to desktop, trzeci obraz to coś innego, ogólnie wszystko zależy od tego jak to sobie zaplanujecie, a Mikrus to taka podstawka by pokazać jakie możliwości mają serwery vps. Wiele osób używa gotowych hostingów dla swoich stron www, ale mało kto stara się przerzucić swoje strony na serwery vps ze względu na bardzo małą wiedzę na ten temat. Wiele razy widzę, że ktoś chce się uczyć programowania, ale nie wie od czego zacząć, nawet nikt nie pomyśli o tym, że można wykorzystać serwer vps, coś co ma dość duże parametry i pozwoli na start kilku własnych aplikacji.
Co jeśli by tak teraz użyć Mikrusa? No właśnie, dlatego stąd ta notka, te przemyślenia i kilka małych poradników w postaci schematów oraz opisów.

Jako jeden z administratorów projektu Mikrus chciałbym by projekt ten pomógł wielu osobom w nauce obsługi systemu Linux, czy administracji serwerami takimi jak serwer www. Mam również nadzieję na to, że osoby które nie mają gdzie postawić swoich stron napisanych np. nodejs, będą mogły nią uruchomić właśnie na serwerze vps projektu. Jeżeli macie jakieś plany, pomysły, lub inne rzeczy, piszcie na maila, piszcie do nas, bo po to właśnie powstał ten projekt by uczyć i pomagać innym w nauce. Dziękuję również Hackerspace Kraków za to że dzięki nim ten projekt ma prawo istnieć - jesteście wielcy!

Jeżeli będzie zainteresowanie projektem, oraz moim obrazem, to będę pisać notki, poradniki, albo jeśli dogadam się z Unknowem to będę rozbudowywał ten obraz tak bardzo, by był on najlepszym narzędziem do nauki podstaw. Całą resztę mam nadzieję, że zbudujecie sobie sami, zaś dla osób które chcą mieć gdzie hostować swoje strony powiem tylko tyle, że obraz Alpine LAMP stworzony przez Bonn333 będzie wręcz idealny do tego, bo jak widzieliście na trzecim zrzucie ekranu powyżej (z tych gdzie jest pokazane zużycie ram i powierzchni dyskowej), że zużywa on najmniej zasobów dzięki czemu pozwala na o wiele więcej niż Devuan czy Ubuntu

Notkę pisał dla Was
Ferexio

~~~~ Komentarze ~~~~