Postgresql 8.1 database bash dump script

I’ve wrote a simple bash script to dump databases from a Postgresql 8.1 database server
which uses the pg_dump and pg_dumpall.


#!/bin/bash
## This scripts dumps all the databases in a Postgres 8.1 server, localhost
## 2 dump files are made for each database. One with Inserts another without.
## some variables, change them to fit yours
 LOGFILE="/var/lib/pgsql/data/pg_log/pgsql_dump.log"
 HOSTNAME=`hostname`
 MAILLIST="name1@something.com,name2@something.com"
 BACKUP_DIR="/backup/postgresql_dumps"

# Date and time variables
 DATE=`date +%Y-%m-%d`
 TIME=`date +%k:%M:%S`
 TODAY=$DATE"T"$TIME
# only postgres can run this script!
 if [ `whoami` != "postgres" ]; then
   echo "pgsql_dump tried to run, but user is not postgres!" >> $LOGFILE
   echo "You are not postgres, can not run."
   echo "Try: su -c ./pgsql_dump.sh postgres"
   exit;
 fi

# clean up old dumps! (find all types which are files, with the name that ends with .sql,
# their date older than 7 days, and execute the command "rm" (remove) )
 find $BACKUP_DIR -type f -name '*.sql' -mtime +7 -exec rm {} \;

# Check if there any backup files.
# Action: find in folder BACKUP_DIR all files with file-extension .sql.
# Count the number of files with wc (word count, option -l, which counts the numbers of lines.
# If this number is 0, then there are no files, and clearly something is wrong,
# because you don't have any backups!
if [ `find $BACKUP_DIR -type f -name '*.sql' | wc -l` -eq 0 ]; then
 echo "There are no pgsql dumps for the last 2 days at $HOSTNAME. Something is wrong!" | mail -s "[PGSQLDUMP ERROR] $HOSTNAME" $MAILLIST
fi

# Create the log-file if it doesn't exist
if [ ! -e $LOGFILE ]; then
 touch $LOGFILE
fi

# Find which databases you have in your Postgresql server
# Action: list out all the databases, remove unwanted lines and characters, extract wanted line with awk (line 1),
# strip away white empty lines with the command 'sed':
DATABASES=`psql -q -c "\l" | sed -n 4,/\eof/p | grep -v rows | grep -v template0 | awk {'print $1'} | sed -e '/^$/d'`
# Dump the databases in individual files
 for i in $DATABASES; do
   FILENAME="$i-$TODAY.sql"
   pg_dump -D $i > /backup/postgresql_dumps/"$FILENAME"
 done

# we also like a dump with copy statements
 for i in $DATABASES; do
   FILENAME="$i-cp-$TODAY.sql"
   pg_dump $i > /backup/postgresql_dumps/"$FILENAME"
 done

# full backup is also necessary
 pg_dumpall -D > /backup/postgresql_dumps/"all-databases $TODAY".sql
 pg_dumpall > /backup/postgresql_dumps/"all-databases $TODAY".sql

# Finally vacuum the database
 vacuumdb -a -f -z -q

tar

Create a tar file of files located in a folder:
tar -cvf filname.tar foldername/

where:
c = create
v = verbose
f = file

filname.tar = the created file

———-
To show the content of a tar’ed file:
tar -tvf filname.tar

———-

extract a file with tar:
tar -xvf filname.tar

where

x = extract
v = verbose
f = file

Extract img url links from HTML document

I needed to find and get a webpage’s img src url links. I wanted to do this with a script on a regular basis. The solution I found was to use PHP domdocument:

http://stackoverflow.com/questions/138313/how-to-extract-img-src-title-and-alt-from-html-using-php

[php]
<?php
$url="http://example.com";

$html = file_get_contents($url);

$doc = new DOMDocument();
@$doc->loadHTML($html);

$tags = $doc->getElementsByTagName(‘img’);

foreach ($tags as $tag) {
echo $tag->getAttribute(‘src’);
}
?>

[/php]

After spending some time using wget, cat, grep and so on to solve my problem, this little php code made my life easier 🙂

ldapsearch users and places that contains æ, ø and å

We needed to collect “Place” information per user from our LDAP server.
The problem was that the description of the “Place” came out strangely encoded whenever it contained one of the norwegian characters æ,ø or Ã¥.

The ldap command:

ldapsearch -x -H ldap://ourldapserver.uib.no x121Address=XXXXXX

where XXXXXX is the “place” code, gave a place description that looked like this:

description:: SW5zdGl0dXR0IGZvciBmaWxvc29maSBvZyBmw7hyc3Rlc2VtZXN0ZXJzdHVkaWVy

where the real name of “Place” could be something like: “Institutt for .. and then a word with æ, ø or Ã¥”

The solution was to use ldapsearch as follows:
ldapsearch -x -z 1 -t departmentNumber=XXXXXX ou

where XXXXXX is the University of Bergen “placecode” for a “Place”. For instance the number 567123 could be the place code for our IT department.
-z 1 reduces the list of hits to one (1), and ou specifies the “Place” description.

The list of users was already collected in a text file: people.txt on the form:

username1
username2

The bash script that solved the issue for me was:

[code lang=”bash”]

#!/bin/bash
# People collected with:
# ls -al /www/folk/ |awk {‘print $9’}|grep -v unwanted_line|sort > people.txt

PEOPLE=`cat people.txt`

for USERNAME in $PEOPLE; do
PLACECODE=`ldapsearch -x -H ldap://ourldapserver.uib.no uid=$USERNAME | grep departmentNumber | awk {‘print $2’}`

if [ ! -z $PLACECODE ]; then

# Some times name of place is written to screen, other times to a file under /tmp
OUINFO=`ldapsearch -x -z 1 -t departmentNumber=$PLACECODE ou | grep ‘ou:’`

if [ `echo $OUINFO | grep ‘file:’ | wc -l` -eq 0 ];then
PLACE=`echo $OUINFO | sed -e s/"ou:\ "//g`
else
THEFILE=`echo $OUINFO | grep ‘file:’ | sed -e s/".*file:\/\/"//g`
PLACE=`cat $THEFILE`

#echo "The file is: " $THEFILE
#echo "and the place is: " $PLACE

fi
fi
echo $USERNAME, $PLACE
done

[/code]

Simple ldapsearch

Search for information from a ldap server:
Log in to server with:
ssh servernavn

Then type the command:

ldapsearch -x -H ldap://ldapservername.uib.no uid=userid
ldapsearch -x -H ldap://ldapservername.uib.no departmentnumber=XXXXXX

where XXXXXX is placecode

Slette alle data på en harddisk

Forfatters kommentar: Teksten under skrev jeg 3. april 2007 så verdenen kan ha endret seg siden den gang.

Hvordan kan man fjerne alle dataene på en harddisk, og være sikker på at ingen kan rekonstruere dataene?

Dessverre tror mange at det å formatere en harddisk fjerner dataene på disken. Formatering sletter kun referansene til filene og ikke selve innholdet i filene. Det er forholdsvis enkelt å hente fram data fra en harddisk som er blitt formatert eller reinstallert.

For at en skal være sikker på at dataene ikke kan hentes fram igjen, må en sørge for at filenes innhold også overskrives. Dette innebærer at alle databiter tilhørende filene på harddisken overskrives.

En kan gjøre dette ved å sette alle harddiskens databiter til 1 eller 0, eller benytte rutiner som generer tilfeldige bit-verdier.

Det diskuteres hvorvidt dette i seg selv er nok, og om det er mulig å hente ut data fra en harddisk hvor alle filene er overskrevet på overnevnte måte.

Peter Gutman framførte i 1996 metode som skal kunne på en sikker måte slette data på et lagringsmedia. Les her: http://en.wikipedia.org/wiki/Gutmann_method#_note-0

Gutman mente at selv om en overskriver alle data på en harddisk, vil det likevel være teknisk mulig å hente ut informasjonen. Han introduserte sin metode som skulle sikre at data ikke kunne rekonstrueres.

Les Gutman’s “Secure Deletion of Data from Magnetic and Solid-State Memory” pÃ¥: http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html

Ikke alle er enige med Gutman:

Daniel Feenberg er uenig. Les hans meninger her: http://www.nber.org/sys-admin/overwritten-data-guttman.html

Det er en uenighet om hva som er sikker metode for å fjerne data på et lagringsmedia. Likevel synes det klart at mange er enige om at filer som er overskrevet på en harddisk, er vanskelig, om ikke umulig, å hente fram igjen.

Det er faktisk ingen firmaer i dag (inkludert norske IBAS) som hevder at de kan rekonstruere data fra filer som er blitt overskrevet.

Spørsmålet er: Hvilke prosedyrer og programmer kan benyttes for å være sikker på at data er fjernet fra en harddisk?

En god framgangsmåte kan være å følge standarden DOD 5220.22M som er utgitt av USA sitt forsvarsdepartment (sist oppdatert 28. feb. 2006): Department of Defense, Under Secretary of Defense for Intelligence: http://www.dss.mil/files/pdf/nispom2006-5220.pdf

IBAS i Norge refererer også til denne standarden og deres verktøy retter seg etter disse retningslinjene: http://www.ibas.no/datasletting/faq#two

Les også denne siden om standarden Dod 5220.22-M: http://www.killdisk.com/dod.htm

Dod 5220.22-M metoden innebærer at data overskrives 3 ganger: “Overwrite all addressable locations with a character, its complement, then a random character and verify”

NÃ¥ til den praktiske delen
Et program som støtter US DoD standarden, og som også kan kjøre under BART PE heter Secure DriveEraser.

Secure DriveEraser kan nyttes for å fjerne alle spor på en harddisk eller partisjon. http://vaiosoft.com/download/Default.html
Hold tunga beint i munnen. Når du bruker denne metoden, så forsvinner dataene for godt!

Finn en datamaskin du kan bruke.
Sett inn den harddisken du skal fjerne alle dataene på.
Sørg for at det ikke er andre harddisker koplet til. (Det skal altså kun være én harddisk tilknyttet én IDE kabel). Dersom du har flere harddisker tilkoplet, kan du ved et uhell fjerne dataene på feil harddisk!
Start maskinen, og boot maskinen med NIC/PXE. (hint: Trykk F12, velg Boot from NIC.)
Start BART PE som du vanligvis gjør ved Ghosting av maskiner.
Når dette er gjort, start et command shell. Map til serveren XXXXXX ved å skrive i CMD-shellet:
NET USE K: \\XXXXXX\SHARE /user:domene\navnekonto

skift til K:, og gå til katalogen: DRIVE-ERASE
Start programmet:
DriveEraser.exe
Programmet starter:
BILDE MANGLER

Marker den disken eller partisjonen du ønsker Ã¥ fjerne ALLE dataene pÃ¥, og velg ‘Erase’ fra Tools pÃ¥ menyen.

BILDE MANGLER

Velg ‘Full Partition Area Erase”, ‘Erase Type’ = US DoD:

BILDE MANGLER

Trykk så på knappen ERASE.

Nå MÅ DU være helt sikker på hvilken disk du sletter dataene på! Om du har flere harddisker koplet opp i maskinen din, må du kanskje tenke deg om et par ganger.
NÃ¥r dataene er ‘eraset’ fra harddisken, sÃ¥ er de faktisk borte for godt. Du mÃ¥ ogsÃ¥ være 100% sikker pÃ¥ at dataene som er pÃ¥ denne disken faktisk skal fjernes.
Om du ‘Eraser’ en harddisk som du absolutt ikke skulle ha fjernet dataene pÃ¥, bør du ha gode venner i CIA, eller en god kompis som har et elektron-mikroskop 🙂
Alternativt: flybillett til Brasil

Om du nå er helt sikker, så kan du sette i gang. Hver tålmodig, for sikker sletting av en harddisk kan ta mange timer, __24 timer __er ikke uvanlig.

Et siste ord:

I standarden Dod 5220.22-M er det oppgitt en regel at dersom innholdet pÃ¥ et lagringsmedia kan defineres som ‘TOP SECRET’, sÃ¥ er det ikke nok Ã¥ gjennomføre DoD metoden.

Da finnes kun et alternativ:

“m. Destroy – Disintegrate, incinerate, pulverize, shred, or melt.”
PÃ¥ norsk:

Ødelegg – Bryt ned – brenn til aske – pulveriser – skjær i strimler – smelt 🙂