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

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!