Come migrare un PDC Samba basato su LDAP da una macchina vecchia ad una macchina nuova


Date 2 macchine:

MACCHINA A = vecchio PDC Samba
MACCHINA B = nuovo (e futuro) PDC Samba

Stoppare i servizi SMB, NMB, LDAP (RHEL/CentOS)

Copiare i files di configurazione di Samba (smb.conf), LDAP (ldap.conf e slapd.conf) e SMBLDAP-TOOLS (smbldap_bind.conf e smblad.conf) dalla “MACCHINA A” alla “MACCHINA B

A = net getlocal sid
B = net setlocal sid
copiare il SID della vecchia macchina sulla nuova

A = net getdomain sid
B = net setdomain sid
copiare il SID della vecchia macchina sulla nuova

A = slapcat > /root/users.ldif
B = slapadd -l /root/users.ldif

B =  smbpasswd -w (password inserita nel file smb.conf)

Riavviare i servizi SMB, NMB e LDAP.

Annunci

Filtrare le “ricevute di ritorno” con Postfix e Procmail (magari utilizzando Maildir …)


Chi non ha odiato le “ricevute di ritorno” delle mail ?
Di sicuro hanno una affidabilità parziale perchè l’utente deve cliccare su “invia la ricevuta”. Ma questo non ci fornisce la certezza che il destinatario effettivamente abbia letto la nostra mail.
Se, poi, spediamo massivamente mail con ricevuta di ritorno ci ritroveremo inondati di mail …
Linux con i suoi potenti mezzi ci mette a disposizione gli strumenti.
Partiamo da una configurazione “complessa”: abbiamo un server mail con Postfix ed abbiamo “approfittato” delle sue grazie utilizzando Maildir (ovvero ogni singola mail è identificata da un singolo file di testo – situazione comodissima per bypassare la limitazione ed i rischi dati dall’utilizzo dello standard Mailbox).

Iniziamo con la configurazione di Postfix editando il file /etc/postfix/main.cf

vi /etc/postfix/main.cf

ed andiamo a cercare il parametro “mailbox_command” andandolo a modificare in questo modo:

mailbox_command = /usr/bin/procmail -a “$EXTENSION” DEFAULT=/home/$USER/Maildir/ MAILDIR=/home/$USER/Maildir/

Successivamente entriamo nell’utente che ci ha richiesto il filtraggio ed andiamo a creare il file “.procmailrc”

vi .procmailrc

Mettiamo ora all’interno del file le nostre regolette 😀

#directory
MAILDIR = $HOME/Maildir/ # Le email finiranno qui

# sposta le ricevute di lettura in
# /home/utente/Maildir/.Notifiche\ lettura/

:0
* ^Subject.*Letto:*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/

:0
* ^Subject.*Read -*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/

:0
* ^Subject.*Notification for*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/

:0
* ^Subject.*Recapitato:*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/

Et voila ! Il filtraggio è servito !!!

Inserire un PC con Windows XP/7 in un dominio realizzato con Samba


Una volta realizzato un dominio seguendo questo post occorre annettere i vari PC al dominio.
Per farlo più semplicemente esistono delle chiavi di registro da variare:

… per Windows XP realizzare un file chiamato “win_xp.reg” con le seguenti voci:


Windows Registry Editor Version 5.00

;
; This registry key is needed for a Windows XP Client to join
; and logon to a Samba domain. Note: Samba 2.2.3a contained
; this key in a broken format which did nothing to the registry –
; however XP reported “registry key imported”. If in doubt
; check the key by hand with regedit.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]
“requiresignorseal”=dword:00000000
“signsecurechannel”=dword:00000000

… per Windows 7 realizzare un file chiamato “win_7.reg” con le seguenti voci:


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]
; Enable NT-Domain compatibility mode
; Default:
; [value not present]
; “DomainCompatibilityMode”=-
“DomainCompatibilityMode”=dword:00000001

; Disable required DNS name resolution
; Default:
; [value not present]
; “DNSNameResolutionRequired”=-
“DNSNameResolutionRequired”=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters]
; Disable requirement of signed communication
; My Samba (3.0.33) works with signed communication enabled, so no need to disable it.
; Default:
; “RequireSignOrSeal”=dword:00000001
; Disable the usage of strong keys
; Default:
; “RequireStrongKey”=dword:00000001
“RequireStrongKey”=dword:000000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters]
“RequireSignOrSeal”=dword:00000001

I files sono in ogni caso scaricabili dai seguenti link:
registro per Windows XP
registro per Windows 7

Come bloccare la chat web di GMAIL con Dansguardian


La webmail di Gmail offre, al suo interno, la possibilità di “chattare” con altri utenti Gmail.
In pratica ha all’interno un piccolo client Google Talk.
DansGuardian permette di bloccare la chat di Gmail in modo semplice. Basta aggiungere al file “bannedsitelist” (la path completa è: /etc/dansguardian/bannedsitelist) le seguenti URL:

# Blocca la chat di google
chatenabled.mail.google.com
talkgadget.google.com
talk.google.com
talkx.l.google.com

Riferimento: http://www.google.com/support/chat/bin/answer.py?hl=it&answer=161980

Script per la comunicazione agli utenti della scadenza dell’account su un server basato su LDAP


Uno dei problemi più annosi nella gestione di server è quello della scadenza delle utenze.
In molti contesti vengono creati utenti temporanei (magari dipendenti a tempo determinato o stagisti).
LDAP molto agevolemente permette di gestire la scadenza dell’account.
Il problema resta quello di notificare all’utente che il suo account sta per scadere.
Questo è possibile effettuarlo tramite uno script da mettere in crontab …

#!/bin/bash

########################################################
#
# Script per la comunicazione via mail agli utenti
# della scadenza dell’account
#
# BoB 20-01-2010
# Rel. 1.200
########################################################

#############################
# Variabili
#############################
# A chi invio la mail per conoscenza (bcc) ?
bcc=”area-ict@dominio.it”

# variables for LDAP search
ldapHost=”localhost”
ldapContext=”dc=dominio,dc=it”
ldapUser=”cn=admin,dc=dominio,dc=it”
ldapPasswd=”password_server_ldap”
checkTime=”7 days”
checkTimeITA=”7 giorni”
expireDate=”8 days”

# Files di appoggio temporanei
tmpMsg=/root/passwordsToExpireMsg
tmpLdapResult=/root/passwordsToExpire

# Calcolo delle date
# datenow = data odierna + il checktime in formato gg/mm/aa
datenow=`date -d “$checkTime” “+%d/%m/%y”`
# unixtime_datenow = data odierna + il checktime in formato Unix
unixtime_datenow=`date -d “$checkTime” +%s`
# epoch = data di partenza dello UnixTime
epoch=’01/01/1970′
# unixtime_epoch = data di partenza dello UnixTime in formato Unix
unixtime_epoch=`date -d ‘Jan 01 1970 01:00:00’ +%s`

# Inizio della procedura di calcolo delle date
# e stampa a video delle informazioni
clear
echo “Epoch in data (data di nascita dello UNIXtime): “$epoch
echo “Epoch in UNIXtime (data di nascita dello UNIXtime): “$unixtime_epoch
echo “Data odierna: “$datenow
echo “Data odierna in UNIXtime: “$unixtime_datenow
echo “”
echo “Calcolo della differenze tra le date:”
echo “————————————-”
datediff=”$(( ($unixtime_datenow-$unixtime_epoch)/( 60*60*24) ))”
echo “Data arrivo:”$unixtime_epoch “- Data partenza:”$unixtime_datenow
echo “Risultato in giorni: ” $(( ($unixtime_datenow-$unixtime_epoch)/( 60*60*24) ))
echo “Data di riferimento della scadenza password: “$datediff

# Ricerca della data di scandenza delle utenze
# con riferimento ai parametri CN e UID
# cn = common name
# uid = user id
ldapsearch -x -D $ldapUser -w $ldapPasswd -b $ldapContext “(&(objectclass=posixAccount)(shadowExpire=$datediff))” cn uid > $tmpLdapResult

# Estrazione delle informazioni dal file di appoggio
# tmpLdapResult=/root/passwordsToExpire
# Estrai i dati UID e CN.
# Nel caso di “ldap_mail” aggiunge il dominio di riferimento
ldap_uid=`less $tmpLdapResult | gawk ‘/uid:/’`
ldap_mail=`less $tmpLdapResult | gawk ‘/uid:/ {print $2″@dominio.it”}’`
ldap_cn=`/usr/bin/less $tmpLdapResult | gawk ‘/cn:/ {print $2″ ” $3″ ” $4″ ” $5″ “}’`

# Per ogni UID trovato nel file manda una email all’utente
# ed una mail in ccn all’utenza definita come BCC all’inizio del file
for user in $ldap_mail; do
echo;
echo “Gentile utente,” >>$tmpMsg;
echo “si comunica che il tuo account di posta elettronica: $user scadra’ il giorno $datenow.”>>$tmpMsg;
echo “Si prega contattare l’Area servizi ICT aziendale entro $checkTimeITA dal `date +%d/%m/%y` per maggiori informazioni.” >>$tmpMsg;
echo “In caso contrario l’account sara’ sospeso a partire dalle ore 00:00 del `date -d “$expireDate” +%d/%m/%y`.”>>$tmpMsg;
echo “Cordiali saluti.”>>$tmpMsg;
echo>>$tmpMsg;
echo “Questa e’ una mail generata automaticamente dal sistema”>>$tmpMsg;
echo “———————————————————–“>>$tmpMsg;
echo “Area servizi ICT – famosa azienda informatica …”>>$tmpMsg;
echo “Riferimenti telefonici: 091/xxxxxxxxx – 335/xxxxxxxx”>>$tmpMsg;
echo “———————————————————–“>>$tmpMsg;
# Invia la mail preparata e manda una copia in BCC …
cat $tmpMsg | /bin/mail -s “Comunicazione scadenza account [Area ICT/$user]” $user -b $bcc;
# Rimuove il messaggio …
rm $tmpMsg
# Stampa a video le informazioni sugli account scaduti
echo $ldap_uid “- Nome utente: “$ldap_cn;
done

# Rimuove i risultati …
rm $tmpLdapResult

exit 0

Conversione delle mail da MBOX a MAILDIR


Durante la migrazione di un server ho avuto la necessità di trasformare le caselle di posta da MAILBOX a Maildir.
Per fare questo ho utilizzato mb2md (nella versione 3.20 scaricabile qui). Per i più curiosi la home page di riferimento è questa
In seguito mi sono realizzato uno script bash che converte tutto quello che trova in /var/spool/mail e lo mette in /home/$user/Maildir
Questo lo script:

#!/bin/bash
set -x
MAILBOX_DIR=”/var/spool/mail”
#MAILDIR_DIR=”/home/maildir-oldserver”
MAILDIR_DIR=”/home”
[ -d $MAILDIR_DIR ] || mkdir -p $MAILDIR_DIR
cd $MAILBOX_DIR
for user in *; do
mkdir -p $MAILDIR_DIR/$user/Maildir
done

for user in *; do
perl /root/mb2md-3.20.pl -s $MAILBOX_DIR/$user -d $MAILDIR_DIR/$user/Maildir
done

for user in *; do
perl /root/mb2md-3.20.pl -s /home/$user/mail/ -d $MAILDIR_DIR/$user/Maildir
done

for user in *; do
chown -R $user.users $MAILDIR_DIR/$user/
done

Non ho grande esperienza negli script bash … Pertanto si accettano suggerimenti per il miglioramento dello script !

Cambiare il nome del file aggiungendo il caller ID in Elastix (How to change filename with caller ID in Elastix)


Un mio amico mi ha rappresentato una esigenza: ha un centralino VoIP (Elastix) e deve registrare delle conversazioni in uscita.
Fin qui gioco semplice. E’ possibile digitare un codice durante la telefonata oppure, al momento della configurazione della estensione (extension) fare in modo che qualsiasi telefonata venga registrata.
Ma la domanda del mio amico era ancora più “insidiosa” !!!
I files vengono registrati all’interno della cartella “/var/spool/asterisk/monitor” con un nome che rappresenta il numero di estensione, il “timestamp” ed un ID casuale che identifica il numero della telefonata.
L’amico invece voleva, all’interno del nome del file, anche il numero chiamato.
Cosa non semplice, anche perchè non esiste alcuna documentazione.
Ho chiesto anche sul forum di Elastix (vedi qui e qui) ma nessuna “soluzione del problema.
Invece, navigando su internet e con un pizzico (mi permetto) di intuizione credo di avere risolto il problema 😀
Basta modificare il file: /etc/asterisk/extensions_override_freepbx.conf digitando …

vi /etc/asterisk/extensions_override_freepbx.conf

Basta modificare il file da:

[macro-record-enable]
…..
…..
exten => s,n,Set(CALLFILENAME=OUT${ARG1}-${STRFTIME(${EPOCH},,%Y%%d-%H%M%S)}-${UNIQUEID})
…..
…..

a

[macro-record-enable]
…..
…..
exten => s,n,Set(CALLFILENAME=OUT-From:${ARG1}_to:${CALLERID(dnid)}-date:${STRFTIME(${EPOCH},,%d-%m-%Y_%H%M%S)}-CallID:${UNIQUEID})
…..
…..

Il bandolo della matassa è l’aggiunta di “{CALLERID(dnid)}” alla stringa già esistente.
In questo caso il file sarà così formato:

OUT-From_101_to_03351234567-Date:11-11-2010_191436-CallID:1289499276.0.gsm

Spero possa tornare utile a qualcuno …