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/