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
По работе продираюсь через бот-API национального мессенджера. Уже завалил босса получил токен. Делюсь опытом.
1. Регистрируемся на платформе МСП
2. Указываем данные юрлица. Минимум ИП. Самозанятые - мимо.
3. Подтверждаем данные через госуслуги или один из банков на выбор. Выбор банков ограничен Сбером, Альфой и Т-Банком.
4. После подтверждения юрлица подаём заявку на создание бота
5. После ручной модерации ВОЗМОЖНО бот будет создан
6. В случае успеха на предыдщуем пункте получаем токен и приступаем к разработке.
Чтобы нам было веселее:
- Документация весьма поверхностная. К счастью есть готовые библиотеки для Typescript и Go. На последнем я как раз и пишу бота.
- Подтверждение юрлица: после регистрации на платформе надо перейти на госуслуги по ссылке с платформы и зайти с правами генерального директора. Никак иначе. Варианта отправить запрос на госуслуги чтобы гендир его там принял и подтвердил - нет. Поэтому пришлось согласовывать время и в четыре руки проходить авторизацию.
- Постоянно натыкаешься на сообщения "будет реализовано позже". Даже URL slug у бота нельзя задать.
P.S. Прошу прощения за обилие постов про национальный мессенджер. Просто последнее время на работе занимаюсь в основном им.
1. Регистрируемся на платформе МСП
2. Указываем данные юрлица. Минимум ИП. Самозанятые - мимо.
3. Подтверждаем данные через госуслуги или один из банков на выбор. Выбор банков ограничен Сбером, Альфой и Т-Банком.
4. После подтверждения юрлица подаём заявку на создание бота
5. После ручной модерации ВОЗМОЖНО бот будет создан
6. В случае успеха на предыдщуем пункте получаем токен и приступаем к разработке.
Чтобы нам было веселее:
- Документация весьма поверхностная. К счастью есть готовые библиотеки для Typescript и Go. На последнем я как раз и пишу бота.
- Подтверждение юрлица: после регистрации на платформе надо перейти на госуслуги по ссылке с платформы и зайти с правами генерального директора. Никак иначе. Варианта отправить запрос на госуслуги чтобы гендир его там принял и подтвердил - нет. Поэтому пришлось согласовывать время и в четыре руки проходить авторизацию.
- Постоянно натыкаешься на сообщения "будет реализовано позже". Даже URL slug у бота нельзя задать.
P.S. Прошу прощения за обилие постов про национальный мессенджер. Просто последнее время на работе занимаюсь в основном им.
👍1👌1
Оффтоп
Знаю многих людей, которые время от времени что-то покупают на вторичном рынке. Сам тоже отношусь к ним. Вобщем-то это здорово когда какая-то вещь получает вторую жизнь.
Но время от времени сталкиваюсь с людьми, которые делают покупки на вторичном рынке смыслом жизни. Ну и пусть. У каждого свои развлечения и увлечения. Но некоторые становятся настоящими воинами и идут в бой, убеждая других что только так и надо жить.
Когда покупаешь что-то новое эти персонажи начинают тебя убеждать что ты совершил глупость, заплатив втридорога, когда мог купить гораздо дешевле на вторичке. По их мнению подержанная иномарка обязательно лучше новой отечественной, подержанный макбук лучше нового от условного Dexp и т.д. и т.п.
И вот недавно я вдруг понял: вот этим своим походом против новых вещей эти люди буквально мочатся против ветра, ведь чтобы они могли покупать что либо на вторичном рынке, кто-то должен покупать новые вещи.
И чё-т так грустно стало. Не знаю почему. Возможно потому что я опять разочаровался в умственных способностях большого количества людей.
Знаю многих людей, которые время от времени что-то покупают на вторичном рынке. Сам тоже отношусь к ним. Вобщем-то это здорово когда какая-то вещь получает вторую жизнь.
Но время от времени сталкиваюсь с людьми, которые делают покупки на вторичном рынке смыслом жизни. Ну и пусть. У каждого свои развлечения и увлечения. Но некоторые становятся настоящими воинами и идут в бой, убеждая других что только так и надо жить.
Когда покупаешь что-то новое эти персонажи начинают тебя убеждать что ты совершил глупость, заплатив втридорога, когда мог купить гораздо дешевле на вторичке. По их мнению подержанная иномарка обязательно лучше новой отечественной, подержанный макбук лучше нового от условного Dexp и т.д. и т.п.
И вот недавно я вдруг понял: вот этим своим походом против новых вещей эти люди буквально мочатся против ветра, ведь чтобы они могли покупать что либо на вторичном рынке, кто-то должен покупать новые вещи.
И чё-т так грустно стало. Не знаю почему. Возможно потому что я опять разочаровался в умственных способностях большого количества людей.
😁1