On Monday 25 April 2005 08:51, Emil Sirbu wrote: > Emil Sirbu wrote: > >Trebuie sa fac un script ce va fi executat de un user cu sudo (de fapt > >va fi apelat dintr-o interfata web). > >Scriptul ia ca prim argument username-ul si trebuie sa-l adauge in sistem > >(+setat parola si adaugat in samba dar nu am ajuns acolo). > > > >Problema este cu parametrul deoarece in script folosesc ceva de genul: > > useradd -g users -s /bin/false -d /home/$1 -m $1 > >si un parametru de forma "vasile -s /bin/bash" ar putea strica jucaria, > > nu? > > 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... > >Eu testez : > > case "$1" in > > '') error 'Username is not set';; > > _* | *_) error 'Username cannot start/end with _';; > > [0-9]*) error 'Username cannot start with 0-9';; > >... > >insa nu stiu sa verific daca $1 contine si spatiu. Am testat si cu > >*[:space:]* dar nu merge. > > 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 > 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. Mihai --- Detalii despre listele noastre de mail: http://www.lug.ro/
