en
Feedback
GNU/Linux | Notes

GNU/Linux | Notes

Open in Telegram

Open Source, GNU/Linux, Debian/Ubuntu, Dotfiles, Software, Scripts, Notes, Terminal, Shell, Tools, Games, Fun, Misc, Music, Geek, Free Software Movement. Почта: krekhov.dev@gmail.com Кто я: https://t.me/krxnotes/246 GitHub: https://github.com/krekhovx

Show more
2 280
Subscribers
-124 hours
-17 days
-1230 days
Posts Archive
Что такое Debian Desktop и какие пакеты относятся к Desktop окружению ? Debian Desktop - это рабочее окружение, предназначенное для использования на настольных компьютерах. Оно включает в себя различное программное обеспечение, такое как графические оболочки (например, GNOME, KDE, Xfce), офисные приложения, веб браузеры, мультимедийные приложения и другие инструменты, необходимые для повседневной работы на ПК. Некоторые пакеты, которые обычно относятся к Debian Desktop, включают в себя: 1. GNOME или KDE (графические оболочки) 2. LibreOffice (офисный пакет) 3. Firefox или Chromium (веб-браузеры) 4. VLC (мультимедийный проигрыватель) 5. GIMP (графический редактор) 6. Thunderbird (почтовый клиент) 7. Любые другие приложения, необходимые для работы и развлечений на рабочем столе Эти пакеты обычно включены в образы установочных дисков Debian Desktop или доступны для установки из официальных репозиториев Debian. В первую очередь Debian является серверной операционной системой, которая широко используется для управления серверами и сетями. Debian предлагает стабильность, безопасность и широкий выбор программного обеспечения, что делает его популярным выбором для развертывания серверов. ——— @krxnotes

Кодовые имена дистрибутива Debian. Дистрибутивы Debian традиционно называются в честь персонажей из анимационного фильма "История игрушек" (Toy Story) студии Pixar. Вот несколько примеров: ... Debian 5.0 - Lenny (в честь бинокля Лени) Debian 6.0 - Squeeze (в честь инопланетных игрушек) Debian 7.0 - Wheezy (в честь пингвина Визи) Debian 8.0 - Jessie (в честь Джесси, ковбойки) Debian 9.0 - Stretch (в честь осьминога Стретча) Debian 10.0 - Buster (в честь собаки Бастера) Debian 11.0 - Bullseye (в честь быка по имени Булзай) Debian 12.0 - Bookworm (в честь книжного червя Букворм) Debian 13.0 - Trixie (в честь динозавра Трикси) ... и т.д. а первая версия Debian 1.1 называлась в честь главного героя Базза Лайтера - (Buzz). Забавно не правда ли =) Этот принцип сохранения имен в честь персонажей из "Истории игрушек" является традицией и помогает легко идентифицировать различные версии дистрибутива. ——— @krxnotes

Что такое метапакеты ? Существуют пустые пакеты, в которых описаны только зависимости и метаданные (документация и т.д). Они обеспечивают установку группы взаимосвязанных программ. В описании пакета можно увидеть: Section: metapackages (но это необязательно и не всегда встречается). Например, пакет build-essential является метапакетом. В таких пакетах нет исходников и подобного, а есть только debian/ директория с описанием. Такие пакеты существуют лишь ради эффектов, которые их метаданные оказывают на стек работы с пакетами. build-essential предоставляет необходимые инструменты для сборки пакетов в Debian, включая компиляторы, библиотеки и другие инструменты, но сам по себе не содержит какого-либо программного кода. Он лишь указывает на другие пакеты, которые необходимы для сборки программ в Debian. Вся суть этого пакета в его Depends и метаданных. Этот пакет необходим для сборки и компиляции программ из исходников. И включает: 1. Компилятор GCC (GNU Compiler Collection). 2. Утилиты для сборки, такие как make. 3. Заголовочные файлы и библиотеки для разработки. ——— @krxnotes

Довольно часто приходится обращаться к Docker, чтобы не засорять свою основную Debian машину ненужными пакетами/зависимостями
Довольно часто приходится обращаться к Docker, чтобы не засорять свою основную Debian машину ненужными пакетами/зависимостями. Запустить Debian образ и развернуть его в интерактивном режиме можно так:
$ docker run -it debian
Можно подключиться к нужному контейнеру с другого tty/pts (чтобы было больше рабочих окон, терминалов). Узнать идентификатор контейнера и подключиться. На другом терминале выполнить:
$ docker ps
$ docker exec -it <ID> /bin/bash
Аналогичную работу можно произвести и с другими дистрибутивами, просто найти нужный образ и запустить его, поиск на Docker Hub осуществляется таким образом:
$ docker search <rocky-distr-for-example>
——— @krxnotes

Что такое виртуальные пакеты ? Виртуальный пакет не существует сам по себе, он служит для обозначения того, что разные реальн
+1
Что такое виртуальные пакеты ? Виртуальный пакет не существует сам по себе, он служит для обозначения того, что разные реальные пакеты могут предоставлять одинаковую функциональность. Другими словами: виртуальные пакеты представляют собой абстракции, которые не содержат собственных файлов, а служат для обозначения функциональности, предоставляемой одним или несколькими реальными пакетами. Например, существует виртуальный пакет mail-transport-agent. Он обозначает любую программу, которая может работать как почтовый транспортный агент (MTA). Реальные пакеты, такие как postfix, exim4, sendmail, msmtp и т.д, могут удовлетворять эту роль (смотреть скриншот). Это позволяет системам управления пакетами (таким как apt) гибко управлять зависимостями, предоставляя пользователю выбор из множества возможных реализаций. Когда пользователь пытается установить виртуальный пакет mail-transport-agent, пакетный менеджер сообщает, что есть несколько реальных пакетов, которые предоставляют эту функциональность. Однако пакетный менеджер не выбирает автоматически один из них, так как они являются альтернативами, и пользователь должен сам выбрать, какой именно реальный пакет установить. Еще пример, существует виртуальный пакет mcedit, при его установке скачается реальный пакет mc и его компоненты (mcedit связь с mc), грубо говоря это alias на необходимые пакеты. Еще пример, пакет awk предоставляет на выбор три пакета: original-awk, mawk, gawk. Для удобного просмотра информации о пакетах я использую aptitude, очень полезный инструмент для работы мейнтейнера. ——— @krxnotes

There’s a kernel of truth in the old Unix joke, "the only command you need to know is man." ——— @krxnotes

Процесс разработки Debian. Архивы пакетов. ——— @krxnotes
Процесс разработки Debian. Архивы пакетов. ——— @krxnotes

GNU философия. Философия GNU (GNU's Not Unix) заключается в приверженности свободному и открытому программному обеспечению. О
GNU философия. Философия GNU (GNU's Not Unix) заключается в приверженности свободному и открытому программному обеспечению. Основные принципы GNU включают в себя: Свобода использования: Пользователи имеют право использовать программное обеспечение в любых целях без каких-либо ограничений. Свобода изучения: Пользователи имеют право изучать, адаптировать и модифицировать программное обеспечение по своему усмотрению. Свобода распространения: Пользователи имеют право распространять копии программного обеспечения и делиться им с другими. Свобода улучшения: Пользователи имеют право улучшать программное обеспечение и делиться своими улучшениями с сообществом. GNU философия призывает к сотрудничеству, обмену знаниями и созданию программного обеспечения, которое будет доступно для всех без ограничений и безопасно для использования. ——— @krxnotes

Debian философия. Debian - это операционная система, основанная на свободном и открытом программном обеспечении. Философия De
Debian философия. Debian - это операционная система, основанная на свободном и открытом программном обеспечении. Философия Debian, известная как Debian Social Contract, включает в себя следующие принципы: Свобода: Debian стремится к созданию операционной системы, которая полностью основана на свободном программном обеспечении. Это означает, что пользователи имеют право использовать, изучать, изменять и распространять программное обеспечение без каких-либо ограничений. Независимость: Debian не зависит от коммерческих интересов или корпоративных спонсоров. Он остается независимым проектом, основанным на принципах свободного программного обеспечения. Стабильность: Debian стремится к созданию стабильной и надежной операционной системы, которая будет поддерживаться и обновляться на протяжении длительного времени. Сотрудничество: Debian активно поддерживает сотрудничество и обмен идеями с другими проектами и сообществами, чтобы создать лучшее программное обеспечение для всех. Философия Debian подчеркивает важность свободы, независимости, стабильности и сотрудничества в разработке программного обеспечения и обеспечении пользователям доступа к качественной операционной системе. ——— @krxnotes

Что такое трассировка скрипта ? Размещение информативных сообщений в разных точках сценария для отслеживания протекания выполнения скрипта называется трассировкой. Можно прописать в необходимых местах команды echo, а можно в shebang добавить параметр -x, например:
#!/bin/bash -x
...
или:
#!/bin/bash
set -x
...
или без изменения скрипта:
bash -x ./script.sh
Если нужно отключить данную опцию, можно прописать +x, например:
bash +x ./script.sh
——— @krxnotes

Компоненты ядра операционной системы Linux (коротко). 1. Process Scheduler (SCHED) Планировщик процессов, отвечает за контроль над доступом процессов к CPU. Обеспечивает такое поведение ядра, при котором все процессы имеют справедливый доступ к центральному процессору. 2. Memory Manager (MM) Менеджер памяти, обеспечивает различным процессам безопасный доступ к основной памяти системы. Кроме того, MM обеспечивает работу виртуальной памяти, которая позволяет процессам использовать больше памяти, чем реально доступно в системе. Выделенная, но неиспользуемая память вытесняется на файловую систему, и при необходимости - возвращается из неё обратно в память (swapping). 3. Virtual File System (VFS) Уровень абстракции поверх конкретной реализации файловой системы. Целью VFS является обеспечение единообразного доступа клиентских приложений к различным типам файловых систем. 4. Network Interface (NET) Сетевые интерфейсы, обеспечивает работу с различными сетевыми стандартами и сетевым оборудованием. 5. Inter-Process Communication (IPC) Межпроцессное взаимодействие, обмен данными между потоками одного или разных процессов, реализуется посредством механизмов, предоставляемых ядром OC или процессом. ——— @krxnotes

exec и tee С помощью exec можно делать замену дескрипторов/процессов. tee читает из своего stdin и пишет в stdout например, сценарий script.sh:
#!/bin/bash
exec 2> >(tee file.log)
sleep .1
>&1 echo "hello 1"
>&2 echo "hello 2"
Затем выполнить:
$ ./script.sh
Разбор. Здесь два процесса, первый наш исполняемый script.sh, а второй это tee. У первого процесса stderr (2 файловый дескриптор) смотрит в pipe, у второго процесса stdin (1 файловый дескриптор) смотрит тоже в этот pipe, то есть весь stderr сценария будет перенаправляться в tee, который будет записывать это в файл file.log. Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать sleep .1 как в примере выше. Перенаправить stdout и stderr в file.txt:
exec &> >(tee file.txt)
Перенаправить stdout в file.txt:
exec 1> >(tee file.txt)
Перенаправить stderr в file.txt:
exec 2> >(tee file.txt)
Для заметки:
&> и >& одинаковы
2>&1 перенаправляет stderr в stdout
>/dev/null перенаправляет только stdout
Другой пример, сценарий main.sh:
#!/bin/bash
>&1 echo "hello 1"
>&2 echo "hello 2"
Трюки без exec, а с tee:
$ ./main.sh 2>&1 | tee logs/file.log
$ ./main.sh 2> >(tee logs/stderr.log)
——— @krxnotes

Мне все понятно, скрипт-киддикам дали поиграться: https://www.vedomosti.ru/technology/news/2024/03/20/1026915-proukrainskie-hakeri Заключительный пост к прошлым двум постам. ——— @krxnotes

Для прошлого поста! ——— @krxnotes
Для прошлого поста! ——— @krxnotes

Атака на SSH сервер. Как пользоваться fail2ban. Разбор лога. Я арендую сервер для своих рабочих нужд у компании reg.ru, я им доверяю. Я слежу за безопасностью ПО на сервере, анализирую логи, принимаю определенные меры безопасности. Недавно я посмотрел вывод команды:
$ journalctl -S today
и увидел там много веселого! (смотреть скриншот в следующем посте), эти строки показывают сообщения об ошибках, связанных с попытками подключения по SSH к моему серверу (они повторяются много раз). Я думаю будет полезно разобрать данную ситуацию, ибо в последнее время активно атакуются Российские IT компании со стороны США, Украины. Не буду томить, здесь простейший перебор на дурачка, перебираются часто встречающиеся пользователи, пароли, чтобы получить доступ к системе, попытка взломать сервер, как я это понял ? Журнал /var/log/auth.log очень резко стал расти в объеме это раз, во-вторых, в журнале видно, что PAM кричит о неудачных попытках входа по SSH от имени различных пользователей (которых нет у меня на сервере) - это обычный перебор. Объяснение ошибок: kex_protocol_error: Указывает на ошибки в процессе обмена ключами (key exchange) на этапе предварительной аутентификации. Это может быть связано с несовместимостью протоколов или ошибками в передаче данных. kex_exchange_identification: Клиент отправил неверный идентификатор протокола. В данном случае клиент попытался подключиться к SSH-серверу, используя запрос HTTP, что является некорректным. Сообщение kex_exchange_identification: banner line contains invalid characters указывает на то, что строка баннера, отправленная клиентом, содержит недопустимые символы. MaxStartups throttling: Сервер достиг предела по количеству одновременных незавершенных попыток подключения (MaxStartups). Это механизм защиты от DoS-атак, который ограничивает количество параллельных подключений. Возможные причины: - Попытки несанкционированного доступа или автоматизированные сканирования (боты, пытающиеся найти уязвимости). - Несовместимость протоколов между клиентом и сервером. - Ошибки конфигурации клиента или сервера SSH. Рекомендации: 1. Проверка конфигурации: - Убедитесь, что конфигурация SSH-сервера корректна и соответствует требованиям безопасности. 2. Журналирование и мониторинг: - Продолжайте мониторинг логов для выявления подозрительной активности. 3. Ограничение доступа: - Ограничьте доступ к SSH по IP-адресам, если возможно. - Используйте firewall для блокировки подозрительных IP-адресов. 4. Обновление программного обеспечения: - Убедитесь, что ваш SSH-сервер и клиент обновлены до последних версий. 5. Использование fail2ban: - Рассмотрите возможность использования fail2ban или аналогичных инструментов для автоматической блокировки IP адресов, совершающих подозрительные попытки подключения. Действия: При конфигурации /etc/ssh/sshd_config я всегда касаюсь одних и тех же строк, ничего нового не придумываю, правило одно - это никаких паролей, вход только по ключам, пароли входа запретить (ибо их можно перебрать), как для пользователей, так и для root, вот основные моменты:
...
PermitRootLogin prohibit-password
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
ClientAliveInterval 120
...
Установка fail2ban сервиса:
$ sudo apt-get install -y fail2ban
Добавить конфигурацию для sshd в /etc/fail2ban/jail.local файл:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
Перезапустить:
$ sudo systemctl restart fail2ban
Можно понаблюдать процесс блокировки левых IP адресов, которые обращаются к серверу по SSH (блокировка осуществляется после 3 неудачных попыток входа):
$ sudo fail2ban-client status sshd
$ sudo tail -f /var/log/fail2ban.log
Если на вашем сервере работают другие службы, рассмотрите возможность настройки fail2ban для их защиты. ——— @krxnotes

pushd / popd / dirs Показывают всю красоту стека и его логику, например:
$ pushd ~/main
$ pushd ~/main/notes
$ dirs
~/main/work ~/main ~
$ popd
~/main ~ ——— @krxnotes

Как перевести скрипт в бинарный формат (ELF) ? Создадим сценарий:
$ echo -e '#!/bin/sh\necho hello\nexit 0' > hello.sh
Установка:
$ sudo apt-get install -y shc
Перевести скрипт в ELF файл:
$ shc -f hello.sh
$ ./hello.sh.x
hello Удостовериться, что наш сценарий-программа действительно ELF:
$ file hello.sh.x
hello.sh.x: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0d5954d51e07ffc91fce25485256ef210af3dbcc, for GNU/Linux 3.2.0, stripped hello.sh.x аналогичен a.out файлу, получился ELF. shc отличный инструмент, чтобы скрыть скрипт в бинарном файле. ——— @krxnotes

Бинарные модули и процессы. Бинарные модули - это программы, которые уже скомпилированы и хранятся в готовом к выполнению формате для конкретной операционной системы и аппаратной архитектуры. Они ожидают своего запуска, находясь в состоянии пассивного ожидания (на диске). Процессы - это абстракции ОС, представляющие собой данные бинарные модули в действии, загруженный двоичный код, виртуальная память, ресурсы ядра, такие как открытые файлы, связанный пользователь и т.д. Иными словами, процессы - это выполняющиеся бинарные модули (в памяти компьютера). Основное отличие заключается в том, что бинарный модуль — это просто файл на диске, который может быть запущен, тогда как процесс — это активное выполнение этого файла в памяти с выделенными ресурсами и контекстом выполнения. ——— @krxnotes

Какие процессы бывают ? * Пользовательские процессы (запускаются в режиме пользователя, ограниченные ресурсы). * Процессы ядра (запускаются в режиме ядра, привилегированные процессы). * Демоны (работают в фоне). ——— @krxnotes

Если интересно как устроено мое рабочее окружение. Мои dotfiles-debian лежат здесь. Там есть различные конфигурации инструмен
+2
Если интересно как устроено мое рабочее окружение. Мои dotfiles-debian лежат здесь. Там есть различные конфигурации инструментов, которые я использую при разработке, а это: vim, tmux, mc, mousepad, gdb, neomutt, newsboat, xfce, xfce4-terminal, dircolors, различные цветовые схемы для терминала и многое другое. Настройку окружения производит скрипт init.sh ——— @krxnotes