Area de-PHPizzata  —  This area is free from PHP crapware

19 marzo 2010

Installare Grub con RAID 1

Mettendo un software RAID 1 su Debian il disco di boot rimane uno solo.
Se si desidera che anche il disco clone possa effettuare il boot (altrimenti cosa lo si colna a fare?), allora occorre installare Grub su tutti i dischi del RAID:
# grub
grub> root (hd0,0)
grub> setup (hd0)

grub> root (hd1,0)
grub> setup (hd1)

Etichette: ,

13 maggio 2009

PPTP VPN through a Linux router/firewall/NAT

Also known as: how-to allow a LAN client to pass-thru Linux router in order to join an external VPN based upon PPTP


Suppose we have a 192.168.x.0/24 LAN - this vale needs to be adjusted in the following examples.

Easiest scenario: Firestarter firewall facility is installed, up and running, then we're going to add Firestarter rules by simply editing file /etc/firestarter/user-post :
$MPB ip_conntrack_pptp 2>/dev/null
$IPT -N pptp
$IPT -A pptp -p tcp --destination-port 1723 --dst 192.168.x.0/24 -j ACCEPT
$IPT -A pptp -p 47 --dst 192.168.x.0/24 -j ACCEPT
$IPT -I FORWARD -j pptp
$IPT -t nat -N pptp
$IPT -t nat -A pptp -i $IF -p tcp --dport 1723 -j DNAT --to 192.168.x.0-192.168.x.255:1723
$IPT -t nat -A pptp -i $IF -p 47 -j DNAT --to 192.168.x.0-192.168.x.255
$IPT -t nat -A PREROUTING -j pptp

Ok, that's over.

In case the firewall was user-defined by some shell script, the we'll add to such script:
/sbin/modprobe ip_conntrack_pptp 2>/dev/null
/sbin/iptables -N pptp
/sbin/iptables -A pptp -p tcp --destination-port 1723 --dst 192.168.x.0/24 -j ACCEPT
/sbin/iptables -A pptp -p 47 --dst 192.168.x.0/24 -j ACCEPT
/sbin/iptables -I FORWARD -j pptp
/sbin/iptables -t nat -N pptp
/sbin/iptables -t nat -A pptp -i ppp0 -p tcp --dport 1723 -j DNAT --to 192.168.x.0-192.168.x.255:1723
/sbin/iptables -t nat -A pptp -i ppp0 -p 47 -j DNAT --to 192.168.x.0-192.168.x.255
/sbin/iptables -t nat -A PREROUTING -j pptp

Please note: in this case we have to change both the 192.168.x.0/24 LAN value and the actual external interface (ppp0, in our example).

Etichette: ,

25 marzo 2009

VMware server 2 per Linux, errore definendo Permissions

Lo scenario è Vmware 2.0 Server per Debian, build number 122956.
L'errore: dopo l'utente root inserisco un nuovo utente,ma il terzo utente non si riesce ad inserirlo:

The server response included one or more errors

If these problems persists, please contact your system administrator.
Details: RunTimeFault: Database temporarily unavailable or has network problems.

La soluzione... login come root su ssh

cd /etc/vmware/hostd
vi authorization.xml

Qui dobbiamo cercare <NextAceId>11</NextAceId> e sostituirlo con <NextAceId>12</NextAceId>.

Quello che accade è che il default viene inserito con id 11, il primo aggiunto viene inserito con ID 10, ed il nextid ad 11 conflitta con l'utente root già presente. Riavviare vmware:

/etc/init.d/vmware restart

ed il gioco è fatto.

Etichette: ,

23 marzo 2009

AFP server con SSL (per Leopard) senza ddp, per Debian

netatalk, il package che gestisce il protocollo AFP e ddp (Apple File Protocol su TCP, ed il vecchio su appletalk broadcast) non supporta l’autenticazione SSL, e questo lo rende inutilizzabile con Leopard.

È però possibile compilarne una propria copia, con semplicità.

Compilare netatalk


Loggandosi come root, eseguire i seguenti comandi:

cd /usr/src
apt-get install openssl cracklib2 libpam-cracklib cracklib2-dev
apt-get source netatalk
apt-get build-dep netatalk


Completato il download, spostarsi nella directory opportuna ed editare il file rules:

cd netatalk-2.0.3
vi debian/rules


Cercare delle righe come:

DEB_UPDATE_RCD_PARAMS := defaults 50
DEB_CONFIGURE_EXTRA_FLAGS := \
--with-shadow --enable-fhs \
--with-tcp-wrappers --with-mangling \
--enable-timelord --enable-overwrite \
--with-pkgconfdir=/etc/netatalk \
--with-nls-dir=/usr/share/netatalk/nls \
--disable-logger --enable-srvloc \
--enable-pgp-uam --enable-krb4-uam --enable-krbV-uam


Aggiungere in fondo:

DEB_BUILD_OPTIONS=ssl debuild


Questa opzione costruirà netatalk con il supporto SSL per le password.

Salviamo ed usciamo, quindi compiliamo il package:

dpkg-buildpackage


Siamo pronti per installare il package:

cd ..
dpkg -i netatalk_2.xxxx_i386.deb


Modificare la configurazione


Editiamo il file /etc/netatalk/afpd.conf, aggiungendo questa linea:

-uamlist uams_dhx.so,uams_guest.so,uams_clrtxt.so,uams_passwd.so,uams_gss.so


Aggiungeremo la linea sotto al blocco dove parla di autenticazione

# Authentication Methods:
# -uampath Use this path to look for User Authentication Modules.
# ...
# (DHX) for authentication.
-uamlist uams_dhx.so,uams_guest.so,uams_clrtxt.so,uams_passwd.so,uams_gss.so


A questo punto editiamo /etc/defaults/netatalk, e cambiamo i valori da

ATALKD_RUN=yes
PAPD_RUN=yes
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no

a
ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no


Così facendo abbiamo anche disattivato il "vecchio" appletalk.

Se ci sono errori di login…


Se dopo il login otteniamo su Mac una attesa senza fine e su Linux nel log una stringa come

DB_VERSION_MISMATCH: Database environment version mismatch


allora dobbiamo andare nella home dell’utente che si sta cercando di autenticare, e rimuovere la directory .AppleDB.

Riavviamo netatalk, e il gioco è fatto.

Etichette: , ,

31 dicembre 2008

Debian Lenny, VirtualBox e i device USB

Prima di tutto scarichiamo ed installiamo VirtualBox.

Possiamo scaricare la versione che vogliamo dal sito di Virtualbox, oppure possiamo seguire una strada più in stile debian ed avvalerci di apt-get.

apt-get VirtualBox dal sito Sun

Effettuiamo login come root (oppure apriamo una shell di root).

Editiamo il file /etc/apt/sources.list, aggiungendo:
deb http://download.virtualbox.org/virtualbox/debian lenny non-free

Salvare ed uscire.

Ora va scaricata ed installata la chiave di sicurezza pubblica per apt:
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | apt-key add -

Finalmente:
apt-get update
apt-get install virtualbox-2.1

Seguire le istruzioni, installare VirtualBox, definire ed installare una macchina virtuale.
Nota: se non si riesce ad installare i client tools, verificare prima di avviare l’installazione di aver effettuato l’eject di qualunque dispositivo CD/DVD (fisico o virtuale) connesso alla macchina.

Siamo pronti.

Attivare la condivisione di dispositivi USB

Una volta che la macchina è stata configurata, installata e correttamente avviata, se vediamo solo dispositivi USB inaccessibili (in grigio) ecco come procedere.

Verifichiamo di aver aggiunto al gruppo vboxusers gli utenti a cui vogliamo far usare VirtualBox.
Useremo questo stesso gruppo per la sicurezza relativa al mount dei dispositivi USB.

Annotiamo il GID (Group ID, numerico)del gruppo vboxusers:
# cat /etc/group | grep vboxusers
vboxusers:x:117:marco

Useremo il valore numerico del gruppo (“117”, in questo esempio) nel file /etc/fstab.
Editiamo il file /etc/fstab, aggiungiamo questa riga:
none /proc/bus/usb usbfs auto,busgid=117,busmode=0775,devgid=117,devmode=0664 0 0

È tutto.
Ora possiamo definire il filtro per dispositivi USB dai settings della macchina virtuale, e la macchina virtuale li vedrà.

Etichette: ,

28 dicembre 2008

Linux con boot su dischi RAID (sotware raid)

Parlando di Linux il riferimento è a Debian, e quanto segue è stato provato con la Etch (4.0), la Etch-and-one-half (4.5) e la Lenny Beta 2 (5.0b2).

Per poter affrontare il boot di Debian direttamente da RAID vanno tracciate due considerazioni importanti...

1) Come è possibile effettuare il boot da una RAID software

Se il RAID è software allora il supporto RAID (madm) viene attivato solo durante il boot di linux, dopo il caricamento del kernel.
Questo significa che, semplicemente, non è possibile disporre del supporto di un RAID software al momento del boot.
Però... il RAID di tipo 1 (mirror) duplica i contenuti di una partizione sull'altra, e questo significa che possiamo partire da una partizione di boot anche se questa partizione fa parte di un RAID 1.
Significa anche che non è possibile partire né da un RAID 5 né da un RAID 0 che siano gestiti a livello software.

2) Come Linux gestisce il RAID software

Occorre creare delle partizioni per uso "Linux RAID", e poi configurare il RAID software e su questo creare i file system effettivi.
La mappa delle partizioni viene letta al boot, dopo la creazione delle partizioni RAID e la configurazione del RAID software è necessario un riavvio coatto, un hard reset, per ripartire ed utilizzare le partizioni create dal RAID.

Lo sporco trucco per non impazzire è che su ogni RAID software creato mettiamo una sola partizione, un solo file system.
Ci sarebbe anche da discutere del LVM (Logical Volume Manager), ma nei casi in cui utilizzo Linux le partizioni non sono destinate a contrarsi o espandersi, quindi l'ho volutamente ignorato.

Avvio dell’installazione

Avviamo dal CD della netinstall di Debian.
Nel caso della Lenny Beta 2 ho dovuto avviare il CD da windows, cliccare sull'eseguibile di install e quindi riavviare (partendo dall’HD di Windows) in modo che il grub installato sul disco di boot avviasse il CD. Alla fine del setup occorre ricordarsi di andare nel BIOS e settare i dischi RAID 1 come dischi di avvio che vengono prima di quello windows nella sequenza di boot.
Non so perché, ma pare che il setup di Debian sia profondamente cambiato da Etch a Lenny, migrando verso quello di Fedora.
Una delle conseguenze è che con la Lenny il setup parte in grafica.
Comunque partiamo.

Creazione delle partizioni per il RAID

Sui dischi fisici creiamo le partizioni “Linux RAID” destinate a comporre il RAID.

Qui si differenziano i casi: quello in cui disponiamo di 2 soli dischi (tutto RAID1), e quello in cui abbiamo 3 o più dischi (e faremo RAID 1 e RAID 5).

Due soli dischi

Nel caso di due dischi creeremo su ogni disco due partizioni: la prima di tipo "Linux RAID" grande quanto il disco meno uno o due GB, e la seconda il poco che rimane di tipo swap.
Dopo aver creato le partizioni, su entrambi i dischi "Configure software RAID": configuriamo la prima come "RAID 1" (2 unità attive, 0 di scorta).
Reset fisico, necessario per rileggere i dischi, e passiamo alla creazione dei file system.

Tre o più dischi

Nel caso di più dischi il consiglio è di ricordarsi che i link simbolici funzionano alla grande.
Personalmente invece di impicciarmi con i vari mount point creo un RAID 1 per / ( e quindi per /boot e /home ecc), un RAID5 per il resto e monto il RAID5 sotto /storage.
Poi dei comandi "mv" e dei link simbolici serviranno a spostare /etc, /var, /home e /usr sulla partizione RAID 5.
Creo quindi su tutti i dischi (tutti meno uno) una partizione dal alcuni GB, diciamo da 2 a 5, di tipo Linux RAID.
I dischi sono tre o più, almeno due sono stati preparati per il RAID 1. Sull'ultimo disco la partizione, della stessa misura, la useremo come swap.
Su ogni disco creo anche una seconda partizione Linux RAID, della dimensione rimanente.
Scegliamo "Configure software RAID".
Creiamo un RAID 1 con due unità attive e tante unità di scorta quanti sono i dischi rimanenti meno uno che abbiamo usato per lo swap; avremo quindi 0 partizioni di scorta nel caso di tre dischi totali, 1 partizione di scorta con quattro dischi ecc.
Creiamo anche un RAID5, e qui sta a voi decidere se volete tutte le unità ative o -avendone più di tre- se preferite tenerne anche una di scorta (cosa che io in genere preferisco).
Reset fisico, necessario per rileggere i dischi, e passiamo alla creazione dei file system.

Creazione dei file system

Con la Lenny beta ho visto che era necessario passare per il dialogo di configurazione raid software e non cambiare nulla accettando e tornando indietro, altrimenti non rileggeva i RAID creati prima.

Due soli dischi

Sulla partizione RAID 1 mettiamo una Etx3, che montiamo in root (/), flagghiamo di boot e formattiamo.
Le partizioni swap le useremo tutte come swap.

Tre o più dischi

Anche in questo caso partizione RAID 1 (considerevolmente più piccola) mettiamo una Etx3, che montiamo in root (/), flagghiamo di boot e formattiamo.
Sulla RAID5 mettiamo una Ext3, non lo flagghiamo di boot, formattiamo, e lo montiamo custom (in "/storage", appunto).
Rimane la partizione piccola per lo swap, quella avanzata alle partizioni RAID 1, e la destiniamo a tale uso.
Installeremo solo un base system, e dopo il primo riavvio ci adopereremo per spostare /home, /var (e magari /etc) sotto /storage, sostituendole con link simbolici.

Fine. Have fun! :-)




Un esempio di configurazione, con due HD da 750GB...

Partizioni hd1Partizioni hd2 Volumi logici
746GB, linux RAID746GB, linux RAID746GB, RAID 1, ext3, /
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap


Alla fine della configurazione il sistema utilizza un volume ext3 in RAID 1, bootable, e 4 partizioni di swap.
Le partizioni di swap avrebbero anche potuto essere 2, ma pare che partizioni di swap più piccole (da mezzo GB in sù) siano più efficienti, così ho cercato un compromesso tra 8 partizioni da 1 GB e 2 partizioni da 4GB.

Una configurazione alternativa:

Partizioni hd1Partizioni hd2 Volumi logici
146GB, linux RAID146GB, linux RAID146GB, RAID 1, ext3, /
600GB, linux RAID600GB, linux RAID600GB, RAID 1, ext3, /home
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap

Etichette: ,

Linux: scanner USB con SANE o XSANE, per gli utenti

UPDATE: Debian Lenny in distribuzione da fine Aprile 2009 non presenta più il bug, che è stato risolto esattamente come riportato nell'articolo.


Lo scenario: una Debian Lenny con connessa una stampante multifunzione HP, una all-in-one.
"Sane" la supporta, "hplip" è installato e lo supporta, ma lo scanner sembra non funzionare.
Poi la scoperta: esequendo da root sane-find-scanner ottengo:

# sane-find-scanner

# sane-find-scanner will now attempt to detect your scanner. If the
# result is different from what you expected, first make sure your
# scanner is powered up and properly connected to your computer.

# No SCSI scanners found. If you expected something different, make sure that
# you have loaded a kernel SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x03f0 [HP], product=0x7e04 [Deskjet F4100 series]) at libusb:003:006
# Your USB scanner was (probably) detected. It may or may not be supported by
# SANE. Try scanimage -L and read the backend's manpage.

# Not checking for parallel port scanners.

# Most Scanners connected to the parallel port or other proprietary ports
# can't be detected by this program.


E qui scopro che -sorpresa- per l'utente root funziona.

Si tratta di permessi: lo scanner di marca 03f0 e modello 7e04 si trova in /dev/bus/usb/003/006 e può essere utilizzato solo da root, perché ha permission root:root 644.

Sistemare i permessi a mano risolve il problema per ora, ma per risolverlo permanentemente:

1. Aggiungo gli utenti che possono usare lo scanner al gruppo "scanner"

2. in /etc/udev/rules.d edito il file z60_libsane-extras.rules, e nel blocco delle regole degli HP, in fondo, aggiungo un paio di righe:

#Hewlett-Packard Deskjet F4100
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="7e04", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"


Se mi fossi limitato a correggere i permessi al prossimo reboot, o collegando e scollegando lo scanner, avrei dovuto ricominciare.

Salvo, stacco e riattacco lo scanner. Tutto ok.

Etichette: ,

10 maggio 2007

Accedere a Microsoft SQL Server da Perl DBI su Linux

I passi che seguono spiegano come configurare Debian Linux per accedere a Microsoft SQL server.
Eseguendo i vari "apt-get install" andranno ovviamente installate anche le relative dipendenze.
Questi passi vanno eseguiti con privilegi di root.

Installare Perl DBI:
# apt-get install libdbi-perl

Installare Unix ODBC:
# apt-get install unixodbc

Installare i driver ODBC FreeTDS:
# apt-get install tdsodbc

Configurare "/etc/odbc.ini" (le parti sottolineate vanno modificate):
[odbcsource]
Driver = FreeTDS
Description = My ODBC connection
Trace = No
Server = mysqlserver.mycompany.com
Port = 1433
Database = NORTHWIND


Siamo pronti ad accedere alla nostra sorgente ODBC via DBI:
#!/usr/bin/perl -w
use DBI;
use Data::Dumper;

my $dbh = DBI->connect( 'dbi:ODBC:odbcsource', 'user', 'pwd' );
my $query = "Select * from MYTABLE";

my $q = $dbh->prepare( $query ) ;
$q->execute() ;

my($r,@lines);
while ($r = $q->fetchrow_hashref()) { push @lines, $r }
$q->finish();

$dbh->disconnect();

print Dumper( @lines );

Etichette: ,

09 maggio 2007

Apache 2 su Debian autenticato verso Windows Server (Active Directory)

Il problema: autenticare un utente tramite l'autenticazione standard di apache2 utilizzando il login del server Windows 2003, ovvero LDAP/ActiveDirectory

Scenario:
  • Linux Debian
  • Apache2
  • Dominio ActiveDirectory (Windows Server 2003)


Cominciamo con il dire che l'autenticazione vera e propria (nome utente e password) viene fatta tramite kerberos, sebbene eventuali query vengano poi ftte tamite LDAP.

Tutte le operazioni necessarie sono su Debian.

Loggarsi come root pe ri passi che seguono, modificando opportunamente il testo sottolineato.

1. Installare kerberos



Installiamo il modulo libapache2-mod-auth-kerb:
# apt-get install libapache2-mod-auth-kerb


Abilitiamo il modulo kerberos:
# a2enmod auth-kerb


2. Configurare kerberos


Dovremo creare il file auth_kerb.keytab, leggibile da tutti, nella directory /etc/krb5 (crearla se non esiste).

Da qui in poi supponiamo di voler autenticare i nostri utenti verso il dominio ActiveDirectory "FOO.COM" (scriverlo sempre in maiuscolo), che è tipicamente il nome della società. Sostituirlo con il valore opportuno (ad es. "ACME.IT").

Supponiamo anche che il nome DNS della nostra macchina linux sia "debian.foo.com", da sostituire anche in questo caso con il valore opportuno (ad es. "linuxbox.acme.it").

# echo HTTP/debian.foo.com@FOO.COM > /etc/krb5/auth_kerb.keytab
# chmod a+r /etc/krb5/auth_kerb.keytab


Passiamo a configurare "/etc/krb5.conf":

[logging]
default = FILE:/var/log/kerberos
kdc = FILE:/var/log/kerberos
admin_server = FILE:/var/log/kerberos

[libdefaults]
ticket_lifetime = 24000
default_realm = foo.com
dns_lookup_kdc = false

[realms]
FOO.COM = {
    kdc = FOO-DOMAIN-CONTROLLER-1.foo.com:88
    kdc = FOO-DOMAIN-CONTROLLER-2.foo.com:88
}

[domain_realm]
.foo.com = FOO.COM
foo.com = FOO.COM

[appdefaults]
pam = {
    debug = false
    ticket_lifetime = 36000
    renew_lifetime = 36000
    forwardable = true
    krb4_convert = false
}


3. Configurare la sicurezza per una directory


In una directory di prova da mettere sotto sicurezza creiamo un file ".htaccess", leggibile a tutti:

AuthName "FOO.COM Login"
AuthType Kerberos
Krb5Keytab /path/auth_kerb.keytab
KrbAuthRealm FOO.COM
KrbMethodNegotiate off
KrbSaveCredentials off
KrbVerifyKDC off
Require valid-user


4. Verificare il funzionamento


Controlliamo che con il caricamento di kerberos non ci siano errori di sintassi nella configurazione di apache2, eventualmente dovremo disabilitare altri metodi di autenticazione in conflitto (e relative righe di configurazione):
# apache2ctl -t

Se tutto è a posto riavviamo Apache2:
# apache2ctl graceful

A questo punto accedendo alla directory verrà richiesta l'autenticazione HTTP di base.
"john.smith@foo.com" userà il solo nome utente "john.smith", e la sua password.

Da questo momento Apache2 si occuperà per noi di popolare la variabile di ambiente REMOTE_USER con john.smith@FOO.COM una volta che l'utente si sia autenticato.

Rifiniture


Queste righe possono essere elencate a livello di file di configurazione del virtual site:

Krb5Keytab /path/auth_kerb.keytab
KrbAuthRealm FOO.COM
KrbMethodNegotiate off
KrbSaveCredentials off
KrbVerifyKDC off


Queste devono rimanere in un .htaccess o, nel file di configurazione, nella definizione di una directory:

AuthName "FOO.COM Login"
AuthType Kerberos
Require valid-user

Etichette: ,

That’s All Folks!