ТЕХНИЧЕСКА ПОДДРЪЖКА ЗА УЕБ ХОСТИНГ
     
 

Perl: Премахване на текущата директория от пътя за зареждане на модулите (премахване на '.' от @INC)

Състояние към декември 2020: Всички наши сървъри са преминали на Debian Buster. Ако е необходимо текущата директория да бъде в пътя за зареждане на модули, трябва да използвате Метод 2 описан по-долу.

---

Дата: 15 февруари 2019 г.

Тази статия обяснява предстояща промяна в конфигурацията на Perl. Тази промяна може да засегне скриптове, които зареждат модули от текущата работна директория (cwd).

Въведение

Още през 2016 година разработчиците на Debian обявиха, че постепенно ще започнат премахването на текущата директория (cwd / .) от пътя за зареждане на модули (@INC), тъй като това е потенциално опасно, и може да позволи изпълнението на зловреден код при определени обстоятелства. Повече информация може да бъде намерена в мейлинг листата на Debian тук.

След известието, включването на (.) в пътя за зареждане беше направено конфигурационна опция в Debian Stretch - това е текущата версия на Debian на нашите сървъри. 

Текуща конфигурация

Нашите сървъри все още са конфигурирани по начин, по който предишното поведение е запазено - работната директория е все още включена в пътя за зареждане на модули на последна позиция с най-нисък приоритет.

Бъдещата промяна

При следващата главна версия на Debian опцията да оставим '.' в масива @INC в сървърната конфигурация няма да бъде налична. Това означава, че единственият начин да запазите текущото поведение ще бъде да направите настройката в потребителските скриптове. Затова предупреждаваме нашите потребители ползващи Perl, за да могат да се уверят, че техните скриптове не разчитат на включването на текущата директория в пътя за зареждане на модули.

Ако имате Perl скриптове на сайта си, и особено ако те са правени от Вас, Ви съветваме да ги прегледате или да се консултирате с техните разработчици, за да се уверите, че няма да бъдат засегнати от промяната.

Премахване на '.' от @INC сега

Ако искате да елиминирате възможната заплаха за сигурността сега, премахвайки '.' от @INC, можете да използвате един от следните два метода:

Метод 1: Създайте в папка "private" на вашия хостинг акаунт празен файл с име PERL_DISABLE_UNSAFE_INC (/home/$your_CP_username/private/PERL_DISABLE_UNSAFE_INC)

С добавянето на този файл можете да тествате дали Вашите скриптове всъщност зареждат модули от текущата директория, и дали работят правилно, когато текущата директория е премахната от @INC, още преди промяната да бъде направена глобално. С тази настройка се спира зареждането на модули от текущата директория за всички Perl скриптове на вашия акаунт.

Метод 2: Използвайте следния код в началото на Вашите Perl скриптове:
BEGIN { pop @INC if $INC[-1] eq '.' }Tози код спира зареждането на модули от текущата директория за съответния скрипт.

Настройване на '.' като първи източник за зареждане

Ако искате да зареждате модули с приоритет от текущата директория, можете да използвате следния код в началото на скриптовете си:
use lib '.';Моля, имайте предвид, че с този код Вашите скриптове ще продължат да зареждат модули от текущата директория дори след споменатата бъдеща промяната.

Запазване на текущото поведение

Ако искате да запазите текущото поведение след промените трябва да използвате следния код във Вашите Perl скриптове:

Метод 1: Създайте в папка "private" на вашия хостинг акаунт празен файл с име PERL_USE_UNSAFE_INC (/home/$your_CP_username/private/PERL_USE_UNSAFE_INC)

С добавянето на този файл, модулите от текущата директория ще бъдат зареждане с най-нисък приоритет, за всички Perl скриптове на вашия акаунт.

Метод 2: Използвайте следния код в началото на Вашите Perl скриптове:BEGIN { push @INC, '.' }Този код ще направи същата настройка само за съответния скрипт.

ВАЖНО: Използването на PERL_USE_UNSAFE_INC ще е възможно единствено до преминаването към Debian 10.

Краен срок

Въпреки, че не можем да дадем точен краен срок, тъй като не можем да кажем с точност кога ще излезе следващата главна версия на Debian, съветваме нашите клиенти да обърнат внимание на този въпрос незабавно. През февруари 2019, планираме да променим поведението на Perl, така че да НЕ СЕ зареждат модули от текущата директория по подразбиране. Ако вашите скриптове не са съвместими и не можете да ги направите такива преди февруари 2019, можете да използвате PERL_USE_UNSAFE_INC настройката, която ще ви даде още малко време - до преминаването към Debian 10.