>>>>> Artem Chuprina <[email protected]> writes:

 >> В принципе хотелось бы вот такой скрипт, разрешённый в sudoers (у
 >> меня так уже живёт монтирование флешки, это IMHO всё же безопаснее
 >> чем setuid):

 >> #!/bin/sh
 >> echo $1 >/dev/cpuset/tasks
 >> renice -4 -p $1

 >> Но тут невооружённым глазом видна дырка на injection.

 >> Можно ли чем-то её закрыть, не считая варианта "написать то же самое
 >> на питоне"? Там-то проверить тривиально - int(sys.argv[1]), и если
 >> не конвертится - то exception.

 > Можно даже на чистом sh, но проще всего -

 > if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1
 > then :
 > else exit 1
 > fi

 > grep у тебя будет, он в бизибоксе есть.  printf - встроенная команда
 > шелла.  Опять же, включая бизибокс.

        Можно использовать -q вместо > /dev/null, благо grep из BusyBox
        ее умеет:

$ busybox grep --help 2>&1 | grep -F -- -q 
        -q      Quiet. Return 0 if PATTERN is found, 1 otherwise
$ 

        Кроме того, я бы добавил \n к строке формата printf.

        Еще можно воспользоваться expr, который также имеется в BusyBox.
        E. g.:

if test 1 = "$(expr length quote "$1" \
                        = quote "$1" : '[1-9][0-9]*')" ; then

-- 
FSF associate member #7257      Coming soon: Software Freedom Day
http://mail.sf-day.org/lists/listinfo/ planning-ru (ru), sfd-discuss (en)


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Ответить