Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Ulepszanie skryptu.  (Przeczytany 5947 razy)

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2763
  • 1709
    • Zobacz profil
Ulepszanie skryptu.
« dnia: 2018-11-18, 14:00:42 »
Zrobilem sobie taki skrypt side (Simple Intrusion Detection Environment)
( na własne potrzeby )

#!/bin/bash

# Name: side
# Version: 2
# Licence: GPLv3


error1(){
echo "$@" ; exit 1
}

# Check if sha256sum is installed
[ "$(sha256sum --version)" ] || error1 "--> You need install sha256sum"


#=============={
side_verify() {
echo "--> Verify base with local hash"
sha256sum -c dat/hash.base.org.sum || error1 "--> Error: Verify hash.base.org FAILED"
sha256sum -c dat/perm.base.org.sum || error1 "--> Error: Verify perm.base.org FAILED"


ADDITIONAL_VERIFICATION_HASH_V1()
{
#### YOU NEED CHECK THIS AND ADAPT TO YOUR OWN NEEDS
echo "=========={"
echo "--> Verify base with on-line hash"
## tr -d '\r' will remove "CRLF line terminators"
curl -v --silent https://pastebin.com/paste_own_link --stderr - | grep " dat/hash.base.org" | sed -e 's/<[^>]*.//g' | tr -d '\r' \
| sha256sum --check || error1 "--> Error: Verify hash.base.org FAILED"
curl -v --silent https://pastebin.com/paste_own_link --stderr - | grep " dat/perm.base.org" | sed -e 's/<[^>]*.//g' | tr -d '\r' \
| sha256sum --check || error1 "--> Error: Verify perm.base.org FAILED"
echo "==========}"
}

ADDITIONAL_VERIFICATION_HASH_V2()
{
echo "=========={"
echo "--> Paste hash of hash.base.org to verify and click Enter key:"
read -p "hash.base.org=" HASH_OF_HASH
echo "$HASH_OF_HASH" | sha256sum --check || error1 "--> Error: Verify hash.base.org FAILED"

echo "--> Paste hash of perm.base.org to verify and click Enter key:"
read -p "perm.base.org=" HASH_OF_PERM
echo "$HASH_OF_PERM" | sha256sum --check || error1 "--> Error: Verify perm.base.org FAILED"
echo "==========}"
}

#### Remove " # " to active below function.
# ADDITIONAL_VERIFICATION_HASH_V1
# ADDITIONAL_VERIFICATION_HASH_V2
}
#==============}


#========================={
side_create() {
mkdir -p ./dat
[ -e dat/hash.base ] && rm dat/hash.base
[ -e dat/perm.base ] && rm dat/perm.base

#### YOU NEED CHECK AND ADAPT TO YOUR OWN NEEDS
FIND_IN="/"

#### YOU NEED CHECK AND ADAPT TO YOUR OWN NEEDS
#### "-print" is for "-prune", which is to skip the indicated directories,
#### be careful with edit option "prune", because first used "prune" sometimes may not work,
#### working example from "man find": find . -path ./src/emacs -prune -o -print.
find "$FIND_IN" \
\
-path '/cdrom' -prune -o  \
-path '/dev' -prune -o  \
-path '/home' -prune -o  \
-path '/media' -prune -o  \
-path '/mnt' -prune -o  \
-path '/proc' -prune -o  \
-path '/run' -prune -o \
-path '/sys' -prune -o  \
-path '/tmp' -prune -o  \
-path '/var' -prune -o  \
 \
-type f  -exec sha256sum {} + | tee -a dat/hash.base

while IFS= read -r LINE1
do
    ls -l "$LINE1" | tee -a dat/perm.base
done <<< "$(cut -d" " -f3- dat/hash.base)"
}
#=========================}


#========================={
side_move() {
mv dat/hash.base dat/hash.base.org
mv dat/perm.base dat/perm.base.org

echo "=========={"
echo "OPTIONAL:"
echo "--> You can sent hash files to inaccessible place,"
echo " for example on paste.bin, manualy"
echo "and add links to this script or paste hash, during verification:"
sha256sum dat/hash.base.org > dat/hash.base.org.sum
sha256sum dat/perm.base.org > dat/perm.base.org.sum
cat dat/hash.base.org.sum
cat dat/perm.base.org.sum
echo "==========}"
}
#=========================}


#========================================================================================={
case $1 in
"--first.init"|"-f")
side_create
side_move
;;
"--check"|"-c")
side_verify
side_create
echo "######################################################"
echo "    "
echo "--> Changed files:"
echo "    "
diff dat/hash.base dat/hash.base.org
diff dat/perm.base dat/perm.base.org
;;
"--help"|"-h")
echo "--first.init Option to create base of checksums."
echo "--check Option to verify files with base."
        echo " "
echo "This software is used to verify changes in the system."
        echo " "
echo "WARNING: "
echo "Because the length of the checksum is constant,"
echo "regardless of the size of the file,"
echo "with bigger file, exist higher risk "
echo "of building the same checksum for the changed file."
;;
*)
echo " Error: unknown option"
echo " Try use: $0 --help"
exit
;;
esac
#=========================================================================================}

Czy mozna jeszcze jakos go ulepszyc ?

1. Skrypt bedzie uruchamiany jako root,
wiec nie jestem pewien czy zmienna np.  FIND_IN moze byc tak zapisana.
2. Chcialem zeby skrypt byl bardziej przejrzysty,
 np. zapisanie sciezek (  "/proc/*"  "/home/*" ) do pliku konfiguracyjnego ale komenda find obraza sie na moje zmienne
i tablica nie chce nic zapisac w sobie w petli while.
3. Skrypt narazie nie potrafi wyslac hash przez curl, trzeba wkleic recznie,  a fpaste czy czegos podobnego nie mam i narazie nie bede kompilował.


Edytowane
Przydalaby sie aplikacja na telefon do skanowania i weryfikowania hashy na telefonie :D
Dzieki temu nie musialbym zapisywac hashy w sieci.


Edytowane
- A moze by fragment z linkami zmienic w ten sposob ?
 su -c "id; curl -v --silent https://pastebin.com/i6kzzJtz --stderr - | grep ' dat/perm.base.org' | sed -e 's/<[^>]*.//g' | tr -d '\r' | sha256sum --check" nobody || echo "Error jakis"
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
dat/perm.base.org: OK
- Linki nie sa dlugie, moglbym robic sobie ich zdjecia w celu weryfikacji, czy ktos ich nie podmienil,
No chyba ze ktos popsuje tak system, ze tylko z ISO / live-USB poprawna weryfikacja bedzie mozliwa ...
« Ostatnia zmiana: 2019-04-16, 12:00:13 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline marcin'82

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 402
    • Zobacz profil
Odp: Ulepszanie skryptu.
« Odpowiedź #1 dnia: 2018-11-19, 17:05:50 »
Odnośnie tego fragmentu:
Cytuj
# You need check paths and adapt to your own needs
#echo "find "$FIND_IN" -type f -ls ${NOT_FIND_IN}"
find "$FIND_IN" -type f -not -path "/proc/*" -not -path "/home/*" -not -path "/var/*" \
-not -path "/run/*" -not -path "/media/*" -not -path "/mnt/*"  -not -path "/sys/*" \
-not -path "/tmp/*" -not -path "/dev/*" -exec sha256sum {} \; | tee -a dat/hash.base  | \
awk '{ print $2 }' | xargs ls -l | tee -a dat/perm.base

Można krócej:
find /* -type f -regextype posix-egrep ! -regex '/(dev|home|media|mnt|proc|run|sys|tmp|var)/.*' -exec sha256sum {} > sumy \;

Wysłanie wyniku na serwer, na przykład ptpb (podług Arch Wiki):
sha256sum sumy | curl -F c=@- https://ptpb.pw

Magia druciarstwa - wyciągamy link :D
sha256sum sumy | curl -F c=@- https://ptpb.pw | grep url | awk '{print $2}'

Porównanie wyników, na przykład:
diff <(echo "$(sha256sum PLIK)") <(echo "$(curl --silent LINK)"); echo $?
marcin82

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2763
  • 1709
    • Zobacz profil
Odp: Ulepszanie skryptu.
« Odpowiedź #2 dnia: 2018-11-19, 18:06:04 »
Ladnie wyglada :]
A daloby sie te linki zczytac z pliku albo wpisac je w jednej kolumnie ?
Bo jesli np. usune /home  i  dodam
/home/x/.xsession-errors
/home/x/.pulse
/home/x/.mozilla
//home/x/.tmp
//home/x/.cache
to moze sie nie zmiescic w jednej linii.


Edytowane
A moze tak by ladniej wygladalo ?
find "$FIND_IN" -type f \
-not -path "/proc/*" \
-not -path "/var/*" \
-not -path "/run/*" \
-not -path "/media/*" \
-not -path "/mnt/*"  \
-not -path "/sys/*" \
-not -path "/tmp/*" \
-not -path "/dev/*" \
-not -path "/home/x/.xsession-errors" \
-not -path "/home/x/.pulse/*" \
-not -path "/home/x/.mozilla/*" \
-not -path "/home/x/.tmp/*" \
-not -path "/home/x/.cache/*" \
-exec sha256sum {} \;
« Ostatnia zmiana: 2018-11-19, 18:33:35 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline marcin'82

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 402
    • Zobacz profil
Odp: Ulepszanie skryptu.
« Odpowiedź #3 dnia: 2018-11-19, 18:33:27 »
Jak tobie lepiej pasuje. Można podać wielokrotnie różne wzory, można ubrać je w zmienne, itd.:
find /var/log/* -type f -regextype posix-egrep -not -regex '.*(s|n)mbd.*' -not -regex '.*(1|2|3|4).*'
/var/log/auth.log
/var/log/btmp
/var/log/crond.log
/var/log/daemon.log
[...]

To 1,2,3,4 lepiej by było podać jako zakres zamiast wyliczanki. Jak wiesz ja mam jobla na punkcie zero komentarzy w skryptach i najkrócej jak się da. Jak dla ciebie czytelniej to tak poprzerabiaj. To jest tylko kosmetyka (ale jest krócej)- najważniejsze, że "łapie" wszystkie pliki, które ma znaleźć.

Każdy ... Co kraj to obyczaj :D
« Ostatnia zmiana: 2018-11-19, 18:41:11 wysłana przez marcin'82 »
marcin82

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2763
  • 1709
    • Zobacz profil
Odp: Ulepszanie skryptu.
« Odpowiedź #4 dnia: 2019-04-04, 13:35:23 »
Ten skrypt AIDE podobny ma jeden defekt, a dokladniej linia zawierajaca
xargs ls -l
Ma problem z linkami zawierajacymi spacje.
ls: nie ma dostępu do '/home/x/Games/warframe/drive_c/Program': Nie ma takiego pliku ani katalogu

Edytowane
| tee -a dat/hash.base | cut -d" " -f2- | xargs -0 ls -l | tee -a dat/perm.base
Wydawaloby sie ze to powinno pomoc ale pisze
xargs: za długa linia argumentów
find: `sha256sum' zakończony sygnałem 13
W wolnej chwili poprawie jesli znajde rozwiazanie i czas.

Edytowane.
find i xargs sprawiaja wiecej problemow niz moglem przypuszczac.
"find -prune" musi miec gdzies na poczatku inaczej nie dziala jak powinien,
"xargs ls -l" nie lubi spacji i znakow specjalnych jak cudzyslow.

Przyklad
$ find /usr/share/sounds/ubuntu/ringtones/ -type f -exec sha256sum {} \;  | tee -a dat/hash.base | cut -d" " -f2- 
 /usr/share/sounds/ubuntu/ringtones/Halo Pentatonic.ogg
 /usr/share/sounds/ubuntu/ringtones/Bliss.ogg
 /usr/share/sounds/ubuntu/ringtones/Soul.ogg
 /usr/share/sounds/ubuntu/ringtones/Array mbira.ogg
 /usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg
 /usr/share/sounds/ubuntu/ringtones/Alarm clock.ogg
 /usr/share/sounds/ubuntu/ringtones/Wind chime.ogg
 /usr/share/sounds/ubuntu/ringtones/Counterpoint.ogg
 /usr/share/sounds/ubuntu/ringtones/Tongue drum.ogg
 /usr/share/sounds/ubuntu/ringtones/Latin.ogg
 /usr/share/sounds/ubuntu/ringtones/Ubuntu.ogg
 /usr/share/sounds/ubuntu/ringtones/Glass marimba.ogg
 /usr/share/sounds/ubuntu/ringtones/Harmonics.ogg
 /usr/share/sounds/ubuntu/ringtones/Sparkle.ogg
 /usr/share/sounds/ubuntu/ringtones/Alarm synth.ogg
 /usr/share/sounds/ubuntu/ringtones/Sam's Song.ogg
 /usr/share/sounds/ubuntu/ringtones/Koto chords.ogg
 /usr/share/sounds/ubuntu/ringtones/Supreme.ogg
 /usr/share/sounds/ubuntu/ringtones/Melody piano.ogg
 /usr/share/sounds/ubuntu/ringtones/Harp arp.ogg
 /usr/share/sounds/ubuntu/ringtones/Marimbach.ogg
 /usr/share/sounds/ubuntu/ringtones/Celestial.ogg

Problemem jest tu "Koto chords.ogg" "Sam's Song.ogg" i spacje na samym poczatku.

$ find /usr/share/sounds/ubuntu/ringtones/ -type f -exec sha256sum {} \;  | tee -a dat/hash.base | cut -d" " -f3-  |  xargs -i echo \"{}\"
"/usr/share/sounds/ubuntu/ringtones/Halo Pentatonic.ogg"
"/usr/share/sounds/ubuntu/ringtones/Bliss.ogg"
"/usr/share/sounds/ubuntu/ringtones/Soul.ogg"
"/usr/share/sounds/ubuntu/ringtones/Array mbira.ogg"
"/usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg"
"/usr/share/sounds/ubuntu/ringtones/Alarm clock.ogg"
"/usr/share/sounds/ubuntu/ringtones/Wind chime.ogg"
"/usr/share/sounds/ubuntu/ringtones/Counterpoint.ogg"
"/usr/share/sounds/ubuntu/ringtones/Tongue drum.ogg"
"/usr/share/sounds/ubuntu/ringtones/Latin.ogg"
"/usr/share/sounds/ubuntu/ringtones/Ubuntu.ogg"
"/usr/share/sounds/ubuntu/ringtones/Glass marimba.ogg"
"/usr/share/sounds/ubuntu/ringtones/Harmonics.ogg"
"/usr/share/sounds/ubuntu/ringtones/Sparkle.ogg"
xargs: niedopasowany pojedynczy cudzysłów; domyślnie znaki cytowania są specjalnymi dla xargs o ile nie użyto opcji -0
"/usr/share/sounds/ubuntu/ringtones/Alarm synth.ogg"


Edytowane.
Skrypt poprawiony i mam nadzieje ze więcej błędów już nie zawiera :)

Jesli ktos nie ogarnia jak uzywac tego skryptu, to napisze ze
FIND_IN="/"
Nalezy sobie zmienic na katalog ktory chcemy kontrolowac. W tym przypadku zostal podany "/" katag glowny systemu  .
Do tego zostaly podane katalogi ktore skrypt powinien pomijac, np. katalog /var
-path '/var' -prune -o  \
Uruchomienie z opcja " --first.init " powoduje stworzenie bazy z sumami kontrolnymi plikow
a z opcja "--check" weryfikuje czy wszystkie sumy plikow sa nadal takie same,
 dzieki temu wiemy czy jakis plik zostal nadpisany lub zmieniono uprawnienie.

Nieaktywne, zakomentowane funkcje
# ADDITIONAL_VERIFICATION_HASH_V1
# ADDITIONAL_VERIFICATION_HASH_V2
sa dla bardziej ogarnietych uzytkownikow ktorzy by chcieli weryfikowac sume kontrolna
 ktora powstaje na koncu dzialania skryptu z opcja "--first.init".

Jezeli chodzi o dzialanie skryptu w katalogu głównym lepiej uzywac skrypt z uprawnieniami administratora.
Jesli byśmy np. weryfikowali katalog domowy lub jakis program w katalogu domowym to nie ma takiej potrzeby.
« Ostatnia zmiana: 2019-04-16, 12:19:29 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.