2017-02-12 60 views
2

find -execdir рекомендуется по -exec, что, по словам руководства, имеет неизбежные проблемы с безопасностью и списки в разделе bugs.

man find говорит о -execdir:

Если вы используете эту опцию, вы должны убедиться, что ваша переменная $PATH среда не ссылается .; в противном случае злоумышленник может запускать любые команды, которые им нравятся, оставляя соответствующий файл в каталоге, в котором вы будете запускать -execdir. Тот же применяется к записям в $PATH, которые пусты или которые не являются абсолютными именами каталогов.

bash В сценарии, как же выполнить «должен» и удалить все относительные или пустые элементы данного пособия от $PATH?

ответ

1

Вы можете дезинфицировать ваш PATH с помощью следующей функции Баш:

sanitize_PATH() 
{ 
    local new_path="" 
    local dir 
    while read -r -d: dir 
    do 
     if [[ $dir == /* ]] 
     then 
      new_path="$new_path:$dir" 
     else 
      echo "dropping from PATH: '$dir'" 
     fi 
    done <<< "$PATH:" 
    PATH="${new_path#:}" 
    echo PATH="$PATH" 
} 

Testing:

$ PATH=/usr/local/bin:/usr/bin:/bin  sanitize_PATH 
PATH=/usr/local/bin:/usr/bin:/bin 

$ PATH=:/usr/local/bin:/usr/bin:/bin  sanitize_PATH 
dropping from PATH: '' 
PATH=/usr/local/bin:/usr/bin:/bin 

$ PATH=/usr/local/bin:/usr/bin:/bin:  sanitize_PATH 
dropping from PATH: '' 
PATH=/usr/local/bin:/usr/bin:/bin 

$ PATH=/usr/local/bin:/usr/bin:/bin:  sanitize_PATH 
dropping from PATH: '' 
PATH=/usr/local/bin:/usr/bin:/bin 

$ PATH=.:bin:/usr/local/bin:/usr/bin:/bin sanitize_PATH 
dropping from PATH: '.' 
dropping from PATH: 'bin' 
PATH=/usr/local/bin:/usr/bin:/bin 

$ PATH=/usr/local/bin::/usr/bin:/bin  sanitize_PATH 
dropping from PATH: '' 
PATH=/usr/local/bin:/usr/bin:/bin