Про имена интерфейсов в Linux
Командой "
"
Командой "
sudo amneziawg-go help" можно создать сетевой интерфейс с именем "help". А вот удалить его уже не так просто)"
sudo ip link delete help" показывает справку. Но решение всё же есть: "sudo ip link delete dev help". Вот это "dev" не является обязательным, но сильно меняет дело)😁1
Задачка для пытливых умов
Я довольно долго руководил командой DevOps и частенько соискателям предлагал одну задачку. Тот кто возглавил команду после меня тоже считает эту задачку интересной. Так что предлагаю подумать над ней читателям)
Итак: какой-то шутник на машине с Linux выполнил команду:
Как починить не перезагружая машину?)
Я довольно долго руководил командой DevOps и частенько соискателям предлагал одну задачку. Тот кто возглавил команду после меня тоже считает эту задачку интересной. Так что предлагаю подумать над ней читателям)
Итак: какой-то шутник на машине с Linux выполнил команду:
chmod -x /bin/chmod
Как починить не перезагружая машину?)
Yellow Leaf
Задачка для пытливых умов Я довольно долго руководил командой DevOps и частенько соискателям предлагал одну задачку. Тот кто возглавил команду после меня тоже считает эту задачку интересной. Так что предлагаю подумать над ней читателям) Итак: какой-то шутник…
Ответ на задачку для пытливых умов
Сразу оговорюсь: если соискатель не знает решения то это не критично. Тут интересно посмотреть на сам поиск решения. Оценить способность думать и искать решение.
Напомню задачу:
Теперь к решениям. На Linux и FreeBSD /bin/chmod обычно elf-бинарник. Для запуска elf-бинарников есть интерпретатор. На Linux это будет так:
На 64-битной системе возможно надо будет так:
Для FreeBSD 32-бит решение такое:
Для FreeBSD 64-бит:
Ещё на многих Linux-системах установлен busybox. При его наличии можно так:
Возможно есть и другие варианты. Если знаете - пишите. Буду рад узнать что-то новое)
Сразу оговорюсь: если соискатель не знает решения то это не критично. Тут интересно посмотреть на сам поиск решения. Оценить способность думать и искать решение.
Напомню задачу:
Какой-то шутник выполнил команду:
chmod -x /bin/chmod
Как починить не перезагружая машину?
Теперь к решениям. На Linux и FreeBSD /bin/chmod обычно elf-бинарник. Для запуска elf-бинарников есть интерпретатор. На Linux это будет так:
/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod
На 64-битной системе возможно надо будет так:
/lib64/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod
Для FreeBSD 32-бит решение такое:
/libexec/ld-elf32.so.1 /bin/chmod +x /bin/chmod
Для FreeBSD 64-бит:
/libexec/ld-elf.so.1 /bin/chmod +x /bin/chmod
Ещё на многих Linux-системах установлен busybox. При его наличии можно так:
/bin/busybox chmod +x /bin/chmod
Возможно есть и другие варианты. Если знаете - пишите. Буду рад узнать что-то новое)
👍3
Yellow Leaf
Ответ на задачку для пытливых умов Сразу оговорюсь: если соискатель не знает решения то это не критично. Тут интересно посмотреть на сам поиск решения. Оценить способность думать и искать решение. Напомню задачу: Какой-то шутник выполнил команду: chmod…
В личку прислали ещё одно решение:
Проверил. Работает.
setfacl -m u::rwx,g::rx,o::rx /bin/chmod
Проверил. Работает.
👍3
Про мессенджер MAX
Последние версии для Linux перевели с Electron на Qt6/QML с использованием WebEngine и вроде бы стало лучше. В окружениях на базе wayland оно даже масштабируется на HiDPI-экранах нормально.
Но при этом при наборе текста Ctrl+Backspace не делает ничего. Хотя во многих приложениях удаляет слово слева от курсора. А ещё если ширину окна уменьшить до меньше ~960dp интерфейс переключается в мобильный режим. В целом наверное не плохо, но 960dp для мобильного режима - многовато как по мне. У Telegram порог переключения ~720dp.
А вы им пользуетесь? Как оно вам?
Последние версии для Linux перевели с Electron на Qt6/QML с использованием WebEngine и вроде бы стало лучше. В окружениях на базе wayland оно даже масштабируется на HiDPI-экранах нормально.
Но при этом при наборе текста Ctrl+Backspace не делает ничего. Хотя во многих приложениях удаляет слово слева от курсора. А ещё если ширину окна уменьшить до меньше ~960dp интерфейс переключается в мобильный режим. В целом наверное не плохо, но 960dp для мобильного режима - многовато как по мне. У Telegram порог переключения ~720dp.
А вы им пользуетесь? Как оно вам?
👍1
В силу специфики работы есть потребность в использовании на локальной машине разных версий PHP. Штатно в Debian 13 идёт PHP 8.4, но на работе есть некоторое количество кода на 7.2.
В среде PHP-разработчиков достаточно известен Ondřej Surý, поддерживающий репозитории для разных дистрибутивов с различными версиями PHP и возможностью их параллельной установки.
К сожалению Андрей ограничил доступ к своим репозиториями с IP-адресов РФ. Но эта проблема имеет решение. А вот то что я пока не смог решить: Андрей не собирает пакеты под i386, но при этом кроме PHP в своих репозиториях держит ещё обновления некоторых системных библиотек. На системах с multilib это приводит к проблеме сломанных зависимостей.
Приходится выбирать: или PHP разных версий, или Wine и поддержка старых принтеров и сканеров.
В качестве обходного манёвра использую Docker. Примерно так:
Не так удобно, хотя и лучше чем ничего. Веселее станет если понадобятся модули, которые не включены в официальный образ PHP и надо будет собирать свой.
В среде PHP-разработчиков достаточно известен Ondřej Surý, поддерживающий репозитории для разных дистрибутивов с различными версиями PHP и возможностью их параллельной установки.
К сожалению Андрей ограничил доступ к своим репозиториями с IP-адресов РФ. Но эта проблема имеет решение. А вот то что я пока не смог решить: Андрей не собирает пакеты под i386, но при этом кроме PHP в своих репозиториях держит ещё обновления некоторых системных библиотек. На системах с multilib это приводит к проблеме сломанных зависимостей.
Приходится выбирать: или PHP разных версий, или Wine и поддержка старых принтеров и сканеров.
В качестве обходного манёвра использую Docker. Примерно так:
docker run --rm -v $(pwd):/app -w /app php:7.2-cli php console migrate
Не так удобно, хотя и лучше чем ничего. Веселее станет если понадобятся модули, которые не включены в официальный образ PHP и надо будет собирать свой.
Если Telegram в РФ окончательно заблокируют то что вы будете делать? Уйдёте на другую площадку (какую?) или будете искать способы обхода блокировки? Используете ли вы какие-то сервисы туннелирования трафика и если да то какие?
Я постараюсь оставаться тут как можно дольше. К сожалению очень много завязано на эту площадку.
Я постараюсь оставаться тут как можно дольше. К сожалению очень много завязано на эту площадку.
👍1
И снова про "chmod -x /bin/chmod":
Накидали ещё решений. Если установлена утилита install:
Ну и немного сомнительный путь, но имеющий право на жизнь:
Выбираем существующий бинарник, который нам не очень нужен прямо сейчас. Например "/usr/bin/telnet". И далее так:
И дальше чиним уже /usr/bin/telnet
Накидали ещё решений. Если установлена утилита install:
install -m 755 /bin/chmod /tmp/chmod
mv /tmp/chmod /bin/chmod
Ну и немного сомнительный путь, но имеющий право на жизнь:
Выбираем существующий бинарник, который нам не очень нужен прямо сейчас. Например "/usr/bin/telnet". И далее так:
cat /bin/chmod > /usr/bin/telnet
/usr/bin/telnet +x /bin/chmod
И дальше чиним уже /usr/bin/telnet
👍2
Оффтоп про политику и математику
Я устал. Очень хочется какой-то предсказуемости. Наше родное государство постоянно находит нарушения законов в тех или иных сервисах и почему-то вместо (или в дополнение?) к ловле нарушителей борется ещё и с самими сервисами. И нельзя быть уверенным что работающий сегодня полезный сервис вдруг не окажется завтра пристанищем мошенников и не будет заблокирован.
А теперь немного математики. Допустим что (по официальным данным) на выборы пришло 87 миллионов человек и 87.28% проголосовали за кандидата X. Это означает что 11 миллионов человек голосовали за кого угодно, но только не за кандидата X.
11 миллионов это суммарное население Татарстана, Чувашии, Нижегородской и Самарской областей. Ну или два Санкт-Петербурга. Это примерно каждый четырнадцатый человек в стране. Или каждый девятый из числа проголосовавших. И это тоже граждане страны и с их интересами тоже нужно считаться.
Даже если победитель выборов известен заранее на выборы всё равно стоит идти. Если вам нравится этот кандидат - ничего страшного если вы отдадите за него свой голос. А если нет - то вы сможете показать что вы есть и что с вами тоже нужно считаться.
Это я всё к чему: осенью будут выборы в государственную думу РФ. Это легальная возможность высказать своё отношение к тому что происходит в стране. Я не призываю голосовать за или против кого-то конкретного. Я считаю что все мы взрослые люди и каждый способен сам принять решение. Я просто хочу заниматься любимым делом. Надеюсь что такая вот математика мне поможет)
Я устал. Очень хочется какой-то предсказуемости. Наше родное государство постоянно находит нарушения законов в тех или иных сервисах и почему-то вместо (или в дополнение?) к ловле нарушителей борется ещё и с самими сервисами. И нельзя быть уверенным что работающий сегодня полезный сервис вдруг не окажется завтра пристанищем мошенников и не будет заблокирован.
А теперь немного математики. Допустим что (по официальным данным) на выборы пришло 87 миллионов человек и 87.28% проголосовали за кандидата X. Это означает что 11 миллионов человек голосовали за кого угодно, но только не за кандидата X.
11 миллионов это суммарное население Татарстана, Чувашии, Нижегородской и Самарской областей. Ну или два Санкт-Петербурга. Это примерно каждый четырнадцатый человек в стране. Или каждый девятый из числа проголосовавших. И это тоже граждане страны и с их интересами тоже нужно считаться.
Даже если победитель выборов известен заранее на выборы всё равно стоит идти. Если вам нравится этот кандидат - ничего страшного если вы отдадите за него свой голос. А если нет - то вы сможете показать что вы есть и что с вами тоже нужно считаться.
Это я всё к чему: осенью будут выборы в государственную думу РФ. Это легальная возможность высказать своё отношение к тому что происходит в стране. Я не призываю голосовать за или против кого-то конкретного. Я считаю что все мы взрослые люди и каждый способен сам принять решение. Я просто хочу заниматься любимым делом. Надеюсь что такая вот математика мне поможет)
👍3👎1🔥1
Чего мне не хватает в спецификации desktop-файлов так это возможности указывать переменные окружения. Конечно их можно подставлять прямо в строку запуска, но это не очень удобно. Хочется прямо в desktop-файле иметь возможность писать что-то такое:
А в диалоге редактирования свойств desktop-файла предусмотреть отдельную вкладку для переменных окружения и при запуске такого файла эти самые переменные передавать приложению.
Начинал писать патч для KDE, но задача оказалась слишком глобальной. Может быть я бы её и вывез, но эта история "out of spec" и даже если патч будет готов - не факт что его примут. Понимаю что для начала нужна доработка стандартов XDG, но тут я не уверен что смогу такое продвинуть, да и не факт что оно кому-то нужно кроме меня.
[Environments]
GDK_SCALE=2
LANG=en_US
А в диалоге редактирования свойств desktop-файла предусмотреть отдельную вкладку для переменных окружения и при запуске такого файла эти самые переменные передавать приложению.
Начинал писать патч для KDE, но задача оказалась слишком глобальной. Может быть я бы её и вывез, но эта история "out of spec" и даже если патч будет готов - не факт что его примут. Понимаю что для начала нужна доработка стандартов XDG, но тут я не уверен что смогу такое продвинуть, да и не факт что оно кому-то нужно кроме меня.
Полезная утилита для Debian/Ubuntu
Недавно открыл для себя утилиту управлениям репозиториями extrepo. С её помощью можно легко находить и подключать дополнительные репозитории. Что-то вроде add-apt-repository из Ubuntu, но больше ориентирована на встроенный список репозиториев.
Использованием очень простое. Найти репозиторий:
Вывод будет примерно таким:
Далее подключаем репозиторий:
Ну и далее всё как обычно)
Настройки утилиты расположены в /etc/extrepo/config.yaml. Из ценного там есть возможность включить поддержку репозиториев с non-DFSG лицензиями.
Недавно открыл для себя утилиту управлениям репозиториями extrepo. С её помощью можно легко находить и подключать дополнительные репозитории. Что-то вроде add-apt-repository из Ubuntu, но больше ориентирована на встроенный список репозиториев.
Использованием очень простое. Найти репозиторий:
extrepo search wine
Вывод будет примерно таким:
Found winehq:
---
description: WineHQ packages
gpg-key-checksum:
sha256: 012326dba01e3853f262af95b840d8e3539a23ede80be2e82f30a721d4678e26
gpg-key-file: winehq.asc
policy: main
source:
Architectures: amd64 i386
Components: main
Suites: trixie
Types: deb deb-src
URIs: https://dl.winehq.org/wine-builds/debian
Далее подключаем репозиторий:
extrepo enable winehq
Ну и далее всё как обычно)
Настройки утилиты расположены в /etc/extrepo/config.yaml. Из ценного там есть возможность включить поддержку репозиториев с non-DFSG лицензиями.
👍1
Про нейросети
Многие мои коллеги используют Cursor IDE или подключают Copilot, DeepSeek или что-то ещё. Я вобщем-то тоже не остался в стороне. У меня есть и зарубежные карты и зарубежные сервера, но мне немного лениво постоянно с этим заморачиваться, поэтому я в итоге начал использовать отечественные продукты, хотя они и не такие мощные как "зарубежные аналоги".
Я попробовал sourcecraft-ассистента от Яндекс, но он там существует как дополнение к платформе sourcecraft.dev и я так и не нашёл способа докупить токены без покупки других ресурсов на платформе.
В итоге я использую VSCode с плагином GigaChat от Сбера. Интересно что PHP-код он подсказывает гораздо лучше sourcecraft. Для борьбы с галлюцинациями хорошо помогают нормальные LSP: для PHP использую intelephense, для Perl - Perl::LanguageServer, для Go - gopls (а есть альтернативы?)).
Всё жду когда за Gigachat начнут брать деньги, но платить скорее всего буду. Собственный мозг не заменяет, но работу упрощает и ускоряет. А ещё многие картинки в этом канале сгенерированы ботом @gigachat_bot.
А вы пользуетесь нейросетями в своей работе? Какими и для каких сценариев?
Многие мои коллеги используют Cursor IDE или подключают Copilot, DeepSeek или что-то ещё. Я вобщем-то тоже не остался в стороне. У меня есть и зарубежные карты и зарубежные сервера, но мне немного лениво постоянно с этим заморачиваться, поэтому я в итоге начал использовать отечественные продукты, хотя они и не такие мощные как "зарубежные аналоги".
Я попробовал sourcecraft-ассистента от Яндекс, но он там существует как дополнение к платформе sourcecraft.dev и я так и не нашёл способа докупить токены без покупки других ресурсов на платформе.
В итоге я использую VSCode с плагином GigaChat от Сбера. Интересно что PHP-код он подсказывает гораздо лучше sourcecraft. Для борьбы с галлюцинациями хорошо помогают нормальные LSP: для PHP использую intelephense, для Perl - Perl::LanguageServer, для Go - gopls (а есть альтернативы?)).
Всё жду когда за Gigachat начнут брать деньги, но платить скорее всего буду. Собственный мозг не заменяет, но работу упрощает и ускоряет. А ещё многие картинки в этом канале сгенерированы ботом @gigachat_bot.
А вы пользуетесь нейросетями в своей работе? Какими и для каких сценариев?
Копировал файл на сервер по scp и получил сообщение:
Это что-то новое)
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
Это что-то новое)
Несколько лет назад довелось заполнять декларацию 3-НДФЛ. Пришлось использовать специальное приложение "Декларация 2023", которое было только под Windows. К счастью оно нормально запускалось под Wine.
Сегодня обнаружил что есть новая версия этого приложения под названием "Декларация 2025" (да, нейминг и версионирование у них довольно простые), которая существует в том числе и в версии для Linux.
Беглое изучения содержимого deb-пакета показало что:
1. Используется фреймворк SkiaSharp и значит скорее всего приложение написано на .NET.
2. При установке пакета запускается скрипт, который перебирая директории в /home пытается всем пользователям создать по ярлыку на рабочем столе, проворачивая при этом на детородном органе и спецификации XDG и возможность иметь домашний каталог не в /home.
3. В окружении wayland на HiDPI-мониторе интерфейс не масштабируется и выглядит очень мелким.
4. RPM-пакета нет. Кому надо - alien вам в руки.
Ну и исходники по традиции нам не положили. Так же нет и описания схемы XML-документа, который эта штука генерирует. Так что написать своё такое же но другое приложение будет затруднительно.
Но в любом случае это огромный шаг вперёд, который можно только приветствовать.
P.S. Ссылку не даю чтобы не обвинили в ангажированности. Кому надо найдёт сам легко и быстро.
Сегодня обнаружил что есть новая версия этого приложения под названием "Декларация 2025" (да, нейминг и версионирование у них довольно простые), которая существует в том числе и в версии для Linux.
Беглое изучения содержимого deb-пакета показало что:
1. Используется фреймворк SkiaSharp и значит скорее всего приложение написано на .NET.
2. При установке пакета запускается скрипт, который перебирая директории в /home пытается всем пользователям создать по ярлыку на рабочем столе, проворачивая при этом на детородном органе и спецификации XDG и возможность иметь домашний каталог не в /home.
3. В окружении wayland на HiDPI-мониторе интерфейс не масштабируется и выглядит очень мелким.
4. RPM-пакета нет. Кому надо - alien вам в руки.
Ну и исходники по традиции нам не положили. Так же нет и описания схемы XML-документа, который эта штука генерирует. Так что написать своё такое же но другое приложение будет затруднительно.
Но в любом случае это огромный шаг вперёд, который можно только приветствовать.
P.S. Ссылку не даю чтобы не обвинили в ангажированности. Кому надо найдёт сам легко и быстро.
Два года назад, в декабре 2023, купил себе ноутбук Digma Pro Magnus M. Машинка для работы даже сейчас выглядит неплохо: 16.1" экран с разрешением 2K, 16GB памяти (почти сразу заменил на 32GB) и 512GB NVMe (сейчас 1TB NVMe + 1TB mSATA) и процессор Ryzen 9 5900HX.
В последнее время стал без всякого повода запускать вентиляторы на полную мощность. Мне это надоело и сегодня ночью я полез решать эту проблему. За два года работы в основном у меня на столе этот девайс двумя вентиляторами всосал столько пыли, сколько не всасывал ни один предыдущий ноутбук. Оба вентилятора были забиты полностью и потому ничего не охлаждали. Минут сорок потратил на чистку системы охлаждения.
Но систему охлаждения хотя бы можно почистить. Гораздо большей печалью оказался заметно вздувшийся аккумулятор. В итоге нашёл в китае и заказал. Срок доставки - месяц. Надеюсь за это время ничего больше не случится.
ЧСХ до этого был HP Probook G6 430, который сначала три года проработал у меня, а потом отправился служить моей жене. Пыли до сих пор столько не набрал и аккумулятор хоть и утратил часть ёмкости но как минимум не вздулся.
Вобщем пока я малость разочарован "отечественным" производителем.
В последнее время стал без всякого повода запускать вентиляторы на полную мощность. Мне это надоело и сегодня ночью я полез решать эту проблему. За два года работы в основном у меня на столе этот девайс двумя вентиляторами всосал столько пыли, сколько не всасывал ни один предыдущий ноутбук. Оба вентилятора были забиты полностью и потому ничего не охлаждали. Минут сорок потратил на чистку системы охлаждения.
Но систему охлаждения хотя бы можно почистить. Гораздо большей печалью оказался заметно вздувшийся аккумулятор. В итоге нашёл в китае и заказал. Срок доставки - месяц. Надеюсь за это время ничего больше не случится.
ЧСХ до этого был HP Probook G6 430, который сначала три года проработал у меня, а потом отправился служить моей жене. Пыли до сих пор столько не набрал и аккумулятор хоть и утратил часть ёмкости но как минимум не вздулся.
Вобщем пока я малость разочарован "отечественным" производителем.
Обнаружил в Debian интересное. С первого февраля apt не доверяет sha1-подписям. Но многие репозитории до сих пор используют sha1-подпись и при использовании apt такие репозитории игнорируются. Однако Discover из состава KDE абсолютно ничего не смущает и он вполне успешно использует репозитории с устаревшей подписью.
Отдельно интересен список репозиториев использующих устаревший алгоритм подписи. Среди них официальные репозитории Microsoft, Softmaker, Sublimetext, Яндекс, Окуляр-ГОСТ, DBeaver и многие другие. Т.е. в основном те, от кого меньше всего ждёшь такого спокойного отношения к безопасности.
Отдельно интересен список репозиториев использующих устаревший алгоритм подписи. Среди них официальные репозитории Microsoft, Softmaker, Sublimetext, Яндекс, Окуляр-ГОСТ, DBeaver и многие другие. Т.е. в основном те, от кого меньше всего ждёшь такого спокойного отношения к безопасности.
Тут обнаружилось что пересланые в Max фоточки доступны по прямым ссылкам всем желающим. Пресс-служба мессенджера отбрехивается в духе "вывсёврёти". Защитники мессенджера настаивают что перебор всех вариантов слишком сложен и потому найти что-то затруднительно.
Я проверил и действительно можно достать прямую ссылку на картинку и картинка по ней доступна. Про возможность перебора ничего пока говорить не готов. Мне это не очень интересно.
Интересно другое: эдак ведь можно использовать Max как CDN: слать картинки друг другу и потом доставать на них ссылки и использовать. Не так удобно как в каком-то S3-совместимом хранилище, но зато бесплатно)
Ну и боюсь что всякие сумрачные люди уже продумывают схемы с использованием этой истории. Ведь мы по сути получаем хранилище, которое доступно дажена парковке во время ограничений интернета (через белые списки).
Я проверил и действительно можно достать прямую ссылку на картинку и картинка по ней доступна. Про возможность перебора ничего пока говорить не готов. Мне это не очень интересно.
Интересно другое: эдак ведь можно использовать Max как CDN: слать картинки друг другу и потом доставать на них ссылки и использовать. Не так удобно как в каком-то S3-совместимом хранилище, но зато бесплатно)
Ну и боюсь что всякие сумрачные люди уже продумывают схемы с использованием этой истории. Ведь мы по сути получаем хранилище, которое доступно даже
К - Костыль
Reg.Ru рассылает своим клиентам письма с уведомлением о том что GlobalSign теперь выпускает сертификаты не на 365 дней, а на 199. И потому при оплате за год будут выпускаться два сертификата: первый на 199 дней, и второй ещё на 166 после окончания основного. Выглядит жутко.
По-моему это скрытая реклама letsencrypt)
Reg.Ru рассылает своим клиентам письма с уведомлением о том что GlobalSign теперь выпускает сертификаты не на 365 дней, а на 199. И потому при оплате за год будут выпускаться два сертификата: первый на 199 дней, и второй ещё на 166 после окончания основного. Выглядит жутко.
По-моему это скрытая реклама letsencrypt)
Yellow Leaf
Тут обнаружилось что пересланые в Max фоточки доступны по прямым ссылкам всем желающим. Пресс-служба мессенджера отбрехивается в духе "вывсёврёти". Защитники мессенджера настаивают что перебор всех вариантов слишком сложен и потому найти что-то затруднительно.…
Попробовал передавать через Max файлы вместо картинок.
Плохая новость: файлы доступны по прямой ссылке вида:
https://fd.oneme.ru/getfile?sig=....&expires=1773273131002&clientType=6&id=351856972&userId=5179147
Хорошая: есть защита от перебора. При попытке перебирать идентификаторы получаем ошибку "invalid signature".
Но в любом случае получается есть возможность сформировать ссылку на какой-то зловред, которая будет открываться всегда. А доставлять её можно например в СМС. Ну или ещё как. Что очень и очень плохо.
Плохая новость: файлы доступны по прямой ссылке вида:
https://fd.oneme.ru/getfile?sig=....&expires=1773273131002&clientType=6&id=351856972&userId=5179147
Хорошая: есть защита от перебора. При попытке перебирать идентификаторы получаем ошибку "invalid signature".
Но в любом случае получается есть возможность сформировать ссылку на какой-то зловред, которая будет открываться всегда. А доставлять её можно например в СМС. Ну или ещё как. Что очень и очень плохо.
Кейс с картинками в Max показал что не все разработчики знают как защищать картинки и прочие файлы от не санкционированного доступа в веб.
Тот же Telegram в веб-версии использует ссылки вида https://web.telegram.org/some-key и даже не смотря на статичность этого some-key доступ имеют только те кто должен его иметь. Сделать это можно по разному. Мне нравится вариант на базе nginx. Делается это примерно так:
1. Описываем именованный location с типом internal (доступ к таким location снаружи закрыт) примерно так:
Далее описываем основной location и правила рерайта в нём:
PHP использовать не обязательно. Обработчик можно написать на чём угодно. Важно чтобы этот обрабтчик:
1. Находил по ключу в БД путь к файлу
2. Смотрел права доступа на файл в БД
3. Проверял имеет ли запрашивающий файл пользователь достаточно прав (на основе cookie и/или заголовков)
4.1 При отсутствии разрешения отдавал ошибку 403
4.2 При наличии разрешения отдавал заголовок:
Здесь используется фича прокси-модуля в nginx: заголовок X-Accel-Redirect не отправляется клиенту, а указывает серверу что отправить клиенту в качестве ответа.
Таким образом запрашивая ссылку https://your.domain/files/somekey пользователь либо получит ошибку 403, либо получит файл. При этом реальное местоположение файла раскрыто не будет и доступа по прямой ссылке не будет.
P.S. Если будет интересно расскажу как в таких системах реализуется загрузка файла и что делать если веб-приложение работает на одном домене, а хранилище файлов находится на другом.
Тот же Telegram в веб-версии использует ссылки вида https://web.telegram.org/some-key и даже не смотря на статичность этого some-key доступ имеют только те кто должен его иметь. Сделать это можно по разному. Мне нравится вариант на базе nginx. Делается это примерно так:
1. Описываем именованный location с типом internal (доступ к таким location снаружи закрыт) примерно так:
location @private {
internal;
root /var/www/private;
}Далее описываем основной location и правила рерайта в нём:
location / {
root /var/www/public;
rewrite ^/files/(.*) /getfile.php?key=$1 last;
}PHP использовать не обязательно. Обработчик можно написать на чём угодно. Важно чтобы этот обрабтчик:
1. Находил по ключу в БД путь к файлу
2. Смотрел права доступа на файл в БД
3. Проверял имеет ли запрашивающий файл пользователь достаточно прав (на основе cookie и/или заголовков)
4.1 При отсутствии разрешения отдавал ошибку 403
4.2 При наличии разрешения отдавал заголовок:
X-Accel-Redirect: @private/path/to/file
Здесь используется фича прокси-модуля в nginx: заголовок X-Accel-Redirect не отправляется клиенту, а указывает серверу что отправить клиенту в качестве ответа.
Таким образом запрашивая ссылку https://your.domain/files/somekey пользователь либо получит ошибку 403, либо получит файл. При этом реальное местоположение файла раскрыто не будет и доступа по прямой ссылке не будет.
P.S. Если будет интересно расскажу как в таких системах реализуется загрузка файла и что делать если веб-приложение работает на одном домене, а хранилище файлов находится на другом.
👍1