Herod2k
19-11-2005, 12:41
Ciao Ragazzi, avrei bisogno di alcuni chiarmenti e mi piacerebbe sapere cosa ne pensate del mio primo bash script ;)
(non ci andate troppo pesanti)
Allora mi è stato chiesto da un'ufficio di fare in modo che le passwords degli utenti samba (macchine windows) cambino ogni mese, io non posso ogni mese andare in questo ufficio a cambiare le passwords, incitato da Pardo in un altro 3ad mi sono scritto un piccolo script.
Il seguente script genera passwords alfabetiche di 8 caratteri (minuscoli), le stampa tramite la stampante attaccata allla macchina linux (Debian) e le manda via e-mails all'amministratore dell'ufficio che le distribuirà ai dipendenti.
Il tutto deve succedere una volta al mese (userò il crontab).
Questo è lo script, premetto che gli utenti hanno tutti lo stesso nome e varia solo dal numero dal numero finale (Ufficio1, Ufficio2, Ufficio3, etc etc):
#!/bin/bash
#************************************************#
# passwords.sh #
# scritto da Herod De Vil #
# 17 Novembre 2005 #
# #
# Cambio passwords in modo generico #
# agli utenti Samba #
#************************************************#
#Parametri
LETTERE=8
MODULO=25
UTENTI=4
NOMEUTENTE=Ufficio
DATA=$(date)
MESECORRENTE=$(date +%B)
ANNOCORRENTE=$(date +%Y)
[email protected]
[email protected]
# pulitura schermo
clear
# Calcolo passwords
for ((b=1; b <= $UTENTI; b++))
do
password=""
for ((a=1; a <= $LETTERE; a++))
do
let "lettera = $RANDOM % $MODULO + 97"
OCTAL=$(printf %o $lettera)
RESULT=$(printf \\$OCTAL)
password=$password$RESULT
done
passwords[$b]=$password
smbpasswd -U $NOMEUTENTE$b -w $password #cambio password
done
# Scrittura delle passwords sul file passwords.txt
testo='Passwords emesse il '$DATA' valide per tutto il mese corrente ('$MESECORRENTE' '$ANNOCORRENTE').\n'
for ((b=1; b <= $UTENTI; b++))
do
testo=$testo'------------------------------------\n'
testo=$testo$NOMEUTENTE$b' = '${passwords[$b]}'\n'
done
testo=$testo'------------------------------------\n'
echo -e $testo > passwords.txt
# Stampa le passwords dalla stampante impostata
lpr -T "Accounts Ufficio" passwords.txt
# Elimina il file con le passwords
rm passwords.txt
# Invio e-mail con i codici
echo -e $testo | mail -s "Accounts Ufficio" -b $BCC $TO
# Messaggio di conferma
echo 'Cambio effettuato '$MESECORRENTE' '$ANNOCORRENTE
Sono sicuro che ci siano modi più puliti per scrivere questo codice,ma non ho trovato dei manuali decenti (almeno secondo me) on-line.
Il file passwords.sh ha i pemessi di esecuzione e lettura solo da root quindi con "visudo" ho aggiunto
Cmnd_Alias SCRIPT=/usr/local/bin/passwords.sh
Server ALL=SCRIPT,NOPASSWD: ALL
Ho aggiunto a /etc/crontab
30 11 1 * * sudo /usr/local/bin/passwords.sh
per eseguire il comando ogni primo del mese alle 11:30 (cosi sono sicuro che c'è qualcuno in ufficio)
Domande:
Sulla mia macchina per fare le prove ho installato Postfix, quando invio le emails con echo -e $testo | mail -s "Accounts Ufficio" -b $BCC $TO le emails su alcuni domini arrivano su altri no, per esempio su tiscali non arivano, su gmail si, è possibile che Tiscali me le filtri come spam perché arrivano come "[email protected]"? Posso impostare il from in modo diverso per fare delle prove?se si, come? Qualche altra idea sul perchè non mi arrivano? il syslog dice "sent"
In questo ufficio i clients vengono spenti il sabato e la domenica e le stampanti vengono spente, e la linea telefonica viene staccata, però il server rimane acceso (nessuno si azzarda a toccarlo), se il primo del mese capita di sabato o domenica, il server cambia le passwords ai clients e non vengono comunicati i cambiamenti, le cose sono2:
1. Gli faccio spegnere il server
2. Gli faccio lasciare accese almeno la stampante (di rete)
3. E' possibile far slittare con cron al primo giorno utile lavorativo, in caso se il giorno capiti di sabato o domenica? Magari dirgli di farlo ogni primo lunedì del mese? Ogni suggerimento è bene accetto.
(non ci andate troppo pesanti)
Allora mi è stato chiesto da un'ufficio di fare in modo che le passwords degli utenti samba (macchine windows) cambino ogni mese, io non posso ogni mese andare in questo ufficio a cambiare le passwords, incitato da Pardo in un altro 3ad mi sono scritto un piccolo script.
Il seguente script genera passwords alfabetiche di 8 caratteri (minuscoli), le stampa tramite la stampante attaccata allla macchina linux (Debian) e le manda via e-mails all'amministratore dell'ufficio che le distribuirà ai dipendenti.
Il tutto deve succedere una volta al mese (userò il crontab).
Questo è lo script, premetto che gli utenti hanno tutti lo stesso nome e varia solo dal numero dal numero finale (Ufficio1, Ufficio2, Ufficio3, etc etc):
#!/bin/bash
#************************************************#
# passwords.sh #
# scritto da Herod De Vil #
# 17 Novembre 2005 #
# #
# Cambio passwords in modo generico #
# agli utenti Samba #
#************************************************#
#Parametri
LETTERE=8
MODULO=25
UTENTI=4
NOMEUTENTE=Ufficio
DATA=$(date)
MESECORRENTE=$(date +%B)
ANNOCORRENTE=$(date +%Y)
[email protected]
[email protected]
# pulitura schermo
clear
# Calcolo passwords
for ((b=1; b <= $UTENTI; b++))
do
password=""
for ((a=1; a <= $LETTERE; a++))
do
let "lettera = $RANDOM % $MODULO + 97"
OCTAL=$(printf %o $lettera)
RESULT=$(printf \\$OCTAL)
password=$password$RESULT
done
passwords[$b]=$password
smbpasswd -U $NOMEUTENTE$b -w $password #cambio password
done
# Scrittura delle passwords sul file passwords.txt
testo='Passwords emesse il '$DATA' valide per tutto il mese corrente ('$MESECORRENTE' '$ANNOCORRENTE').\n'
for ((b=1; b <= $UTENTI; b++))
do
testo=$testo'------------------------------------\n'
testo=$testo$NOMEUTENTE$b' = '${passwords[$b]}'\n'
done
testo=$testo'------------------------------------\n'
echo -e $testo > passwords.txt
# Stampa le passwords dalla stampante impostata
lpr -T "Accounts Ufficio" passwords.txt
# Elimina il file con le passwords
rm passwords.txt
# Invio e-mail con i codici
echo -e $testo | mail -s "Accounts Ufficio" -b $BCC $TO
# Messaggio di conferma
echo 'Cambio effettuato '$MESECORRENTE' '$ANNOCORRENTE
Sono sicuro che ci siano modi più puliti per scrivere questo codice,ma non ho trovato dei manuali decenti (almeno secondo me) on-line.
Il file passwords.sh ha i pemessi di esecuzione e lettura solo da root quindi con "visudo" ho aggiunto
Cmnd_Alias SCRIPT=/usr/local/bin/passwords.sh
Server ALL=SCRIPT,NOPASSWD: ALL
Ho aggiunto a /etc/crontab
30 11 1 * * sudo /usr/local/bin/passwords.sh
per eseguire il comando ogni primo del mese alle 11:30 (cosi sono sicuro che c'è qualcuno in ufficio)
Domande:
Sulla mia macchina per fare le prove ho installato Postfix, quando invio le emails con echo -e $testo | mail -s "Accounts Ufficio" -b $BCC $TO le emails su alcuni domini arrivano su altri no, per esempio su tiscali non arivano, su gmail si, è possibile che Tiscali me le filtri come spam perché arrivano come "[email protected]"? Posso impostare il from in modo diverso per fare delle prove?se si, come? Qualche altra idea sul perchè non mi arrivano? il syslog dice "sent"
In questo ufficio i clients vengono spenti il sabato e la domenica e le stampanti vengono spente, e la linea telefonica viene staccata, però il server rimane acceso (nessuno si azzarda a toccarlo), se il primo del mese capita di sabato o domenica, il server cambia le passwords ai clients e non vengono comunicati i cambiamenti, le cose sono2:
1. Gli faccio spegnere il server
2. Gli faccio lasciare accese almeno la stampante (di rete)
3. E' possibile far slittare con cron al primo giorno utile lavorativo, in caso se il giorno capiti di sabato o domenica? Magari dirgli di farlo ogni primo lunedì del mese? Ogni suggerimento è bene accetto.