Pokazywanie postów oznaczonych etykietą skrypty. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą skrypty. Pokaż wszystkie posty

piątek, 13 maja 2016

Automatyczna archiwizacja konfiguracji mikrotików z wielu lokalizacji

Mamy lokalizację główną + lokalizacje zdalne na lokalizacjach zdalnych mamy mikrotiki, które zarządzają całym bałaganem sieciowym. Chcemy mieć pewność, ze nasza konfiguracja w razie awarii, lub jakieś zmiany będzie do odzyskania. W takim razie robimy automatyczny backup konfiguracji mikrotików w dowolnej ilości lokalizacji.

W pierwszej kolejności konfigurujemy mikrotiki, żeby codziennie robiły backup swojej konfiguracji. Logujemy się do mikrotika  z poziomu wiersza poleceń wykonujemy następujące kroki.

Dodajemy do scheludera zadanie wykonania backupu o nazwie LOK1.backup (każą linijkę wklejamy oddzielnie):

/system scheduler
add name="backup" on-event="system backup save name=LOK1.backup" \
start-date=jan/01/1970 start-time=00:00:00 interval=10h comment="" \
disabled=no

Wykonujemy pierwszy backup ręcznie:

/system backup save name=LOK1.backup

Sprawdzamy, czy mamy serwis ftp aktywny (brak X znaczy że jest ok, w przeciwnym razie musimy go odblokwać):

/ip service print
Flags: X - disabled, I - invalid 
 #   NAME      PORT ADDRESS                                        CERTIFICATE   
 0   telnet      23
 1   ftp         21
 2   www         80
 3   ssh         22
 4 X www-ssl    443                                                none          
 5 X api       8728
 6   winbox    8291
 7   api-ssl   8729                                                none        

Dodajemy Grupę, politykę i użytkownika backup z hasłem i zezwalamy mu się łączyć z naszego adresu IP lub sieci (192.168.0.13/32):

/user group
add name="ftp" policy=ftp,!local,!telnet,ssh,!reboot,read,write,!policy,!test,!winbox,!password,web,!sniff,sensitive
/user
add address=192.168.0.13/32 comment="FTP backup" disabled=no group=ftp name="backup"
set [find name="backup"] password="Backup_Password"


Po stronie serwera, na który chcemy wykonać backup tworzymy plik z adresami ip i nazwą lokalizacji:

----------------------------------mikrotik.txt ----------------------------------
121.121.121.121 LOK1
122.122.122.122 LOK2
..
..
..
130.130.130.130 LOK
EOF
-----------------------------------END-OF-FILE---------------------------------

Pamiętajmy, żeby po EOF już nie było pustej linii. Pierwsza kolumna jest adresami ip naszych mikrotików, a druga nazwami lokalizacji, a także nazwami katalogów, gdzie backup trafi,oraz nazwami plików z backupem znajdujących się na mikrotikach. Następnie w tym samym katalogu (domyślnie jest to /backup/mikrotik. jak będzie inny wystarczy zmienić ścieżkę w zmiennej) umieszczamy poniższy skrypt i nadajemy mu prawa do wykonywania chmod +x nazwa_skryptu.sh


#!/bin/bash
echo "##########################################################################"
echo "##########################################################################"
echo "########                                                          ########"
echo "########                  MIKROTIK BACKUP SCRIPT                  ########"
echo "########                           V1.0                           ########"
echo "########                        13.05.2015                        ########"
echo "########                   by: Grzegorz Zalewski                  ########"
echo "########          http://informatycznezycie.blogspot.com          ########"
echo "########                                                          ########"
echo "##########################################################################"
echo "##########################################################################"

#Zmienne
USER=backup
PASSW=Backup_Password
data=`date +%F`
date=`date +%Y-%m-%d_%H_%M`
dir=/backup/mikrotik

#utwórz katalog z datą
cd $dir
mkdir $data
cd $dir/$data


#utwórz plik lokalizacji z pliku mikrotik.txt
awk '{print $2}' < $dir/mikrotik.txt > $dir/lokalizacja.tmp

#utwórz katalogi w pętli z pliku oddzialów
while read line
do
mkdir $line
#plik z jakiego ma petla korzytstać
done <$dir/lokalizacja.tmp

#połącz sie z oddziałami i pobierz pliki pętla
while read line
do
#wyciągnij pojedynczą linie z pliku mikrotik
echo $line > line.tmp
#utworz plik z adresem ip
awk '{print $1}' < line.tmp > ip.tmp
#utworz plik z nazwa lokalizacji
awk '{print $2}' < line.tmp > lok.tmp
#stwórz zmienne
ip=$(< ip.tmp)
odd=$(< lok.tmp)

#skrypt ftp
#passive - niektóre mikrotiki w trybie aktywnym nie listuja katalogow-wymuszamy tryb passive
#get * - pobierz plik i zapisz go w danej lokalizacji
ftp -v -n $ip >> $dir/$data.transfer.log <<SCRIPT
user $USER $PASSW
binary
passive
dir
get $lok.backup $dir/$data/$lok/$lok.backup.$date
quit
SCRIPT
#plik z jakiego ma petla korzytstać
done < $dir/mikrotik.txt

#usuń pliki tymczasowe
cd $dir
rm *.tmp
cd $dir/$data
rm  *.tmp

Jeśli wszystko wykonaliśmy poprawnie, to w katalogu (w naszym przypadku /backup/mikrotik)
powinien powstać katalog DATY np.: 2016-05-13 a w nim katalogi LOK1, LOK2, LOK3 itp, Wewnątrz powinny znajdować się pliki z backupem w nazwie zgodne z lokalizacja i ze znacznikiem czasowym ściągnięcia w nazwie. Jeśli plików brakuje, to w pierwszej kolejności sprawdzamy plik logu i szukamy informacji, co się stało. Następnie najlepiej spróbować połączyć się ręcznie z linii komend ftpem do mikrotika. Jeśli to nie pomoże należny jeszcze po stronie mikrotika sprawdzić:
- czy jest włączony conntrac i reguły do niego (established,related) 
- czy"Service ports" FTP jest zaznaczony
- czy pomiędzy klientem i serwerem jest stosowany jakiś NAT, albo szyfrowane połączenie

Gdy ostatecznie dopniemy kwestie konfiguracyjne i wszystko zadziała jak należny wystarczy dodać skrypt do crona. Ot cała robota.

Oczywiście skrypt można wykorzystać nie tylko do archiwizacji backupu konfiguracji mikrotików. Po niewielkich modyfikacjach może mieć różnorakie zastosowanie.

czwartek, 5 maja 2016

Hurtowa zmiana praw do plików i katalogów

Instalujemy sobie stronkę np. wordpress`a i musimy globalnie dla wszystkich katalogów ustawić prawa 775, a dla plików 664 . Ręcznie to robiąc katalog po katalogu zajmie nam mnóstwo czasu. Za pomocą tych dwóch komend zrobimy to w kilka sekund. Przechodzimy do katalogu, w którym chcemy dokonać zmian.

Dla katalogów w folderze, w którym się znajdujemy
find . -type d -exec chmod 775 {} \;

Dla plików w folderze, w którym się znajdujemy
find . -type f -exec chmod 664 {} \;






czwartek, 2 października 2014

Wyciągamy LDAPem dane z AD

Odkopałem stary nieopublikowany post :). Cała operacja w tym przypadku była przydatna przy migracji z LDAP do AD. Posłużyłem się skryptem, który importował użytkowników do Zimbry. Zmodyfikowany skrypt ldap.sh, wyciąga nazwy użytkowników z AD do pliku, a następnie, za pomocą nazw użytkowników wyciąga dane nt. każdego usera. Bazowałem na skrypcie znalezionym na stronie

--------------------ldap.sh--------------------
##DATA MODYFIKACJI 19.04.2014
#ZMIENNE
LDAPSEARCH=/usr/bin/ldapsearch
DOMAIN_NAME="przyklad.pl"
TMP_DIR=/root/ldap_acc
ADS_TMP=$TMP_DIR/users.lst
ADS_TMP2=$TMP_DIR/WYNIK.TXT
# Server values
LDAP_SERVER="ldap://xxx.xxx.xxx.xxx"
BASEDN="dc=przyklad,dc=pl"
BINDDN="CN=user,CN=Users,DC=przyklad,DC=pl"
BINDPW="haslo"
FILTER="(&(sAMAccountName=*)(objectClass=user)(givenName=*))"
#FILTER="(&(sAMAccountName=*))"
FIELDS="sAMAccountName"
FILTER2="(&(sAMAccountName=*)(objectClass=user)(givenName=*))"
FIELDS2="sAMAccountName mail carLicense"

# CZYSZCZENIE ZAWARTOŚCI KARALOGU  /root/ldap_acc/
echo "Czyszczenie zawartosci katalogu ze starych wynikow ..."
rm -f $ADS_TMP $ADS_TMP2
sleep 3s

# POBIERANIE UZYTKOWNIKÓW Z AD i zapisanie ich w /root/ldap_acc/users.lst
echo -n "Odpytywanie AD... "
$LDAPSEARCH -x -H $LDAP_SERVER -b $BASEDN -D "$BINDDN" -w $BINDPW "$FILTER" $FIELDS | \
#  grep "@$DOMAIN_NAME" | \
   grep "sAMAccountName:" | \
  awk '{print $2}' | \
 cat  > $ADS_TMP
sleep 2s
echo "Znaleziono `cat $ADS_TMP | wc -l` użytkowników ($ADS_TMP)"
sleep 3s

#$LDAPSEARCH -x -H $LDAP_SERVER -b $BASEDN -D "$BINDDN" -w $BINDPW "$FILTER2" $FIELDS2 | \
#grep $i | \
cat > $ADS_TMP2
#echo "Znaleziono `cat $ADS_TMP2 | wc -l` wpisów ($ADS_TMP2)"
echo "Odpytuje o kolejnego użytkownika ...."
done
sleep 1s
echo "Wyniki zapisane w ($ADS_TMP2)"
------------------------------------END--------------------------

wtorek, 9 września 2014

Jak wykonać polecenie w danym dniu tygodnie bez zaprzęgania Crona

Czasem zdarza się taka potrzeba, że przydało by się naszemu skryptowi działającemu w cronie, żeby bez dodatkowych skryptów zewnętrznych i następnych wpisów w crontabie zrobił coś dodatkowo np. we wtorek. Może przydać się przy np. skryptach backupowych, bądź innych wynalazkach. Poniżej mały skrypcik, który w środę będzie zmieniał nazwę pliku:

#!/bin/sh
TUE=`date | cut -c 1-3`
DATE=`date +%F`
DZIEN=`echo "Tue"`
    if
              [ "$TUE" == "$DZIEN" ]; then
              mv test.txt test_$DATE.txt
        exit 0;
    else
        echo "dzis nie Tue"
    fi