Newsgroup: it.comp.os.linux.software
Titolo: quota POP

Ho trovato una cosetta carina su 'Linux' (la rivista).
Lo script dovrebbe controllare l'occupazione delle caselle di posta e, in
caso di abuso, inviare una segnalazione.
Ora, premesso che non sono un falco, ho provato a lanciare lo script ma
ricevo un errore:
ls: ls: No such file or directory
Mi sapere aiutare?!
Grazie e ciao a tutti!
--------------------------------
#!/bin/bash
cd /var/spool/mail
list="ls"
limit="1048576"
for i in $list
do
          echo -e "controllo spazio massimo\n" > /tmp/mess
          echo -e "utilizzo utente: quota \n" >> /tmp/mess
          ls -la $i|awk '{if ( $5 > '"${limit}"' ) then system ("echo
\"occupazione account: \"" $5 " bytes >>/tmp/mess")
          system ("mail -s \"stai eccedendo! \"" " "$9 "< /tmp/mess") fi}'
          rm /tmp/mess
done

 ricevo un errore:
Prova a sostituire
list="ls"
con
list="`which ls`"
occhio agli apici inversi.
-- 
Pierluigi De Rosa (
tho...@durin.khazad-dum.net
).
<<      LINUX: the choice of a GNU generation     >>
<<   For my real address... ask the Balrog.       >>
* Sostenete la Lega per la Soppressione dei Troll *

> occhio agli apici inversi.
Ok, non li avevo visti :-(
Ad ogni modo, lo script funziona, tuttavia è insensibile al limite nel senso
che spedisce il msg a tutti, anche a chi ha 0 bytes!!
Poi, come posso fare per limitare fisicamente la casella in modo che oltre
un tot di spazio i msg non vengano recapitati?
Ti ringrazio per l'aiuto e ti saluto
Michele

 un tot di spazio i msg non vengano recapitati?
Per quello devi usare i disk quota quindi va ricompilato il kernel mi
sa..


 fi
Scusa se ti rompo ancora....
a me piacerebbe che funzionasse nel senso che le notifiche dovrebbero andare
SOLO a quelli che hanno SUPERATO il limite impostato mentre lo script **
ls -la $i|awk '{if ( $5 > '"${limit}"' ** sbaglia inviando il msg a tutti,
perchč?!

 perchč?!
Perche' non hai letto la man page di bash.


           echo -e "controllo spazio massimo\n" > /tmp/mess
                                               ^^^^^^^^^^
Script MOOOLTO pericoloso ( attacco su base symlink .... )


 Script MOOOLTO pericoloso ( attacco su base symlink .... )
Mi puoi spiegare meglio?
Il problema potrebbe essere dovuto alla costruzione di uno script apposito
che causi l'esecuzione di comandi arbitrari e che in questo modo i comandi
sarebbero eseguiti con i privilegi del proprietario dello script cui č
collegato il symlink; č questo il problema?
Se fosse cosě, allora ti chiedo come l'eventuale script 'malefico' potrebbe
(nella fattispecie) entrare in gioco?
Il problema non si verificherebbe per script eseguiti, per esempio,
attraverso un'interfaccia tipo il browser?
Tanto per farmi capire un po' di che parliamo, cmq grazie.
Ciao
Michele

 Script MOOOLTO pericoloso ( attacco su base symlink .... )
Cosa intendi?  Anch'io ho scritto qualche script in cui dati
temporanei venivano salvati in /tmp.  Devo preoccuparmi?
Massimiliano
-- 
The Practical Penguin's Notebook - 
http://practicaltux.sourceforge.net
Guide per newbie pratiche al 100%: configurazione della posta
(Postfix, Fetchmail e Procmail), tutorial da zero su Mutt ed Emacs.
ManuaLinux: manuale di base in italiano by Panther

 Mi puoi spiegare meglio?
In genere questo tipo di script viene eseguito nel crontab con privilegi di 
root.
Questo significa che periodicamente viene eseguito con privilegi di root.
Una riga del tipo
# echo "pippo" >/tmp/p
Crea il file /tmp/p
Se però il file /tmp/p esiste ed è un link ad un'altro  file, viene 
sovrascritto quest'ultimo. Ti mostro in pratica quello che si può fare:
[root@therra tmp]# ls -l p
lrwxrwxrwx    1 ghigo     ghigo           11 gen  2 13:29 p -> /etc/passwd
[root@therra tmp]# echo "123" >p
[root@therra tmp]# cat /etc/passwd
123
Così basta creare un link ( nota che non è importante che quel link sia di 
root ) per sovrascrivere un file arbitrariamente.
Non sono un esperto di attacchi symlink, ma già quello che ti ho fatto 
vedere mostra la sua pericolosità.
Per ovviare mi vengono in menete alcune soluzioni:
1) Cancellare il file prima di scriverlo:
rm /tmp/mess
echo -e "controllo spazio massimo\n" > /tmp/mess
2) Scrivere su file temporanei a nome casuale e ricordarsi di cancellarli 
poi ( onde evitare di trovarsi tmp piena ! )
TMPF=/tmp/mess-$RANDOM-$( date + %s )-$$
echo -e "controllo spazio massimo\n" >$TMPF
[...]
rm -f $TMPF
L'opzione 1 NON è completamente sicura, mentre la due ha ottimi margini di 
sicurezza.

 sovrascritto quest'ultimo. Ti mostro in pratica quello che si può fare:
Ok, ti ringrazio per la consulenza, sei stato davvero gentile!
Ciao e alla prossima :-)
Michele