Linux Database Server: Postgresql and pgAdmin

I hope that you use a Debian-based distro!

sudo apt-get install postgresql

Setup the postgres‘s password:

sudo -u postgres psql
\password

digit the new password, then press Ctrl+D to exit from psql.

Edit this file (adjust your version number, I’ve used 9.1 for write this guide)

sudo vi /etc/postgresql/9.1/main/postgresql.conf

and change these lines (caution with apices, don’t cut&paste):

#listen_addresses = ‘localhost’ –> listen_addresses = ‘*’

#password_encryption = on –> password_encryption = on

finally define who can access the server:

sudo vi /etc/postgresql/9.1/main/pg_hba.conf

add to the end of file:

host all all [ip address] [subnet mask] md5

here you can specify a single host or a complete subnet, for example:

host all all 192.168.160.0/24 md5

Now we can configure pgAdmin, that is a free and open source graphical user interface administration tool for PostgreSQL, which is supported by many computer platforms.

Install your version, I continue with a GNU/Linux Debian-based:

sudo apt-get install pgadmin3

Open pgAdmin and add your server:

  • Name: [any descriptive name]
  • Host: [ip address of the server]
  • Password: [your postgres’s password]

End: here we are!

Install Magento on Ubuntu Server

Why are there lots of guides with strange and mystical commands about installing Magento? It’s so easy!

I’m joking, but I want to reassume the guide you can find at its wiki.

Perform a clean install of Ubuntu Server (I suggest >= 10.04) then type (mark your MySql password!) :

sudo tasksel install lamp-server openssh-server
sudo apt-get install php5-curl php5-cli php5-gd php5-mcrypt

Now you can continue with a ssh connection.

For avoid a future security issue, edit this Apache configuration file:

sudo vi /etc/apache2/sites-enabled/000-default

and change all occurrences of:
AllowOverride None
with
AllowOverride All

Create the database and its new proprietary user (replace “magentoadmin” and “password” as you like) :

mysql -u root -p
CREATE DATABASE magento;
GRANT ALL PRIVILEGES ON magento.* TO 'magentoadmin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Delete default index.html, download Magento, unpack and set permissions.
Here are commands, but I suggest to visit the official download page for updates (Full Release).

cd /var/www
sudo rm /var/www/index.html
sudo wget http://www.magentocommerce.com/downloads/assets/1.5.1.0/magento-1.5.1.0.tar.gz
sudo tar -zxvf magento-1.5.1.0.tar.gz
sudo chown -R www-data.www-data *
sudo mv magento/* magento/.htaccess .
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;
sudo chmod o+w var var/.htaccess app/etc
sudo chmod 550 mage
sudo chmod -R o+w media var
sudo rm -rf magento/ magento-1.5.1.0.tar.gz
sudo service apache2 restart

Open your browser pointing the ip address of your server and finish the installation.

Any feedback will be appreciated…

Ubuntu: installare e configurare PostgreSQL e pgAdmin

Dal terminale:

sudo apt-get install postgresql pgadmin3
sudo -u postgres psql
\password

Digitate la nuova password dell’utente postgres.

Premete Ctrl+D per uscire da psql (il terminale per interfacciarsi con PostgreSQL)

Aprite pgAdmin e aggiungete il vostro server (locale):

  • Nome: nomeserver (a piacere!)
  • Host: localhost
  • Password: password inserita precedentemente

 

Accesso remoto: http://www.ubuntugeek.com/howto-setup-database-server-with-postgresql-and-pgadmin3.html

SSH port forwarding

Non sapevo che titolo dare all’articolo perché non voglio parlare di “tutto” il port forwarding offerto da ssh, ma di una situazione ben specifica:

dal nostro computer vogliamo accedere ad un particolare servizio (vnc, rdp, smtp, ecc) di un host in una lan, che però non possiamo raggiungere direttamente perché non abbiamo la porta “nattata” sul router.

L’unica cosa che abbiamo a disposizione è un host (molto probabilmente un Linux)  con ssh e la relativa porta “nattata“.

Sporchiamoci le mani, scaricate Putty:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Installatelo ed avviatelo.

Ora inserite l’ip del server remoto sul quale è disponibile ssh.

Connection->SSH->Tunnels

La destinazione sarà composta dall’indirizzo ip privato dell’host che volete raggiungere più la relativa porta.

Mentre la porta sarà quella utilizzata in locale, io ho scelto 4444, ma voi potete fare come preferite. Vi consiglio di usare porte “alte”, cioé maggiori della 1024.

Infine cliccate il bottone “Add”.

Cliccate infine sul bottone “Open” e fate il login.

Facciamo un esempio pratico per capire cosa è successo, ipotizziamo che abbiate impostate i seguenti valori e il vostro obiettivo sia contenervi ad una sessione vnc.

ipdelserver: 208.67.220.220
source port: 4444
destination: 192.168.1.10:5900

Non vi rimane che aprire il vostro client vnc e come indirizzo specificare:

localhost:4444

e magicamente sarete indirizzati all’host che prima sarebbe stato impossibile raggiungere! Potete usare anche questa procedura per rendere più sicure le vostre “transazioni”!

Se come me siete amanti della linea di comando, l’equivalente è:

ssh -L portalocale:iphostremoto:portahost utente@ipdelserverssh

Esempio pratico precedente:

ssh -L 4444:192.168.1.10:5900 simone@208.67.220.220

Script Backup DVD

Chi è quel pazzo che affiderebbe il backup dei dati dei suoi clienti ad un DVD? Eccomi qui (e vi assicuro, non sono il solo).

Ragioniamo insieme con calma: un piccolo studio (commercialisti, avvocati, ecc.) disporrà al massimo di una decina di pc.

Cosa gli fareste comprare? server con i dischi in raid1 + unità di backup su nastro + tape + licenza Windows. 2000€ minimo? Più la vostra manodopera.

Quali sono le cose che fanno alzare maggiormente il prezzo (a parte il server!)? La licenza Windows e l’unità di backup su nastro.

Se non ho bisogno di Active Directory e di fare un backup che contenga più di 4GB… perché fagli spendere 1000€ più del necessario? E magari farvi fregare il lavoro da alcun’altro a causa di un preventivo troppo alto?

Ovviamente è una scelta da ponderare accuratamente: frequenza backup, durata dei dati sul dvd, possibile aumento dei dati da salvare, ecc.

Ma secondo me è un’opzione sempre da proporre al cliente, spiegandogli ovviamente dove potrebbero sorgere alcune limitazioni.

Googolando e dopo tanti test sono finalmente riuscito crearmi il mio script che uso per fare il backup su DVD+RW, lo condivido volentieri con voi:

#!/bin/sh

# Format date.
day=$(date +%Y"-"%m"-"%d"_"%A)

# What to backup.
bak_files="/home/alice /home/bob /home/pippo /home/pluto /samba/tutti"

# Where to backup to.
bak_dest="/home/backup"

# Backup archive filename.
bak_archive="$day.tgz"

# ISO destination.
iso_path="/home/iso"

# ISO filename.
iso_file="$iso_path/$day.iso"

# DVD device.
dvd_device=/dev/sr0

# Print start status message.
echo "+-----------------------------------------------------------------------+"
date
echo "Backing up $bak_files to $bak_dest/$bak_archive"
echo

# Backup the files using tar.
tar czf $bak_dest/$bak_archive $bak_files

# Long listing of files in $bak_dest to check file sizes.
ls -lh $bak_dest

# Preparing ISO.
mkisofs -R -J -joliet-long -input-charset utf-8 -o $iso_file $bak_dest/$bak_archive

# Test ISO.
mount -t iso9660 $iso_file /mnt/iso/ -o loop
ls -lh /mnt/iso
echo
umount /mnt/iso

# DVD info.
dvd+rw-mediainfo $dvd_device
echo

# Format DVD.
dvd+rw-format -force $dvd_device

# Burn iso, if success remove ISO file.
growisofs -Z $dvd_device=$iso_file && rm -v $iso_path/*
echo

# Eject dvd.
eject $dvd_device

# Print end status message.
echo "Backup finished"
date
echo "+-----------------------------------------------------------------------+"
echo

Configurare Samba come Primary Domain Controller

Ovviamente, do per scontata l’installazione di samba sul pc:

Le possibilità di interoperabilità fra client e server Windows, e Samba in una rete locale per la condivisione dei file sono varie.

Nell’utilizzo di SMB/CIFS le possibilità sono varie:

  • Windows File server con client misti Windows, Linux/Unix, MacOS
  • Linux/Unix Samba File server con client misti.

E’ possibile configurare Samba per:

  • Operare come Primary Domain Controller di una rete mista, gestendo anche i profili di macchine Windows e il login sul dominio. Una simile opzione permette ad una macchina Linux con Samba di eseguire le stesse di un PDC di dominio NT. Il supporto delle Active Directory, invece, non è completo ed è presente solo da Samba 3.0. In un simile scenario, a parte la configurazione del server Linux è necessario operare sulle macchine Windows e, in alcuni casi, intervenire sul registro. La procedura, seppur macchinosa, non è complessa e va fatta una volta soltanto.
  • Operare come WINS server (o essere configurato per utilizzare un altro WINS server). In questo caso la configurazione è semplice, rapida ed efficace, non presentando particolari problemi di compatibilità e interoperabilità.
  • Operare come normale File Server per client misti. I metodi di autenticazione possono essere vari e a seconda del metodo possono essere necessarie diversi interventi sul server e sui client: ci si può appoggiare ad un PDC esterno (Windows o Linux), ad un database di login locale, può essere rimossa ogni forma di autenticazione o, come sopra specificato, ci si può appoggiare ad un PDC locale.

– Operare come Master Browser in una rete mista.

Samba NON permette invece di gestire una macchina come Backup Domain Controller di un PDC Windows, non può essere un Backup Browser e non può essere un Secondary Wins Server.

Sul lato client, invece, non ci sono particolari problemi ad usare Samba per connettersi a server Windows o Linux: la condivisione di rete remota viene normalmente montata sul file system locale e ci si può normalmente accedere con i permessi concessi.

Samba come Primary Domain Controller (PDC):

Samba puo` svolgere le attivita` di PDC (Primary Domain Controller) in una rete di client Windows o mista. Le funzionalita` supportate sono:

  • login nel dominio (domain logon) per client Windows NT/2000/XP
  • sicurezza a livello utente per client Windows 98/ME (questi client non hanno il concetto di dominio, ma supportano il login su un dominio)
  • Roaming Profiles, cioe` memorizzazione lato server dei profili utenti che cosi` possono loggarsi su client diversi mantenendo il proprio ambiente
  • Browse list e Master Browser
  • Possibilita` di ottenere la lista degli utenti/gruppi presenti sul PDF Samba

Le funzionalità ancora non supportate sono:

  • Possibilità di fare da Domain Controller in un dominio ADS (Active Directory)
  • Utilizzo come BDC (Backup Domain Controller) in un dominio NT4 con PDC Windows.

Per configurare Samba come PDC di un dominio Windows è necessario:

    • Installare Samba su un server Linux/Unix (tramite sorgenti o RPM)
    • Configurare smb.conf
    • Creare directory per i roaming profile e i domain logons
    • Aggiungere le login e le password per gli utenti e le macchine del dominio
    • Configurare i client Windows per unirsi al dominio.

Le istruzioni che seguono si applicano sia alla versione 2 che alla 3, tranne per la parte relativa alla direttiva add machine script.

Configurazione di smb.conf:

Vediamo un esempio del file di configurazione di un Samba PDC. Varie impostazioni sono comuni a qualsiasi installazione Samba, alcune sono specifiche per un PDC (domain master = yes , security = user , encrypt passwords = yes), altre sono necessarie se si vuole supportare l’esecuzione sul client di uno script al login (logon script e condivisione [netlogon] ) o l’uso dei roaming profiles (logon path , condivisione [profiles]). Valutare attentamente quest’ultima opzione: ha la comodità di separare l’uso di una singola macchina fisica da un singolo utente (tutti gli utenti possono usare tutte le macchine), ma comporta ad ogni login il caricamento o la sincronizzazione di tutti i “Documents and Settings” Windows fra il client e il server, con un potenziale carico sul network non indifferente e maggiori attese da parte dell’utente. Fatto il login l’utente agirà sui file della macchina locale, che poi vengono a loro volta sincronizzati con quelli sul server al momento del logout.

[global] ; Settaggi generali (validi su ogni configurazione Samba)
workgroup = intranet ;E' il nome del Dominio e/o del Workgroup
netbios name = serverone ; E' il nome del server Samba
server string = Samba PDC - Versione %v ; La descrizione del server
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192 ; Settings TCP consigliabili di default; Settaggi per un PDC e un master browser
os level = 64 ; Imposta il valore con cui partecipare alle elezioni per il Master Browser
preferred master = yes ; Forza una elezione quando si avvia e vi partecipa con maggiori possibilità di successo
local master = yes ;Fa partecipare Samba alle elezioni per il Local Master Browser
domain master = yes ;La riga che indica a Samba di operare com PDC
; Gestione utenti e sicurezza
security = user; Impone di autenticare gli utenti localmente. E' necessario su un PDC Samba
encrypt passwords = yes ;Cripta login e password in fase di autenticazione: obbligatorio su un PDC e necessario per interagire senza problemi con client Windows NT o successivi
domain logons = yes; Permette ai client Windows di loggarsi sul dominio autenticandosi con il server Samba
hosts allow = 127.0.0.1 192.168.0.0/255.255.255.0 ; Permette l'accesso solo dal localhost e dalla rete 192.168.0.0/24
add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u  ; (Solo su Samba 3) Aggiunge automaticamente al sistema l'account di una nuova macchina che entra nel dominio
; Gestione logging       
log file = /var/log/samba/log.%m ; Definisce la posizione dei log e indica di creare log diversi on i nomi delle rispettive macchine client
log level = 2 ; Imposta a 2 il livello di logging, visualizzando tutti i file letti e scritti
max log size = 50 ; Imposta a 50 Kb la dimensione massima dei file di log
; User profiles, home directory e netlogon (a queste configurazioni in [global] vanno SEMPRE aggiunte le definizioni rispettivamente di [homes] , [profiles] e [netlogon] riportate più sotto       
logon home = \\%L\%U\.profile ;Definisce la posizione del file .profile (per client Win9x/ME) in \\nomeserver\nomeutente
logon path = \\%L\profiles\%U ; Definisce la posizione della directory profiles (per client WinNT/2k/XP) in \\nomeserver\profiles\nomeutente
logon drive = H: ;Crea l'unità di rete H: al login su client Windows
logon script = netlogon.bat ;Specifica quale script eseguire sul client ad ogni login. Lo script viene cercato nella directory definita nella condivisione [netlogon]
[homes] Share speciale, che definisce la posizione delle home directory
comment = Home ;Directory per ogni User Descrizione della condivisione
browseable = no ; E' bene non rendere pubblicamente visibile le home dei singoli utenti
writeable = yes ; Ogni utente deve poter scrivere nella sua home

[profiles] Share speciale dove vengono scritti i file di profilo per i gli utenti roaming. Ad ogni login e logout il suo contenuto viene sincronizzato con la cartella dei documenti sul computer locale (C:/Documenti/NomeUtente.dominio)
path = /home/profiles ;La directory locale sul server Samba dove sono salvati i profili. Qui vengono, automaticamente, create delle sottodirectroy con i nomi degli utenti
writeable = yes ;I profili sono sincronizzati con il client al login e al logout e devono essere scrivibili
browseable = no ;Come per le home, anche i profili non devono essere visibili agli altri utenti
create mask = 0600 ;La maschera con cui vengono creati i file: Pieni permessi all'owner, nessun permesso per gli altri utenti
directory mask = 0700 ;La maschera con cui vengono create le directory: per l'owner devono essere anche eseguibili (sfogliabili)
[netlogon] Condivisione speciale che contiene gli script che vengono eseguiti sui client Windows al login sul dominio. Devono essere eseguibili su Windows e possono essere utilizzati per varie operazione di amministrazione centralizzata (backup di dati locali, aggiornamento programmi o antivirus, mappatura di nuove condivisioni di rete ecc.)
path = /home/netlogon ;La directory sul server in cui sono contenuti, in sottodirectory         con nome uguale al login dell'utente, gli script definiti con la direttiva "logon script"
read only = yes' ;Questi script devono essere accessbili solo in lettura...
write list = @admin ;... tranne agli utenti del gruppo (@) admin
browseable = no ;Questa è una condivisione di servizio che è inutile mostrare agli altri utenti
Creazione delle directory supplementari:

E’ importante creare directory per i profile e i netlogon definiti in smb.conf con nomi e permessi corretti. Sulla base della configurazione di esempio sopra riportata vanno eseguite le seguenti operazioni sul server Samba (come root):

[root@sambaserver root]# groupadd admin Si crea il gruppo admin, composto da utenti che possono editare gli script di logon. Considerare che  questi script  sono particolarmente importanti, in termini di sicurezza, visto che vengono eseguiti sui client Windows
[root@sambaserver root]# mkdir -m 0775 /home/netlogon Crea la directory /home/netlogon, leggibile ed eseguibile da utti gli utenti e modificabile solo da owner  e ownergroup
[root@sambaserver root]# chown root.admin /home/netlogon Si imposta root come owner della directory e admin come gruppo (con permessi di scrittura)
[root@sambaserver root]# mkdir /home/profiles Si crea una directory per i profili (uguale a quella definita in smb.conf)
[root@sambaserver root]# chmod 1757 /home/profiles Si imposta lo sticky bit e si rende questa directory scrivibile da root e le sue sottodirectory gestibili dai rispettivi utenti, senza possibilità di modificare quelle degli altri
Aggiungere login e password:

Gestire gli utenti di un dominio con Samba non è una procedura immediata e vanno considerati alcuni aspetti fondamentali:

  • Samba utilizza come file delle password /etc/samba/smbpasswd (di default) che presenta una riga per ogni utente (sia di un dominio che di un server con normale autenticazione). In questo file è prevista una riga (con login , password criptata e altri dati) per ogni utente.
  • Per ogni utente presente sul file smbpasswd DEVE essere presente un rispettivo utente sul normale file degli utenti Unix /etc/passwd. Questo perchè Samba agisce sul sistema locale come un normale processo Unix e, anche se viene eseguito come root, accede al filesystem con i permessi degli utenti secondo quanto configurato.
  • Quando Samba agisce come PDC, oltre a creare una login (sia in /etc/samba/smbpasswd che in /etc/passwd) per ogni utente, si deve creare una login speciale per ogni macchina del dominio. Questa login, definita trust account o computer account ha il nome NetBios del computer seguito dal segno dollaro ($). Al primo login da parte del trust account viene generata una sorta di password che viene utilizzata per autenticare le comunicazioni fra il PDC e il client e assicurarsi che non ci siano altre macchine che possano unirsi al dominio con lo stesso nome NetBios.
  • La gestione delle login (sia per gli utenti che per i computer, sia su smbpasswd che su passwd) può essere fatta in maniera manuale, con i comandi sotto riportati, o in maniera automatica, tramite l’uso della direttiva add user script
  • Windows9x/ME anche se possono eseguire un login su un dominio, NON sono strutturati per essere dei client a pieno titolo di un dominio in quanto non ne rispettano le logiche di sicurezza e trust.

Per aggiungere un computer account al dominio manualmente seguire la seguente procedura:

[root@sambaserver root]# groupadd machines
Crea un gruppo per tutte i computer account

 [root@sambaserver root]#  useradd -g machines -d /dev/null -s /bin/false nomeNetBios$
Aggiunge al sistema una login, membro del gruppo machines, senza home directory, senza shell, con nome uguale al nome NetBios della macchina seguito dal segno $. Notare che questo account serve a Samba per agire sul sistema, ma è bene che non possa essere utilizzato per una normale login.

[root@sambaserver root]# passwd -l nomeNetBios$
Viene messo un lock sulla password, in modo da lasciarla nulla e non renderla modificabile se non da root

[root@sambaserver root]# smbpasswd -a -m nomeNetBios
Si crea un nuovo computer account per /etc/samba/smbpasswd e si imposta la relativa password. L'opzione -a permette di  crearlo, se non esiste, l'opzione -m indica che si tratta di un machine account, il nome NetBios della macchina da aggiungere NON va seguito da $, in questo caso, in quando questo carattere viene aggiunto automaticamente. Non è necessario ricordare la password inserita in quanto viene gestita direttamente fra PDC e client del dominio

Se si vuole evitare di aggiungere a mano un nuovo account per ogni macchina del dominio, si può provare ad aggiungere, come sopra indicato, la seguente riga a smb.conf (valida solo per Samba 3):

add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u

Verificare il path e la sintassi del comando useradd e assicurarsi di avere il gruppo machines già creato (groupadd machines).

Per aggiungere a mano le login degli utenti (non delle macchine) del dominio:

[root@sambaserver root]# useradd pippo Aggiunge l'utente al /etc/passwd di sistema
[root@sambaserver root]# passwd pippo Gli imposta la password. Se l'utente non deve accedere al sistema Unix, impostagli una shell nulla in /etc/passwd
[root@sambaserver root]# smbpasswd -a pippo Aggiunge l'utente pippo a /etc/samba/smbpasswd e gli imposta la password

NOTA: Quando si configura un client Windows NT/2k/XP per farlo diventare parte di un dominio, viene richiesta una password di amministratore. In questa situazione si deve usare la login di root con la relativa password, per cui è necessario aggiungere l’utente root anche al smbpasswd:

   [root@sambaserver root]# smbpasswd -a root

Notare che se per caso si cambia la password di root con passwd e non la si aggiorna anche con smbpasswd, la password che fa testo è la seconda, quella presente in /etc/samba/smbpasswd.

Per questo ed altri motivi, una volta creato un utente è buona cosa fare in modo che la sua password sul sistema Unix sia allineata con quella usata da Samba via rete. Per fare in modo che una password cambiata tramite Samba si rispecchi anche sul /etc/passwd locale si devono aggiungere a smb.conf simili righe di configurazione:

unix password sync = yes Imposta la sincronizzazione delle password fra Samba e il sistema Unix locale
passwd program = /usr/bin/passwd %u La riga di comando per cambiare la password Unix. %u è la login dell'utente
passwd chat = *New*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *Enter* new*UNIX*password* %n\n   *Retype*new*UNIX*password* %n\n *passwd: *all* authentication*tokens*updated*successfully* La procedura di matching per gestire le richieste in output di passwd. Assicurarsi che sul proprio sistema siano utilizzate le stesse parole

Purtroppo questa procedura non funziona al contrario: se si cambia con passwd una password Unix, si dovrà cambiarla a mano con smbpasswd per tenere sincronizzata la password Unix con la password Samba.

Esempio di file “netlogon.bat”
   @ECHO OFF   net use P: \\Server\%U   net use T: \\Server\Transito   net use L: \\Server\Dati   net use M: \\Programmazi

Visto che questo file deve essere eseguito al momento del logon su macchine windows, e` bene trasformarlo in un file windows:

   [root@sambaserver root]# unix2dos /home/netlogon/netlogon.bat