Mihai Maties wrote:

>On Monday 25 April 2005 08:51, Emil Sirbu wrote:
>  
>
>>Imi cer scuze, cred ca de la "duminica" mi se trage. Varianta _corecta_
>>
>>useradd -g users -s /bin/false -d /home/"$1" -m "$1"
>>                                        ^  ^    ^  ^
>>(acum, banuiesc, ca nu se mai poate "injecta" cod)
>>    
>>
>
>Ba dimpotriva, se poate. Daca iti dau ca parametru: "$(rm -rf / & echo 
>xcyborg)" ai sa adaugi frumos user-ul xcyborg fara nici o eroare, iar in 
>background incepi sa faci loc pe hard disk...
>  
>
Foarte corect, tocmai d'asta am si intrebat (sunt convins ca sunt o 
gramada de metode de "exploit"-are pe care nu le vad).

>>Desi tot nu am aflat cum pot testa (folosind case) daca un parametru
>>contine spatii,
>>    
>>
>
>Nu stiu ce ai incercat tu, dar dupa cum ti-am spus si intr-un mail anterior 
>asa se poate face :
>
>a="X X"; case "$a" in *' '*) echo "Are spatiu";; esac
>  
>
Multumesc, asa merge.

>>in acest caz particular in care doresc sa accept doar litere si cifre
>>orice "tampenii"
>>(spatii, semne de punctuatie, ...)  ar trebui sa fie respinse pe ramura
>>asta
>>
>>[^0-9a-zA-Z] )   error 'Username can contain only 0-9,a-z,A-Z';;
>>    
>>
>Expresia de mai sus are sens cand verifici un singur caracter nu mai multe. 
>Vezi man bash / Pathname expansion.
>  
>
Era de fapt *[^0-9a-zA-Z]*

Acum cum pare?

Am _function.sh_

function checkusername {

 case "$1" in

  '')                    error 'Username is not set';;

  _* | *_)               error 'Username cannot start/end with _';;

  [0-9]*)                error 'Username cannot start with 0-9';;

  *[!a-zA-Z0-9_]*)       error 'Username can contain only 0-9, a-z, A-Z';;

  *)                     return 0;;

 esac

}

function error {

 echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2

 exit 1

}


Iar in _adduser.sh_ am


PROGNAME=$(basename $0)

. /opt/smbadmin/bin/function.sh

checkusername "$1" 

[...]

useradd -g "$init_group" -s /bin/false -d $root"$1" "$1" 2>&1



--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui