Да, у рута есть capability читать/писать файлы вне зависимости от установленных прав. В принципе любому юзеру можно выдать CAP_DAC_OVERRIDE и он будет почти как рут.
А не-рут Меровинген может сделать chmod и вернуть себе право читать-писать, так как он владелец. Но конечно, это надо догадаться проверить права...
IReadOnlyList<string> вообще-то не является классом! Это интерфейс.
И этот интерфейс означает "объект, который имплементирует этот интерфейс, можно использовать как read-only list".
Не больше, не меньше. Никто не обещает, что этот обьект не могут изменять в другом меньше.
А что касается приведения ((List<int>)readonlyList) - в реальной функции, принимающей IReadOnlyList, это запросто может не сработать, потому что вообще-то IReadOnlyList может имплементировать любой другой класс.
Для работы мобильного приложения, которое просто дает доступ к своему роутеру, это не нужно.
Я думаю, приложение Keenetic не даёт прямого доступа к роутеру. Как минимум, для этого каждому роутеру пришлось бы постоянно держать открытое соединение с сервером Keenetic.
Более вероятно, кинетики в облачной базе данных хранят копию настроек, которую через приложение можно изменить. А роутер по расписанию отправляет в облако статус и синхронизирует настройки. И вот эти копии настроек хакер мог слить себе.
Я правильно понимаю, что ваш entrypoint это условно `apt-get install xxx` и потом собственно запуск сервиса? О таком действительно стоит забыть и не вспоминать.
При выполнении docker restart - `apt-get install xxx` выполняется тоже, но благодаря тому, что это тот же самый контейнер и xxx уже установлен в этом контейнере, не выполняет собственно установку.
Это вообще крайне вредная практика. Скажем, в репозитории xxx обновилось, и при новом запуске этот скрипт на старте поставит новую версию xxx, с которой ваш скрипт работать не умеет. И получается, что сервис неожиданно сломался. В противоположность самой идее stateless image, который всегда одинаковый.
А если сделать правильно - через Dockerfile, то эта долгая установка выполнится только один раз при сборке. И хоть файлы в volume поменял, хоть всю хост-машину перезапустил - медленного старта не будет.
> (например, инициализировал свой PRNG из time() как в школе учили)
Но дату-то мы знаем, то самое 18 сентября. А раз мы знаем дату, когда был вызван time() - у нас остаётся всего 86400 вариантов, в какую именно секунду его вызвали.
Двоичное/бинарное дерево можно описать как "есть начальная вершина-корень, в каждой вершине записано значение, и у каждой вершины могут быть левый и правый потомок"
Отсортированное дерево - то, в котором у каждой вершины - все элементы левого потомка и его потомков меньше элемента в вершине, а все элементы правого потомка и его потомков - больше элемента в вершине.
В стандартной библиотеке этого нет, но например в Nito.AsyncEx есть класс AsyncLazy специально для правильного комбинирования Task и Lazy.
И чтобы точно не блокировать потоки - здесь ещё неплохо бы сделать явный Task.Run() или Task.Yield() в начале лямбды. Иначе возможен вариант, когда SemaphoreSlim возьмёт лок без переключения потоков, мы в том же потоке провалимся в синхронную сериализацию, и все пришедшие за таской другие потоки будут висеть на локе в Lazy
Знаю две опенсорсные - https://github.com/valinet/ExplorerPatcher или https://windhawk.net/ с плагином, да. И это действительно хак, потому как никакой штатной возможности кастомизации Windows не даёт. Хорошо хоть теперь можно сдвинуть иконки к левому краю, а не в центре. И первый Microsoft Defender периодически считает вирусом.
Ещё точка же
Есть такой, .ReferenceEquals()
Да, у рута есть capability читать/писать файлы вне зависимости от установленных прав. В принципе любому юзеру можно выдать CAP_DAC_OVERRIDE и он будет почти как рут.
А не-рут Меровинген может сделать chmod и вернуть себе право читать-писать, так как он владелец. Но конечно, это надо догадаться проверить права...
И MassTransit тоже заявили, что переходят к коммерческой модели с новой версией v9 https://masstransit.io/introduction/v9-announcement
Такое вот совпадение.
IReadOnlyList<string> вообще-то не является классом! Это интерфейс.
И этот интерфейс означает "объект, который имплементирует этот интерфейс, можно использовать как read-only list".
Не больше, не меньше. Никто не обещает, что этот обьект не могут изменять в другом меньше.
А что касается приведения ((List<int>)readonlyList) - в реальной функции, принимающей IReadOnlyList, это запросто может не сработать, потому что вообще-то IReadOnlyList может имплементировать любой другой класс.
Для @datecompboy - промахнулся с ответом)
Я думаю, приложение Keenetic не даёт прямого доступа к роутеру. Как минимум, для этого каждому роутеру пришлось бы постоянно держать открытое соединение с сервером Keenetic.
Более вероятно, кинетики в облачной базе данных хранят копию настроек, которую через приложение можно изменить. А роутер по расписанию отправляет в облако статус и синхронизирует настройки. И вот эти копии настроек хакер мог слить себе.
А потом как и со всеми остальными методами отъема аккаунта
Я так понял, что предлагаеют всем сделать по переводу с грязного кошелька, чтобы их деньги тоже стали грязными.
Но это всё-таки ничего особо не даст - .00001 монета и рейтинг KYC изменит на .00001 пункта.
Не содержит асбеста!
Отовраться - проще. Но у невиновного есть вариант "сказать правду", которого у виновного нет по определению.
Кнопки их вставки не хватает. А вот сами смайлики есть - Юникод нам в помощь 😉
Я правильно понимаю, что ваш entrypoint это условно `apt-get install xxx` и потом собственно запуск сервиса? О таком действительно стоит забыть и не вспоминать.
При выполнении docker restart - `apt-get install xxx` выполняется тоже, но благодаря тому, что это тот же самый контейнер и xxx уже установлен в этом контейнере, не выполняет собственно установку.
Это вообще крайне вредная практика. Скажем, в репозитории xxx обновилось, и при новом запуске этот скрипт на старте поставит новую версию xxx, с которой ваш скрипт работать не умеет. И получается, что сервис неожиданно сломался. В противоположность самой идее stateless image, который всегда одинаковый.
А если сделать правильно - через Dockerfile, то эта долгая установка выполнится только один раз при сборке. И хоть файлы в volume поменял, хоть всю хост-машину перезапустил - медленного старта не будет.
Ну а если просто хочется переопределить endpoint в конфиге - то это kubernetes умеет. https://docs.docker.com/reference/cli/docker/compose/restart/ А если действительно нужно сделать что-то перед стартом, то readiness пробы в помощь.
> (например, инициализировал свой PRNG из time() как в школе учили)
Но дату-то мы знаем, то самое 18 сентября. А раз мы знаем дату, когда был вызван time() - у нас остаётся всего 86400 вариантов, в какую именно секунду его вызвали.
Двоичное/бинарное дерево можно описать как "есть начальная вершина-корень, в каждой вершине записано значение, и у каждой вершины могут быть левый и правый потомок"
Отсортированное дерево - то, в котором у каждой вершины - все элементы левого потомка и его потомков меньше элемента в вершине, а все элементы правого потомка и его потомков - больше элемента в вершине.
Или [на Википедии](https://ru.m.wikipedia.org/wiki/Двоичное_дерево_поиска) прочитать
А уж как Хабр его любит ... Три раза надо сказать, чтобы точно появилось ))
Или тестированием механизма принудительного обновления
В стандартной библиотеке этого нет, но например в Nito.AsyncEx есть класс AsyncLazy специально для правильного комбинирования Task и Lazy.
И чтобы точно не блокировать потоки - здесь ещё неплохо бы сделать явный
Task.Run()
илиTask.Yield()
в начале лямбды. Иначе возможен вариант, когда SemaphoreSlim возьмёт лок без переключения потоков, мы в том же потоке провалимся в синхронную сериализацию, и все пришедшие за таской другие потоки будут висеть на локе в LazyМошенники взяли код NFCGate для работы с NFC и передачи через Интернет с их гитхаба, поставили туда свой UI и стали распространять.
Что забавно, в репозитории NFCGate есть примечание
Знаю две опенсорсные - https://github.com/valinet/ExplorerPatcher или https://windhawk.net/ с плагином, да. И это действительно хак, потому как никакой штатной возможности кастомизации Windows не даёт. Хорошо хоть теперь можно сдвинуть иконки к левому краю, а не в центре. И первый Microsoft Defender периодически считает вирусом.
> (не уверен, что в русском языке есть прямые аналоги)
Прямого аналога misdemeanor vs felony нет, но думаю достаточно точным будет "административное" против "уголовного".