⌨️ Anykey на передержке ⌨️
У команды ls есть параметр '--format=long', он же '--format=verbose', большинству знакома его краткая форма '-l'. Параметр позволяет получить много полезной информации, например, права доступа или дату последнего изменения. Эта шпаргалка напомнит какие…
Следующие за типом файла девять символов в каждой строке отображают права доступа.
Эти символы разбиваются на триады (группы из трёх символов). Например, в rw-rw-r-- триады: rw-, rw-, r--.
Первая триада отвечает за права, которые имеет владелец файла (указан в третьем столбце вывода
Вторая — за права группы файла (указана в четвёртом столбце вывода
Третья — для всех остальных.
В каждой триаде первый символ указывает на наличие (r, от англ. read) или отсутствие (-) права на просмотр содержимого файла или каталога.
Второй — право на изменение (w, от англ. write) содержимого файла/каталога.
У третьего комбинаций куда больше, ведь кроме обычного бита выполнения (x, от англ. execute), он может содержать специальный бит или комбинацию специального бита и бита выполнения.
Специальных битов три: setuid, setgid и sticky bit. Начнём с простого:
Бит выполнения.
В случае с файлами он даёт возможность запустить файл как программу. Когда этот бит задан каталогу, мы можем перейти в каталог, узнать тип, размер, права доступа и прочие атрибуты файлов, находящихся в каталоге.
Но что более интересно — мы сможем обратиться к файлу, даже если у нас нет прав на чтение содержимого каталога. Как это работает:
setuid (set-user-ID) бит
В выводе(та самая, которая отвечает за права пользователя-владельца файла) .
Возможные комбинации:
•
•
•
•
На каталоги и неисполняемые файлы этот бит не оказывает влияния.
Исполняемые файлы он позволяет запускать от имени их владельца, что бывает полезно для системных утилит, например, sudo или passwd:
setgid (set-group-ID) бит
В выводе
Если установить этот бит на каталоге, все новые дочерние директории будут наследовать группу родительского каталога.
Это свойство очень полезно для общих рабочих папок, например:
"Липкий" бит (sticky bit)
В выводе
На файлы не оказывает никакого влияния, а установка на каталог служит защитой от удаления чужих данных. Удалять и перемещать файлы в таких каталогах могут только владельцы файлов или каталога, а также root.
Пример каталога с "липким" битом:
Продолжение в комментах ⤵️
Эти символы разбиваются на триады (группы из трёх символов). Например, в rw-rw-r-- триады: rw-, rw-, r--.
Первая триада отвечает за права, которые имеет владелец файла (указан в третьем столбце вывода
ls -l).Вторая — за права группы файла (указана в четвёртом столбце вывода
ls -l). Третья — для всех остальных.
В каждой триаде первый символ указывает на наличие (r, от англ. read) или отсутствие (-) права на просмотр содержимого файла или каталога.
Второй — право на изменение (w, от англ. write) содержимого файла/каталога.
У третьего комбинаций куда больше, ведь кроме обычного бита выполнения (x, от англ. execute), он может содержать специальный бит или комбинацию специального бита и бита выполнения.
Специальных битов три: setuid, setgid и sticky bit. Начнём с простого:
Бит выполнения.
В случае с файлами он даёт возможность запустить файл как программу. Когда этот бит задан каталогу, мы можем перейти в каталог, узнать тип, размер, права доступа и прочие атрибуты файлов, находящихся в каталоге.
Но что более интересно — мы сможем обратиться к файлу, даже если у нас нет прав на чтение содержимого каталога. Как это работает:
# Каталог /tmp/test_dir/ содержит тестовый файл
$ ls -la /tmp/test_dir/
drwxrwxr-x 2 user group 60 янв 8 17:46 .
drwxrwxrwt 8 root root 160 янв 8 17:46 ..
-rw-rw-r-- 1 user group 5 янв 8 17:46 test_file
# Забираем права на чтение
$ chmod -r /tmp/test_dir/
# Теперь мы не можем получить содержимое
$ ls -la /tmp/test_dir/
ls: невозможно открыть каталог '/tmp/test_dir/': Отказано в доступе
# Но благодаря биту выполнения остаётся возможность работать с файлами, если знать путь:
$ echo "Test execute bit" > /tmp/test_dir/test_file
$ cat /tmp/test_dir/test_file
Test execute bit
# Возвращаем права на чтение и забираем права на выполнение
$ chmod +r-x /tmp/test_dir/
# Теперь можем получить список содержимого, но не атрибуты
$ ls -l /tmp/test_dir/
ls: невозможно получить доступ к '/tmp/test_dir/test_file': Отказано в доступе
-????????? ? ? ? ? ? test_file
# Возможность взаимодействия с файлом из каталога мы тоже потеряли
$ cat /tmp/test_dir/test_file
cat: /tmp/test_dir/test_file: Отказано в доступе
setuid (set-user-ID) бит
В выводе
ls -l отображается третьим символом первой триады Возможные комбинации:
•
'x' — установлен только бит выполнения;•
's' — установлен и бит выполнения, и setuid;•
'S' — установлен только setuid бит;•
'-' — в остальных случаях.На каталоги и неисполняемые файлы этот бит не оказывает влияния.
Исполняемые файлы он позволяет запускать от имени их владельца, что бывает полезно для системных утилит, например, sudo или passwd:
ls -l /usr/bin/sudo /usr/bin/passwd
-rwsr-xr-x 1 root root 118168 апр 19 2025 /usr/bin/passwd
-rwsr-xr-x 1 root root 306456 июн 30 2025 /usr/bin/sudo
setgid (set-group-ID) бит
В выводе
ls -l отображается третьим символом второй триады, имеет те же комбинации и тот же эффект на файлы, что setuid.Если установить этот бит на каталоге, все новые дочерние директории будут наследовать группу родительского каталога.
Это свойство очень полезно для общих рабочих папок, например:
ls -al /srv/nfs4/
drwxrwsrwx 2 nobody nogroup 4096 янв 5 01:13 .
drwxr-xr-x 4 nobody nogroup 4096 янв 4 18:55 ..
drwxrwsr-x 2 ivan nogroup 4096 янв 8 21:02 Documents
-rw-rw-r-- 1 sergey nogroup 96 янв 7 20:42 subtitles.txt
"Липкий" бит (sticky bit)
В выводе
ls -l отображается третьим символом третьей триады.На файлы не оказывает никакого влияния, а установка на каталог служит защитой от удаления чужих данных. Удалять и перемещать файлы в таких каталогах могут только владельцы файлов или каталога, а также root.
Пример каталога с "липким" битом:
ls -ld /tmp/
drwxrwxrwt 8 root root 160 янв 8 17:46 /tmp/
Продолжение в комментах ⤵️
👍3❤2🔥2
Вы знаете что с этим делать
UPD: https://core.telegram.org/resources/cidr.txt
91.108.56.0/22
91.108.4.0/22
91.108.8.0/22
91.108.16.0/22
91.108.12.0/22
149.154.160.0/20
91.105.192.0/23
91.108.20.0/22
185.76.151.0/24
2001:b28:f23d::/48
2001:b28:f23f::/48
2001:67c:4e8::/48
2001:b28:f23c::/48
2a0a:f280::/32
UPD: https://core.telegram.org/resources/cidr.txt
🔥5😱2✍1
Сегодня отойду от обычных тем и расскажу как протратить день из жизни, узнать что-то новое о tp-link, а заодно неплохо прокачать свой роутер, накинув кучу полезных современных плюшек.
На фото: TP-Link Archer A6 v2, из коробки умеющий разве что поднять OVPN-сервер. Было решено дать ему вторую жизнь, а заодно познакомиться с одной из популярнейших операционных систем, оптимизированных под ограниченные ресурсы домашних маршрутизаторов (речь, конечно же, про OpenWrt).
При поиске инструкций по прошивке сего устройства в рунете, я наткнулся на кучу однообразных статей, в которых часть вещей как будто бы происходят магическим образом, а знания, которые когда-то были на слуху, - утеряны. Меня, как любителя докапываться до сути, это никак не могло устроить. Поэтому я начал погружение в удивительный мир HEX-редакторов и бутлоадеров, чтобы понять логику и, в случае необходимости, самостоятельно пересобрать прошивку под это или другое устройство производителя.
#openwrt #tplink #archer
На фото: TP-Link Archer A6 v2, из коробки умеющий разве что поднять OVPN-сервер. Было решено дать ему вторую жизнь, а заодно познакомиться с одной из популярнейших операционных систем, оптимизированных под ограниченные ресурсы домашних маршрутизаторов (речь, конечно же, про OpenWrt).
При поиске инструкций по прошивке сего устройства в рунете, я наткнулся на кучу однообразных статей, в которых часть вещей как будто бы происходят магическим образом, а знания, которые когда-то были на слуху, - утеряны. Меня, как любителя докапываться до сути, это никак не могло устроить. Поэтому я начал погружение в удивительный мир HEX-редакторов и бутлоадеров, чтобы понять логику и, в случае необходимости, самостоятельно пересобрать прошивку под это или другое устройство производителя.
#openwrt #tplink #archer
🔥5👍1
План на самом деле прост:
1. Найти для роутера прошивку на базе OpenWrt.
2. Залить её.
3. Поиграться и настроить под себя.
4. В случае разочарования - откатиться.
И уже на первом шаге - облом: для Archer A6 нет готовой прошивки OpenWrt. Ладно, без паники. Иду на 4pda, чтобы узнать какие роутеры TP-Link используют то же железо, чтобы взять их кастомные прошивки за основу. И о, чудо! Выясняю, что TP-Link Archer C6 v2 - это полная копия подопытного роутера, только предназначенная для другого региона. Более того, для него есть готовая прошивка, активно поддерживаемая сообществом OpenWrt! Если по какой-то причине роутер откажется её принимать, значит дело только в регионе и надо будет всего лишь найти способ его изменить.
Скачав прошивку, перехожу ко второму шагу: загрузке оной на маршрутизатор. И здесь стоит копнуть в теорию: TP-Link'и, как и многие вендоры, использует U‑Boot (Universal Boot Loader), который отвечает за первоначальную загрузку устройства: проверка аппаратной части, управление параметрами загрузки, загрузка основной прошивки. Это, считай, GRUB для встраиваемых систем.
Через него также можно восстановить повреждённую прошивку или обновить текущую, а поддержка сетевых протоколов и USB-устройств из коробки позволяет обойтись без программатора.
На подопытном устройстве U‑Boot в режиме восстановления умеет самостоятельно скачивать прошивку по TFTP. Чтобы вы поняли, насколько это удобно, вот что роутер делает полностью в автономном режиме:
1. Назначает одному из своих интерфейсов ip-адрес (в данном случае из подсети 192.168.0.0/24).
2. Помнит адрес TFTP‑сервера (192.168.0.66, жёстко зашит в бутлоадере).
3. Назначает адрес памяти, куда будет загружен файл.
4. Загружает в оперативную память TFTP‑клиент и с его помощью скачивает файл прошивки.
5. Выполняет проверку скачанного файла.
6. В случае успешной проверки, записывает содержимое во Flash-память.
7. Перезапускает устройство для загрузки в обычном режиме.
Согласитесь, это мощно, учитывая что сама ОС не загружена? При этом всё, что требуется от меня - это подключить ПК к роутеру и поднять TFTP‑сервер на нужном адресе в каталоге с прошивкой.
Кстати, обратили внимание на проверку файла бутлоадером в п.5? "Благодаря" ему, не каждая прошивка OpenWrt Archer C6 v2 будет принята его собратом для российского региона (читай: подопытным роутером), поэтому к плану между первым и вторым шагом добавляется ещё один пункт: Проверка и редактирование прошивки.
Даже правильно скомпилированная прошивка может отклониться бутлоадером по трём причинам:
1. В прошивке не указано, что она предназначена для данной модели маршрутизатора (на этом этапе проверяются имя маршрутизатора, версия и регион. Для TP-Link Archer A6 v2 RU в бинарнике обязательно должна быть подстрока
2. Несоответствие md5 суммы, указанной в метаданных прошивки, и суммы, подсчитанной бутлоадером.
3. Версия прошивки ниже, чем текущая (т.е. даунгрейд невозможен).
#openwrt #tplink #archer
1. Найти для роутера прошивку на базе OpenWrt.
2. Залить её.
3. Поиграться и настроить под себя.
4. В случае разочарования - откатиться.
И уже на первом шаге - облом: для Archer A6 нет готовой прошивки OpenWrt. Ладно, без паники. Иду на 4pda, чтобы узнать какие роутеры TP-Link используют то же железо, чтобы взять их кастомные прошивки за основу. И о, чудо! Выясняю, что TP-Link Archer C6 v2 - это полная копия подопытного роутера, только предназначенная для другого региона. Более того, для него есть готовая прошивка, активно поддерживаемая сообществом OpenWrt! Если по какой-то причине роутер откажется её принимать, значит дело только в регионе и надо будет всего лишь найти способ его изменить.
Скачав прошивку, перехожу ко второму шагу: загрузке оной на маршрутизатор. И здесь стоит копнуть в теорию: TP-Link'и, как и многие вендоры, использует U‑Boot (Universal Boot Loader), который отвечает за первоначальную загрузку устройства: проверка аппаратной части, управление параметрами загрузки, загрузка основной прошивки. Это, считай, GRUB для встраиваемых систем.
Через него также можно восстановить повреждённую прошивку или обновить текущую, а поддержка сетевых протоколов и USB-устройств из коробки позволяет обойтись без программатора.
На подопытном устройстве U‑Boot в режиме восстановления умеет самостоятельно скачивать прошивку по TFTP. Чтобы вы поняли, насколько это удобно, вот что роутер делает полностью в автономном режиме:
1. Назначает одному из своих интерфейсов ip-адрес (в данном случае из подсети 192.168.0.0/24).
2. Помнит адрес TFTP‑сервера (192.168.0.66, жёстко зашит в бутлоадере).
3. Назначает адрес памяти, куда будет загружен файл.
4. Загружает в оперативную память TFTP‑клиент и с его помощью скачивает файл прошивки.
5. Выполняет проверку скачанного файла.
6. В случае успешной проверки, записывает содержимое во Flash-память.
7. Перезапускает устройство для загрузки в обычном режиме.
Согласитесь, это мощно, учитывая что сама ОС не загружена? При этом всё, что требуется от меня - это подключить ПК к роутеру и поднять TFTP‑сервер на нужном адресе в каталоге с прошивкой.
Кстати, обратили внимание на проверку файла бутлоадером в п.5? "Благодаря" ему, не каждая прошивка OpenWrt Archer C6 v2 будет принята его собратом для российского региона (читай: подопытным роутером), поэтому к плану между первым и вторым шагом добавляется ещё один пункт: Проверка и редактирование прошивки.
Даже правильно скомпилированная прошивка может отклониться бутлоадером по трём причинам:
1. В прошивке не указано, что она предназначена для данной модели маршрутизатора (на этом этапе проверяются имя маршрутизатора, версия и регион. Для TP-Link Archer A6 v2 RU в бинарнике обязательно должна быть подстрока
{product_name:Archer A6,product_ver:2.0.0,special_id:52550000}, где special_id - это код региона (52550000 - RU, 45550000 - EU, 4A500000 - JP).2. Несоответствие md5 суммы, указанной в метаданных прошивки, и суммы, подсчитанной бутлоадером.
3. Версия прошивки ниже, чем текущая (т.е. даунгрейд невозможен).
#openwrt #tplink #archer
🔥5👍1🤯1
Вооружившись HEX-редактором, находим подстроку 'SupportList' в ASCII, а перед ней захватим в вывод soft_ver, указывающий на версию прошивки:
Чтобы оставить себе план для отступления, меняем
Для модели A6 в прошивке указан регион EU, а значит, бутлоадер её отклонит. Чтобы добавить регион RU, есть два пути:
1. Заменить special_id для A6 (вместо
2. Добавить всю подстроку, оставив совместимость с другими устройствами.
Если выберете второй вариант, обратите внимание, чтобы подстроку окружали байты
# Offset: ≈0x201B
soft_ver:1.9.1...........SupportList:..
{product_name:Archer A6,product_ver:2.0.0,special_id:45550000}..
{product_name:Archer C6,product_ver:2.0.0,special_id:45550000}..
{product_name:Archer C6,product_ver:2.0.0,special_id:52550000}..
{product_name:Archer C6,product_ver:2.0.0,special_id:4A500000}..
Чтобы оставить себе план для отступления, меняем
1.9.1 на 1.3.3 (последняя доступная версия для RU). Это позволит откатиться на сток без танцев с бубном.Для модели A6 в прошивке указан регион EU, а значит, бутлоадер её отклонит. Чтобы добавить регион RU, есть два пути:
1. Заменить special_id для A6 (вместо
45550000 указать 52550000).2. Добавить всю подстроку, оставив совместимость с другими устройствами.
Если выберете второй вариант, обратите внимание, чтобы подстроку окружали байты
0D 0A по аналогии с существующими записями (пример на скрине).👍4🔥2
Также необходимо учесть смещение всех партиций (fwup-ptn partition-table). После добавления строки, содержимое файла увеличилось на 61 символ (что составляет 61 байт), округляем 61 до ближайшего числа, кратного 16 (для выравнивания), получаем 64 байта или 40 в шестнадцатеричной системе.
В качестве обходного метода можете сохранить изменения в новый файл, сравнить размер и перевести разницу количества байт в шестнадцатеричное значение.
Ищем в файле fwup-ptn partition-table и увеличиваем значения ниже на 40. Обратите внимание, что сложение необходимо производить в шестнадцатеричной системе счисления!
*После символа → показан результат сложения
Осталось зафиксировать изменение размера в метаданных (хранится в первых четырёх байтах прошивки). Достаточно также прибавить 40 в шестнадцатеричной СС:
Ищем в файле fwup-ptn partition-table и увеличиваем значения ниже на 40. Обратите внимание, что сложение необходимо производить в шестнадцатеричной системе счисления!
# Offset: ≈0x1014
support-list size 0x00117 → 0x00157
os-image base 0x01130 → 0x01170
file-system base 0x23bdd5 → 0x23be15
extra-para base 0x64bdd9 → 0x64be19
*После символа → показан результат сложения
Осталось зафиксировать изменение размера в метаданных (хранится в первых четырёх байтах прошивки). Достаточно также прибавить 40 в шестнадцатеричной СС:
# Offset: 0x00
00 64 CD F8 → 00 64 CE 38
👍3🔥3
А теперь начинается магия, без которой всё описанное выше не заработает: как только бутлоадер получает прошивку, он начинает чтение содержимого с 21 байта. Перед этим содержимым подставляет магическое число (хардкод) и вычисляет MD5‑хеш всего этого безобразия. После чего считывает с 5 по 20 байт прошивки и сопоставляет полученный хэш с содержимым этих байтов. Совпадает - значит с прошивкой всё ок, можно заливать во флеш-память. Если нет - процесс обрывается.
То есть нам нужно взять это магическое число, которое представляет собой последовательность байт
Команда ниже позволит вычислить итоговую хэш-сумму, которую останется записать в файл :
*Команда для Linux. В Windows используйте WSL или подготовьте аналогичную команду самостоятельно.
Чтобы не проходить через эту рутину при каждом обновлении, я подготовил bash-скрипт, который автоматически скачивает и подготавливает прошивку. Забрать можно в комментариях ⤵️
#openwrt #tplink #archer
То есть нам нужно взять это магическое число, которое представляет собой последовательность байт
7A 2B 15 ED 9B 98 59 6D E5 04 AB 44 AC 2A 9F 4E, приписать к нему содержимое файла с 21 байта, вычислить MD5‑хеш и записать его в байты 0x04-0x13.Команда ниже позволит вычислить итоговую хэш-сумму, которую останется записать в файл :
FILE=openwrt-23.05.5-ath79-generic-tplink_archer-c6-v2-squashfs-factory_edited.bin
(printf '\x7a\x2b\x15\xed\x9b\x98\x59\x6d\xe5\x04\xab\x44\xac\x2a\x9f\x4e'; tail -c +21 "$FILE") | md5sum | cut -d' ' -f1
*Команда для Linux. В Windows используйте WSL или подготовьте аналогичную команду самостоятельно.
Последовательность байт
7A 2B 15 ED 9B 98 59 6D E5 04 AB 44 AC 2A 9F 4E используется для вычисления MD5‑хеш во всех современных маршрутизаторах TP-Link, поэтому при подготовке прошивок для других моделей алгоритм останется тем же.Чтобы не проходить через эту рутину при каждом обновлении, я подготовил bash-скрипт, который автоматически скачивает и подготавливает прошивку. Забрать можно в комментариях ⤵️
#openwrt #tplink #archer
🔥5👍1
Наконец-то можно заливать прошивку!
Кладём файл прошивки в /tmp/tftp/ArcherC6v2_tp_recovery.bin и раздаём его по tftp:
*Для Windows можно использовать tftpd64 или аналоги
Теперь:
1. Выключаем роутер.
2. Подключаемся к его первому LAN-порту.
3. Зажимаем кнопку Reset (понадобится скрепка или игла) и, не отпуская, включаем устройство.
4. Не отпускаем Reset, пока через 5 секунд не загорится индикатор WPS/Lock в виде замка.
Если всё сделано правильно, через несколько секунд роутер скачает прошивку и начнёт её установку, о чём будет свидетельствовать мигающий индикатор питания. Веб-интерфейс будет доступен по адресу http://192.168.0.1
Готовую прошивку релизной OpenWrt 24.10.5 закину в комменты. С неё можно точно также через TFTP вернуться на сток ⤵️
#openwrt #tplink #archer
Кладём файл прошивки в /tmp/tftp/ArcherC6v2_tp_recovery.bin и раздаём его по tftp:
mkdir -p /tmp/tftp
cp openwrt-23.05.5-archer-a6-v2-ru-factory.bin /tmp/tftp/ArcherC6v2_tp_recovery.bin
sudo ip addr add 192.168.0.66/24 dev enp2s0 # Назначаем интерфейсу enp2s0 адрес 192.168.0.66 с маской 255.255.255.0
sudo dnsmasq --no-daemon --port=0 --enable-tftp --tftp-root=/tmp/tftp --interface=enp2s0 --log-queries --log-facility=- # Запускаем TFTP-сервер
*Для Windows можно использовать tftpd64 или аналоги
Файл прошивки обязательно должен называться ArcherC6v2_tp_recovery.bin, это хардкод на стороне бутлоадера.
Теперь:
1. Выключаем роутер.
2. Подключаемся к его первому LAN-порту.
3. Зажимаем кнопку Reset (понадобится скрепка или игла) и, не отпуская, включаем устройство.
4. Не отпускаем Reset, пока через 5 секунд не загорится индикатор WPS/Lock в виде замка.
Если всё сделано правильно, через несколько секунд роутер скачает прошивку и начнёт её установку, о чём будет свидетельствовать мигающий индикатор питания. Веб-интерфейс будет доступен по адресу http://192.168.0.1
Готовую прошивку релизной OpenWrt 24.10.5 закину в комменты. С неё можно точно также через TFTP вернуться на сток ⤵️
#openwrt #tplink #archer
👍3🔥3
Бонус: Откат на любую стоковую прошивку с любой версии OpenWrt.
Этот пункт подробно нигде не описывается, так что если давно искали как откатиться с версии 1.9.1 - велком!
Подключаемся по ssh к роутеру и узнаём версию ядра:
Скачиваем модуль kmod-mtd-rw для своей версии ядра и прошивки по ссылке
Пример ссылки для OpenWrt 24.10.5: https://downloads.openwrt.org/releases/24.10.5/targets/ath79/generic/kmods/6.6.119-1-35ef4dd36891d37023436baa842fa311/kmod-mtd-rw_6.6.119.2021.02.28~e8776739-r1_mips_24kc.ipk
Закидываем на роутер, инсталлируем, загружаем, применяем:
*Для Windows можно использовать Putty и WinSCP
После этого поднимаете TFTP-сервер и повторяете действия по заливке из предыдущего сообщения. Т.к. версия 0.0.1, лоадер примет любую корректную прошивку.
#openwrt #tplink #archer
Этот пункт подробно нигде не описывается, так что если давно искали как откатиться с версии 1.9.1 - велком!
Подключаемся по ssh к роутеру и узнаём версию ядра:
SSH_OPTS="-o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa"
ssh $SSH_OPTS root@192.168.1.1
uname -r
Скачиваем модуль kmod-mtd-rw для своей версии ядра и прошивки по ссылке
https://downloads.openwrt.org/releases/<ВЕРСИЯ_OPENWRT>/targets/ath79/generic/kmodsПример ссылки для OpenWrt 24.10.5: https://downloads.openwrt.org/releases/24.10.5/targets/ath79/generic/kmods/6.6.119-1-35ef4dd36891d37023436baa842fa311/kmod-mtd-rw_6.6.119.2021.02.28~e8776739-r1_mips_24kc.ipk
Закидываем на роутер, инсталлируем, загружаем, применяем:
scp -O $SSH_OPTS /tmp/kmod-mtd-rw.ipk root@192.168.1.1:/tmp/
# Инсталлируем (--force-depends если хеш ядра отличается)
opkg install --force-depends /tmp/kmod-mtd-rw.ipk
# Загружаем модуль - снимает read-only со всех MTD
insmod mtd-rw i_want_a_brick=1
# Проверяем, что флаги стали 0xc00 (writeable)
cat /sys/class/mtd/mtd6/flags
# Делаем бэкап раздела tplink
dd if=/dev/mtd6 of=/tmp/tplink_backup.bin
# Копируем для редактирования
cp /tmp/tplink_backup.bin /tmp/tplink_patched.bin
# Задаём новую версию на offset 0x9408 внутри раздела
printf 'soft_ver:0.0.1\x0a\x00' | dd of=/tmp/tplink_patched.bin bs=1 seek=$((0x9408)) conv=notrunc
# Проверяем
strings -t x /tmp/tplink_patched.bin | grep soft_ver
# Записываем изменения
mtd write /tmp/tplink_patched.bin tplink
# Проверяем результат
strings -t x /dev/mtdblock6 | grep soft_ver
# Должно показать: soft_ver:0.0.1
*Для Windows можно использовать Putty и WinSCP
После этого поднимаете TFTP-сервер и повторяете действия по заливке из предыдущего сообщения. Т.к. версия 0.0.1, лоадер примет любую корректную прошивку.
#openwrt #tplink #archer
🔥5👍1
Про Linux-клиент OpenVPN 3 и подводные камни дружбы с ним сегодняшний ночной пост, дамы и господа!
В Linux OpenVPN имеет имена пакетов
openvpn3 несомненно лучше, но(!) по-прежнему не завезли GUI. И тут речь даже не про сам клиент, а про плагин для NetworkManager, который удобно встраивается в интерфейс, умеет кушать конфиги ovpn или wg и удобно структурировать всё это дело в меню быстрого доступа.
Т.е. мне не нужно скачивать, устанавливать, а потом каждый раз перед подключением запускать клиент, будь то вышеперечисленные wg и ovpn или какой-нибудь OpenConnect (Cisco AnyConnect). Это всё уже вшито в оболочку, подключение к приватной сети происходит так же просто, как подключение к Wi-Fi (см. скрин).
#openvpn3 #linux
В Linux OpenVPN имеет имена пакетов
openvpn и openvpn3. Второй - новая и более крутая итерация, в которой появились менеджеры конфигураций и сессий, поддержка D-Bus, а значит, теперь, чтобы поднять коннект, права root не нужны (наконец-то!), да и в целом управление стало гибче (если хотите копнуть глубже, велком: readme).openvpn3 несомненно лучше, но(!) по-прежнему не завезли GUI. И тут речь даже не про сам клиент, а про плагин для NetworkManager, который удобно встраивается в интерфейс, умеет кушать конфиги ovpn или wg и удобно структурировать всё это дело в меню быстрого доступа.
Т.е. мне не нужно скачивать, устанавливать, а потом каждый раз перед подключением запускать клиент, будь то вышеперечисленные wg и ovpn или какой-нибудь OpenConnect (Cisco AnyConnect). Это всё уже вшито в оболочку, подключение к приватной сети происходит так же просто, как подключение к Wi-Fi (см. скрин).
#openvpn3 #linux
👍2
И раз плагин OpenVPN 3 для NetworkManager ещё не дописали, будем юзать CLI:
Но если бы всё было так просто, этого поста бы не было🤓
Первое с чем пришлось столкнуться - после дисконнекта пропал Интернет. Точнее, как позже выяснилось, перестали резолвиться DNS-имена и ситуацию спас рестарт сервиса
В общем, openvpn3 нужно явно ткнуть, что в системе используется
Теперь при коннекте resolv.conf остаётся нетронутым, а после дисконнекта имена резолвятся штатно. Казалось бы всё, но... Теперь все запросы шли на сервера DNS за ВПНом, что не всегда секьюрно(особенно, если VPN корпоративный 🤫) .
Чтобы через VPN DNS шли только запросы к доменам, пушнутым сервером (например, example.com), нужно установить dns-scope tunnel:
После подключения к VPN резолвинг example.com и google.com должны происходить через разные DNS:
Немного справки:
- Конфиг netcfg хранится в /var/lib/openvpn3/netcfg.json и переживает рестарт
-
- Если изменения не применяются, убедитесь, что старые процессы openvpn3 были завершены перед проверкой.
Кому-то эта информация сэкономит часы дебага в будущем.
#openvpn3 #splitdns #linux #cli #quickstart
# Импортируем конфиг
openvpn3 config-import --config </path/to/config.ovpn> to /profile .ovpn --name <Profile's_Name> --persistent
# Подключаемся
openvpn3 session-start --config <Profile's_Name>
# Смотрим список активных коннектов
openvpn3 sessions-list
# Отключаемся
openvpn3 session-manage --disconnect --config <Profile's_Name>
Первое с чем пришлось столкнуться - после дисконнекта пропал Интернет. Точнее, как позже выяснилось, перестали резолвиться DNS-имена и ситуацию спас рестарт сервиса
systemd-resolved. Оказалось, пока клиент ovpn активен, он перезатирает файл /etc/resolv.conf, чего при нормальной работе происходить не должно. /etc/resolv.conf — конфигурационный файл, который определяет параметры DNS‑резолвера (системы преобразования доменных имён в IP‑адреса). Когда приложение запрашивает IP‑адрес для домена (например, google.com), система сначала проверяет локальный кеш, а затем обращается к DNS‑серверам из этого файла.
Если в системе есть systemd-resolved (как в моём случае), /etc/resolv.conf становится симлинком на /run/systemd/resolve/stub-resolv.conf. Если кто-то подменит этот файл, последствия могут быть самые разные.
В общем, openvpn3 нужно явно ткнуть, что в системе используется
systemd-resolved и самовольно менять /etc/resolv.conf - нехорошо:# Смотрим текущий конфиг
sudo openvpn3-admin netcfg-service --config-show
# У меня в выводе было "resolv-conf file: /etc/resolv.conf", из-за этого рушилась работа systemd-resolved.
# Объясняем openvpn3, что у нас systemd-resolved и не нужно напрямую перезатирать resolv.conf
sudo openvpn3-admin netcfg-service --config-unset resolv-conf
sudo openvpn3-admin netcfg-service --config-set systemd-resolved true
# Киляем openvpn3-netcfg
sudo kill $(pgrep -f openvpn3-service-netcfg)
Теперь при коннекте resolv.conf остаётся нетронутым, а после дисконнекта имена резолвятся штатно. Казалось бы всё, но... Теперь все запросы шли на сервера DNS за ВПНом, что не всегда секьюрно
Чтобы через VPN DNS шли только запросы к доменам, пушнутым сервером (например, example.com), нужно установить dns-scope tunnel:
openvpn3 config-manage --config ИМЯ_ПРОФИЛЯ --dns-scope tunnel
# Проверка. В выводе должно быть "DNS Resolver Scope: tunnel"
openvpn3 config-manage --config ИМЯ_ПРОФИЛЯ --show
# Киляем openvpn3-netcfg
sudo kill $(pgrep -f openvpn3-service-netcfg)
После подключения к VPN резолвинг example.com и google.com должны происходить через разные DNS:
resolvectl query example.com # должен резолвиться через интерфейс VPN
resolvectl query google.com # должен резолвиться через основной интерфейс
Немного справки:
- Конфиг netcfg хранится в /var/lib/openvpn3/netcfg.json и переживает рестарт
-
--dns-scope tunnel тоже переживает рестарт- Если изменения не применяются, убедитесь, что старые процессы openvpn3 были завершены перед проверкой.
Кому-то эта информация сэкономит часы дебага в будущем.
#openvpn3 #splitdns #linux #cli #quickstart
👍5
Какой из параметров tcpdump выведет список доступных сетевых интерфейсов?
Anonymous Quiz
18%
-D
35%
-I
47%
-i
👍4
При назначении пользователю оболочки по умолчанию важно убедиться, что она присутствует в списке разрешённых оболочек. Этот список хранится в файле
В нём не должно быть
При установке и удалении оболочки большинство дистрибутивов автоматически добавляют и стирают из файла соответствующие строки (кроме случаев установки из исходников). Если требуется ограничить или расширить список - просто отредактируйте файл вручную.
#linux #cli #shell
/etc/shells. Каждая строка содержит полный путь к допустимой командной оболочке, например:#cat /etc/shells
/bin/bash
/usr/bin/zsh
В нём не должно быть
/usr/sbin/nologin и /bin/false, т.к. эти пути используются для служебных учётных записей, не требующих интерактивного входа.При установке и удалении оболочки большинство дистрибутивов автоматически добавляют и стирают из файла соответствующие строки (кроме случаев установки из исходников). Если требуется ограничить или расширить список - просто отредактируйте файл вручную.
#linux #cli #shell
👍3🔥2
Начало 2010-х годов, стремительное развитие информационных технологий. Чем больше разрасталась инфраструктура, тем в большей рутине тонули инженеры и системные администраторы.
Для более лёгкого управления хостами использовались специальные инструменты, которые имели высокий порог входа и обязательное наличие агента на управляемом узле. Разобраться в синтаксисе конфигураций было сложно, а выполнение одних и тех же действий не всегда проводили к одинаковому результату.
В 2012 году программист с опытом работы в крупных компаниях (одной из которых была Red Hat) представляет миру совершенно новый подход в автоматизации управления серверами: очень низкий порог входа, идемпотентность (это когда повторный запуск одной и той же задачи не приводит к нежелательным изменениям), безагентность, и, что не менее важно - доступность и открытый исходный код.
Через 3 года компанию, занимающуюся развитием и поддержкой покупает Red Hat. Это даёт ресурсы для дальнейшего развития, но часть новых решений разрабатывается для Enterprise сегмента.
На сегодняшний день у проекта более 68 тысяч звёзд на GitHub, его используют почти 85 000 компаний по всему миру. Де-факто он стал стандартом для автоматизации ИТ‑инфраструктуры.
Создал его Михаэль Дехан (Michael DeHaan). Имя проекта:Ansible .
#soft #ansible
Для более лёгкого управления хостами использовались специальные инструменты, которые имели высокий порог входа и обязательное наличие агента на управляемом узле. Разобраться в синтаксисе конфигураций было сложно, а выполнение одних и тех же действий не всегда проводили к одинаковому результату.
В 2012 году программист с опытом работы в крупных компаниях (одной из которых была Red Hat) представляет миру совершенно новый подход в автоматизации управления серверами: очень низкий порог входа, идемпотентность (это когда повторный запуск одной и той же задачи не приводит к нежелательным изменениям), безагентность, и, что не менее важно - доступность и открытый исходный код.
Через 3 года компанию, занимающуюся развитием и поддержкой покупает Red Hat. Это даёт ресурсы для дальнейшего развития, но часть новых решений разрабатывается для Enterprise сегмента.
На сегодняшний день у проекта более 68 тысяч звёзд на GitHub, его используют почти 85 000 компаний по всему миру. Де-факто он стал стандартом для автоматизации ИТ‑инфраструктуры.
Создал его Михаэль Дехан (Michael DeHaan). Имя проекта:
#soft #ansible
❤3👍1
GitHub: Быстрый старт
1. Регистрируемся.
2. Создаём репозиторий, заполнив имя и описание, остальные настройки оставляем по умолчанию.
3. Устанавливаем git
4. Указываем свои данные в конфигурации:
5. Генерируем SSH‑ключ, чтобы не вводить каждый раз логин/пароль:
6. Со страницы репозитория GitHub копируем URL SSH (доступен в зелёной кнопке "Code") и клонируем репозиторий:
7. Для удобства и повышения производительности лучше работать в редакторе/IDE, которая "дружит" с git, например, VS Code. Открываем репозиторий, выполнив в каталоге с проектом команду `
Теперь в Source Control (Ctrl + Shift + G) можно видеть изменения, коммитить, пушить и т.д.
----- Упрощённая справка -----
Коммит (commit) - создание локального "снимка" изменений и добавление комментария. Позволяет узнать кто, когда и зачем (если указано в комментарии) вносил правки, добавляет возможность отката на момент создания любого коммита.
Пуш (push) - отправка локальных коммитов на удалённый репозиторий, например, на GitHub.
Если нужно получить последние изменения из удалённого репозитория, используется пул (pull).
#git #github #quickstart
1. Регистрируемся.
2. Создаём репозиторий, заполнив имя и описание, остальные настройки оставляем по умолчанию.
3. Устанавливаем git
# Linux (debian-based)
sudo apt update && sudo apt install git
# Windows (PowerShell)
winget install --id Git.Git -e --source winget
4. Указываем свои данные в конфигурации:
git config --global user.name "Ваше Имя"
git config --global user.email "your.email@example.com"
5. Генерируем SSH‑ключ, чтобы не вводить каждый раз логин/пароль:
ssh-keygen -t ed25519 -C "your.email@example.com"
6. Со страницы репозитория GitHub копируем URL SSH (доступен в зелёной кнопке "Code") и клонируем репозиторий:
git clone git@github.com:<username>/<repo-name>.git
7. Для удобства и повышения производительности лучше работать в редакторе/IDE, которая "дружит" с git, например, VS Code. Открываем репозиторий, выполнив в каталоге с проектом команду `
code .` или в интерфейсе: File → Open Folder…Теперь в Source Control (Ctrl + Shift + G) можно видеть изменения, коммитить, пушить и т.д.
----- Упрощённая справка -----
Коммит (commit) - создание локального "снимка" изменений и добавление комментария. Позволяет узнать кто, когда и зачем (если указано в комментарии) вносил правки, добавляет возможность отката на момент создания любого коммита.
Пуш (push) - отправка локальных коммитов на удалённый репозиторий, например, на GitHub.
Если нужно получить последние изменения из удалённого репозитория, используется пул (pull).
#git #github #quickstart
👍8
Шпаргалка по сборке ядра Linux из исходников
1. Проверка текущей версии ядра:
2. Установка утилит для сборки:
3. Скачивание и распаковка исходных кодов ядра:
4. Конфигурация ядра
Если в свежую версию ядра были добавлены новые параметры, система предложит включить или выключить их, а некоторые можно будет скомпилировать как модули. При тестовой компиляции можно на все пункты жать Enter, чтобы подставились дефолтные значения.
5. Сборка ядра, используя все потоки CPU
6. Установка ядра и модулей
В случае успешной установки будет сгенерирован initramfs, созданы ссылки, а также обновлена конфигурация grub.
7. Перезапуск системы
8. Проверка версии загруженного ядра
#linux #cli #linux_kernel
1. Проверка текущей версии ядра:
# uname -r
6.8.0-107-generic
2. Установка утилит для сборки:
sudo apt install build-essential libncurses-dev bc flex bison libssl-dev libelf-dev dwarves git fakeroot zstd libtool automake autoconf pkg-config flex bison
3. Скачивание и распаковка исходных кодов ядра:
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.19.11.tar.xz
tar -xJf linux-6.19.11.tar.xz
4. Конфигурация ядра
cd linux-6.19.11
# за основу берём конфигурацию текущего ядра
cp /boot/config-$(uname -r) .config
make localmodconfig
Если в свежую версию ядра были добавлены новые параметры, система предложит включить или выключить их, а некоторые можно будет скомпилировать как модули. При тестовой компиляции можно на все пункты жать Enter, чтобы подставились дефолтные значения.
Перед началом сборки нужно либо отключить параметр CONFIG_SYSTEM_REVOCATION_LIST в .config, либо добавить валидный список отозванных сертификатов в debian/canonical-revoked-certs.pem.
Чтобы отключить REVOCATION_LIST: выполнить make menuconfig → "Cryptographic API" → "Certificates for signature checking" → отключить REVOCATION → Save → Exit.
5. Сборка ядра, используя все потоки CPU
make -j$(nproc)
6. Установка ядра и модулей
make modules_install
make install
В случае успешной установки будет сгенерирован initramfs, созданы ссылки, а также обновлена конфигурация grub.
7. Перезапуск системы
reboot
8. Проверка версии загруженного ядра
# uname -r
6.19.11
#linux #cli #linux_kernel
🔥5👍1
Шпаргалка по просмотру списка задач cron
• Список задач текущего пользователя:
• Задачи конкретного пользователя:
• Задачи всех пользователей:
• Периодические задачи:
• Сложные сценарии:
#linux #cli #cron
• Список задач текущего пользователя:
crontab -l
• Задачи конкретного пользователя:
crontab -u username -l
• Задачи всех пользователей:
while IFS=: read -r username password uid gid info home shell; do
# Пропускаем системные аккаунты с UID < 1000
if [ "$uid" -ge 1000 ] 2>/dev/null; then
crontab_output=$(sudo crontab -u "$username" -l 2>/dev/null)
if [ -n "$crontab_output" ]; then
echo -e "\n👨💻 $username (UID: $uid)"
echo "────────────────────────────────────────────"
echo "$crontab_output"
echo
fi
fi
done < /etc/passwd
• Периодические задачи:
for file in /etc/cron.{hourly,daily,weekly,monthly}/*; do
if [ -f "$file" ]; then
echo -e "\n📋 $file"
echo "────────────────────────────────────────────"
cat "$file"
echo
fi
done• Сложные сценарии:
for file in /etc/cron.d/*; do
if [ -f "$file" ]; then
echo -e "\n📋 $file"
echo "────────────────────────────────────────────"
cat "$file"
echo
fi
done
#linux #cli #cron
👍5
Исправляем проблему с локалями "Please check that your locale settings are supported and installed on your system"
#linux #cli #perl #locale
# Проверяем установленные локали
locale -a
# Недостающие локали раскомментируем в /etc/locale.gen
sudo nano /etc/locale.gen
# Запускаем генерацию и применяем
sudo locale-gen
sudo update-locale
#linux #cli #perl #locale
Дзен | Статьи
[Решено] Please check that your locale settings are supported and installed on your system | Linux
Статья автора «Эникей на передержке » в Дзене ✍: Ошибка связана с тем, что система не находит или не поддерживает заданные локали (в моём случае ru_RU.UTF-8). perl: warning: Setting locale failed.
🔥5👍1
Шпаргалка по генерации ssh-ключей в Windows
1. Задаём переменные
2. Создаём папку .ssh и назначаем корректные права
3. Генерируем ключ
4. Добавляем в ssh-агент (опционально)
5. Заполняем
6. Подключаемся
Более подробно как всегда в Дзене:
https://dzen.ru/a/apnVaTkWs2OwozoI?share_to=link
1. Задаём переменные
$EnvName = "test" # Окружение: prod, test и т.д.
$UserName = "ivanov" # Ваш логин
$SshFolder = "$env:USERPROFILE\.ssh" # Путь к файлам ssh-client
$Date = Get-Date -Format yyyyMMdd # Дата генерации ключа
$KeyName = "id_ed25519_$EnvName" # Имя ключей
$PrivateKey = "$SshFolder\$KeyName" # Путь к приватному ключу
$PublicKey = "$PrivateKey.pub" # Путь к публичному ключу
2. Создаём папку .ssh и назначаем корректные права
New-Item -ItemType Directory -Path "C:\Users\$env:USERNAME\.ssh" -Force
takeown /F "$env:USERPROFILE\.ssh" /R /D Y
icacls "$env:USERPROFILE\.ssh" /grant ""$env:USERDOMAIN\$env:USERNAME":(OI)(CI)F" /T /C /Q
icacls "$env:USERPROFILE\.ssh" /grant "SYSTEM:(OI)(CI)F" /T /C /Q
3. Генерируем ключ
ssh-keygen -t ed25519 -C "${UserName}@${EnvName}-${Date}" -f $PrivateKey4. Добавляем в ssh-агент (опционально)
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
ssh-add $PrivateKey
5. Заполняем
$env:USERPROFILE\.ssh\config (опционально)Host test01
HostName test01.domain.example
IdentityFile C:\Users\Ivanov\.ssh\id_ed25519_test
User ivanov
Host test01b
HostName 10.110.0.10
IdentityFile C:\Users\Ivanov\.ssh\id_ed25519_test
ProxyJump test01
User ivanov
6. Подключаемся
ssh test01b
Более подробно как всегда в Дзене:
https://dzen.ru/a/apnVaTkWs2OwozoI?share_to=link
Дзен | Статьи
Генерация ssh-ключей в Windows для абсолютных новичков
Статья автора «Эникей на передержке » в Дзене ✍: Это руководство поможет вам легко создать SSH-ключи на компьютере с Windows.
❤5🙏1