Меня зовут Кирилл. Этот канал — моё хобби: я веду его для развлечения и саморазвития, здесь храню свои рабочие заметки и не только. Я Linux-программист и сопровождающий deb-пакетов, а также бывший QA-инженер. Работал в Astra Linux, Сбербанке, Честном Знаке, СберТехе и в ряде небольших IT-компаний. Занимал позиции старшего инженера-программиста.
Пишу на C и Bash, обожаю Shell. Меня интересует Open Source разработка и операционная система Debian. Я активный вкладчик в Debian и являюсь Debian Maintainer — сопровождаю более 10 пакетов. В работе использую последний стабильный выпуск на архитектуре x86_64. Также спонсирую некоторые крупные GitHub проекты финансово.
У меня нет технического образования — в IT я пришёл самостоятельно, по книгам. За более чем 5 лет работы в российских компаниях у меня сформировалась своя позиция и философия относительно программного обеспечения. Я считаю, что ПО должно быть свободным и нести идею, цель, попытку улучшить этот мир и удовлетворить потребности пользователя.
Меня вдохновляет делиться знаниями, поэтому я и создал этот канал. Рекламы и мата здесь не будет. Спасибо за внимание.
> Почта: krekhov.dev@gmail.com
> GitHub: https://github.com/krekhovx
> Мой Debian GitLab: https://salsa.debian.org/krekhov
> Мои пакеты в Debian: https://qa.debian.org/developer.php?login=krekhov.dev@gmail.com
#info
Пишу на C и Bash, обожаю Shell. Меня интересует Open Source разработка и операционная система Debian. Я активный вкладчик в Debian и являюсь Debian Maintainer — сопровождаю более 10 пакетов. В работе использую последний стабильный выпуск на архитектуре x86_64. Также спонсирую некоторые крупные GitHub проекты финансово.
У меня нет технического образования — в IT я пришёл самостоятельно, по книгам. За более чем 5 лет работы в российских компаниях у меня сформировалась своя позиция и философия относительно программного обеспечения. Я считаю, что ПО должно быть свободным и нести идею, цель, попытку улучшить этот мир и удовлетворить потребности пользователя.
Меня вдохновляет делиться знаниями, поэтому я и создал этот канал. Рекламы и мата здесь не будет. Спасибо за внимание.
> Почта: krekhov.dev@gmail.com
> GitHub: https://github.com/krekhovx
> Мой Debian GitLab: https://salsa.debian.org/krekhov
> Мои пакеты в Debian: https://qa.debian.org/developer.php?login=krekhov.dev@gmail.com
#info
👍20🔥9❤8✍1🆒1
Локализация
Набор переменных, который определяет язык приложений, консоли и т.д.
Например, разбор en_US.UTF8
en - язык.
US - региональная настройка.
UTF8 - кодировка.
Язык - тут думаю понятно =)
Региональная настройка - это определенные параметры, такие как формат даты и времени, валюта,
числовой формат и другие локальные настройки, которые могут отличаться от других стран.
Кодировка - определяет соответствие между символами и числовыми значениями, которые используются
компьютером для их хранения и обработки.
Получить все доступные локализации:
Чтобы изменить локализацию можно задать:
Если при выводе выдаются ошибки типа: Cannot set LC_CTYPE to default locale: No such file or directory
То скорее всего задается локализация, которая не была сгенерирована. Для этого нужно подправить
Затем выполнить:
Появится новая локализация:
Можно запустить приложение с другим языком, например:
LANG - Локализация, установленная в этой переменной используется в качестве значения для всех остальных LC_* переменных.
LANGUAGE - Запасные локализации (нужно для вывода сообщений на разных языках).
#shell #utils
Набор переменных, который определяет язык приложений, консоли и т.д.
Например, разбор en_US.UTF8
en - язык.
US - региональная настройка.
UTF8 - кодировка.
Язык - тут думаю понятно =)
Региональная настройка - это определенные параметры, такие как формат даты и времени, валюта,
числовой формат и другие локальные настройки, которые могут отличаться от других стран.
Кодировка - определяет соответствие между символами и числовыми значениями, которые используются
компьютером для их хранения и обработки.
Получить все доступные локализации:
$ locale -a
Чтобы изменить локализацию можно задать:
$ export LANG=en_US.UTF8
Если при выводе выдаются ошибки типа: Cannot set LC_CTYPE to default locale: No such file or directory
То скорее всего задается локализация, которая не была сгенерирована. Для этого нужно подправить
/etc/locale.gen файл. В этом файле нужно раскомментировать нужную локализацию, например en_US.UTF-8 UTF-8Затем выполнить:
$ locale-gen
Появится новая локализация:
$ locale -a
Можно запустить приложение с другим языком, например:
$ LANGUAGE=zh_TW vim
LANG - Локализация, установленная в этой переменной используется в качестве значения для всех остальных LC_* переменных.
LANGUAGE - Запасные локализации (нужно для вывода сообщений на разных языках).
#shell #utils
✍1🔥1
Как поднять себе настроение работая в оболочке?
Я нашел два прикольных пакета в Debian, называются они
Можно позабавиться:
Я например добавил
Забавляемся дальше:
За курсором будет бегать прикольный котик!
#utils #fun
Я нашел два прикольных пакета в Debian, называются они
cowsay и oneko.Можно позабавиться:
$ apt-get install -y cowsay
$ cowsay "Have a good day!"
Я например добавил
cowsay себе в ~/.profile и при каждом входе в оболочку вижу эту забавную надпись (смотреть скриншот).Забавляемся дальше:
$ apt-get install -y oneko
$ oneko &
За курсором будет бегать прикольный котик!
#utils #fun
👍2
Атака на SSH сервер. Как пользоваться fail2ban. Разбор лога.
Я арендую сервер для своих рабочих нужд у компании reg.ru, я им доверяю. Я слежу за безопасностью ПО на сервере, анализирую логи, принимаю определенные меры безопасности. Недавно я посмотрел вывод команды:
и увидел там много веселого! (смотреть скриншот в следующем посте), эти строки показывают сообщения об ошибках, связанных с попытками подключения по SSH к моему серверу (они повторяются много раз). Я думаю будет полезно разобрать данную ситуацию, ибо в последнее время активно атакуются Российские IT компании со стороны США, Украины. Не буду томить, здесь простейший перебор на дурачка, перебираются часто встречающиеся пользователи, пароли, чтобы получить доступ к системе, попытка взломать сервер, как я это понял ? Журнал
Объяснение ошибок:
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 адресов, совершающих подозрительные попытки подключения.
Действия:
При конфигурации
Установка fail2ban сервиса:
Добавить конфигурацию для sshd в
Перезапустить:
Можно понаблюдать процесс блокировки левых IP адресов, которые обращаются к серверу по SSH (блокировка осуществляется после 3 неудачных попыток входа):
Если на вашем сервере работают другие службы, рассмотрите возможность настройки fail2ban для их защиты.
#security
Я арендую сервер для своих рабочих нужд у компании 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 сервиса:
$ 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
Перезапустить:
$ systemctl restart fail2ban
Можно понаблюдать процесс блокировки левых IP адресов, которые обращаются к серверу по SSH (блокировка осуществляется после 3 неудачных попыток входа):
$ fail2ban-client status sshd
$ tail -f /var/log/fail2ban.log
Если на вашем сервере работают другие службы, рассмотрите возможность настройки fail2ban для их защиты.
#security
👍3❤1🔥1
Мне все понятно, скрипт-киддикам дали поиграться: https://www.vedomosti.ru/technology/news/2024/03/20/1026915-proukrainskie-hakeri
Заключительный пост к прошлым двум постам:
https://news.1rj.ru/str/krxnotes/426
https://news.1rj.ru/str/krxnotes/428
#security
Заключительный пост к прошлым двум постам:
https://news.1rj.ru/str/krxnotes/426
https://news.1rj.ru/str/krxnotes/428
#security
Что такое трассировка скрипта?
Размещение информативных сообщений в разных точках сценария для отслеживания протекания выполнения скрипта называется трассировкой. Можно прописать в необходимых местах команды
или:
или без изменения скрипта:
Если нужно отключить данную опцию, можно прописать
#shell
Размещение информативных сообщений в разных точках сценария для отслеживания протекания выполнения скрипта называется трассировкой. Можно прописать в необходимых местах команды
echo, а можно в shebang добавить параметр -x, например:#!/bin/bash -x
...
или:
#!/bin/bash
set -x
...
или без изменения скрипта:
$ bash -x ./noscript.sh
Если нужно отключить данную опцию, можно прописать
+x, например:$ bash +x ./noscript.sh
#shell
👍4
GNU философия
Философия GNU (GNU's Not Unix) заключается в приверженности свободному и открытому программному обеспечению. Основные принципы GNU включают в себя:
Свобода использования: Пользователи имеют право использовать программное обеспечение в любых целях без каких-либо ограничений.
Свобода изучения: Пользователи имеют право изучать, адаптировать и модифицировать программное обеспечение по своему усмотрению.
Свобода распространения: Пользователи имеют право распространять копии программного обеспечения и делиться им с другими.
Свобода улучшения: Пользователи имеют право улучшать программное обеспечение и делиться своими улучшениями с сообществом.
GNU философия призывает к сотрудничеству, обмену знаниями и созданию программного обеспечения, которое будет доступно для всех без ограничений и безопасно для использования.
#misc #opensource
Философия GNU (GNU's Not Unix) заключается в приверженности свободному и открытому программному обеспечению. Основные принципы GNU включают в себя:
Свобода использования: Пользователи имеют право использовать программное обеспечение в любых целях без каких-либо ограничений.
Свобода изучения: Пользователи имеют право изучать, адаптировать и модифицировать программное обеспечение по своему усмотрению.
Свобода распространения: Пользователи имеют право распространять копии программного обеспечения и делиться им с другими.
Свобода улучшения: Пользователи имеют право улучшать программное обеспечение и делиться своими улучшениями с сообществом.
GNU философия призывает к сотрудничеству, обмену знаниями и созданию программного обеспечения, которое будет доступно для всех без ограничений и безопасно для использования.
#misc #opensource
👍9
👍2
Что такое виртуальные пакеты?
Виртуальный пакет не существует сам по себе, он служит для обозначения того, что разные реальные пакеты могут предоставлять одинаковую функциональность. Другими словами: виртуальные пакеты представляют собой абстракции, которые не содержат собственных файлов, а служат для обозначения функциональности, предоставляемой одним или несколькими реальными пакетами.
Например, существует виртуальный пакет
Это позволяет системам управления пакетами (таким как
Когда пользователь пытается установить виртуальный пакет
Еще пример, существует виртуальный пакет
Для удобного просмотра информации о пакетах я использую
#debian
Виртуальный пакет не существует сам по себе, он служит для обозначения того, что разные реальные пакеты могут предоставлять одинаковую функциональность. Другими словами: виртуальные пакеты представляют собой абстракции, которые не содержат собственных файлов, а служат для обозначения функциональности, предоставляемой одним или несколькими реальными пакетами.
Например, существует виртуальный пакет
mail-transport-agent. Он обозначает любую программу, которая может работать как почтовый транспортный агент (MTA). Реальные пакеты, такие как postfix, exim4, sendmail, msmtp и т.д, могут удовлетворять эту роль (смотреть скриншот).Это позволяет системам управления пакетами (таким как
apt) гибко управлять зависимостями, предоставляя пользователю выбор из множества возможных реализаций.Когда пользователь пытается установить виртуальный пакет
mail-transport-agent, пакетный менеджер сообщает, что есть несколько реальных пакетов, которые предоставляют эту функциональность. Однако пакетный менеджер не выбирает автоматически один из них, так как они являются альтернативами, и пользователь должен сам выбрать, какой именно реальный пакет установить.Еще пример, существует виртуальный пакет
mcedit, при его установке скачается реальный пакет mc и его компоненты (mcedit связь с mc), грубо говоря это alias на необходимые пакеты. Еще пример, пакет awk предоставляет на выбор три пакета: original-awk, mawk, gawk.Для удобного просмотра информации о пакетах я использую
aptitude, очень полезный инструмент для работы мейнтейнера.#debian
👍3
Довольно часто приходится обращаться к Docker, чтобы не засорять свою основную Debian машину ненужными пакетами/зависимостями. Запустить Debian образ и развернуть его в интерактивном режиме можно так:
Можно подключиться к нужному контейнеру с другого tty/pts (чтобы было больше рабочих окон, терминалов). Узнать идентификатор контейнера и подключиться. На другом терминале выполнить:
Аналогичную работу можно произвести и с другими дистрибутивами, просто найти нужный образ и запустить его, поиск на Docker Hub осуществляется таким образом:
#debian
$ docker run -it debian
Можно подключиться к нужному контейнеру с другого tty/pts (чтобы было больше рабочих окон, терминалов). Узнать идентификатор контейнера и подключиться. На другом терминале выполнить:
$ docker ps
$ docker exec -it <ID> /bin/bash
Аналогичную работу можно произвести и с другими дистрибутивами, просто найти нужный образ и запустить его, поиск на Docker Hub осуществляется таким образом:
$ docker search <rocky-distr-for-example>
#debian
👍6
Что такое метапакеты?
Существуют пустые пакеты, в которых описаны только зависимости и метаданные (документация и т.д). Они обеспечивают установку группы взаимосвязанных программ. В описании пакета можно увидеть: Section: metapackages (но это необязательно и не всегда встречается). Например, пакет
Этот пакет необходим для сборки и компиляции программ из исходников. И включает:
1. Компилятор GCC (GNU Compiler Collection).
2. Утилиты для сборки, такие как make.
3. Заголовочные файлы и библиотеки для разработки.
#debian
Существуют пустые пакеты, в которых описаны только зависимости и метаданные (документация и т.д). Они обеспечивают установку группы взаимосвязанных программ. В описании пакета можно увидеть: Section: metapackages (но это необязательно и не всегда встречается). Например, пакет
build-essential является метапакетом. В таких пакетах нет исходников и подобного, а есть только debian/ директория с описанием. Такие пакеты существуют лишь ради эффектов, которые их метаданные оказывают на стек работы с пакетами.build-essential предоставляет необходимые инструменты для сборки пакетов в Debian, включая компиляторы, библиотеки и другие инструменты, но сам по себе не содержит какого-либо программного кода. Он лишь указывает на другие пакеты, которые необходимы для сборки программ в Debian. Вся суть этого пакета в его Depends и метаданных.Этот пакет необходим для сборки и компиляции программ из исходников. И включает:
1. Компилятор GCC (GNU Compiler Collection).
2. Утилиты для сборки, такие как make.
3. Заголовочные файлы и библиотеки для разработки.
#debian
👍5
Это не реклама, просто делюсь. Приобрел портативную игровую приставку Anbernic RG35XX Plus на базе Linux с возможностью играть в ретро-игры, поддерживает игры с различных платформ типа PSP, PS1, Game Boy и т.д (платформ довольно много, а игр около 5000). Подарок прям радует, сборка отличная, картинка неплохая (IPS экран), но вот для меня экран маловат (разрешение 640x480) глаза устают после часа игры, благо консоль имеет порт Mini HDMI, приобрел кабель и подключаю консоль к монитору, проблема глаз решена. Я удивился как быстро и без проблем картинка подстроилась под большой монитор. Я хотел приобрести Steam Deck, но решил начать с чего-то более простого. Короче, старичкам советую!
#games #fun
#games #fun
👍6❤2🔥2
Адресное пространство процесса (память процесса)
Когда программа запускается на выполнение, ядро выделяет для нее место в оперативной памяти.
Память запущенной программы (процесса) разделена на ряд непрерывных секций. Команды из секций выполняются последовательно. При развертывании программы секции разделяются и каждая готова для работы.
Некоторые секции уже известны перед запуском процесса
В этой секции хранится код программы, машинные инструкции (исполняемый код), сюда нельзя ничего записывать. Эта секция существует в read-only чтобы предотвратить несанкционированное изменение кода программы.
изначально эта секция пуста, и существует на чтение/запись.
Аргументы командной строки и переменных окружения. Это могут быть
Программист, когда использует в программе указатели, использует память процесса (адресное пространство) и работает только с ней! Указатели = работа с адресным пространством процесса (логические адреса).
#memory #theory
Когда программа запускается на выполнение, ядро выделяет для нее место в оперативной памяти.
Память запущенной программы (процесса) разделена на ряд непрерывных секций. Команды из секций выполняются последовательно. При развертывании программы секции разделяются и каждая готова для работы.
Некоторые секции уже известны перед запуском процесса
.text, .data, .bss. Их можно посмотреть после компиляции:$ size ./a.out
.text еще может называться code space..data может называться data space..text (младшие адреса 0x0)В этой секции хранится код программы, машинные инструкции (исполняемый код), сюда нельзя ничего записывать. Эта секция существует в read-only чтобы предотвратить несанкционированное изменение кода программы.
.data
Хранятся глобальные, статические переменные, которые определены, например:int i = 2;
char name[20];
изначально эта секция пуста, и существует на чтение/запись.
.bss
Хранятся глобальные, статические переменные, которые НЕ определены, например:int i;
int x;
.heap
Динамическая аллокация памяти (для долгоживущих объектов). Она аллоцируется, когда процесс стартует, и не привязана ни какому файлу (месту на диске), а .text, .data, .bss можно увидеть в /proc/$(pidof a.out)/maps файле..stack
Может расширяться и сжиматься по мере вызова функций (frames). Содержит аргументы функций, локальные переменные функций (короткоживущие объекты). Вызов функции приводит к помещению в стек (создание кадра), когда функция возвращает управление, кадр уничтожается. Размер у стека фиксированный (8 MiB)..env (0xfffffff...)Аргументы командной строки и переменных окружения. Это могут быть
argc, argv, envp (переменные окружения)..debug
Ключ -g при компиляции, добавляется отладочная информация.Программист, когда использует в программе указатели, использует память процесса (адресное пространство) и работает только с ней! Указатели = работа с адресным пространством процесса (логические адреса).
#memory #theory
❤7👍4🔥3❤🔥1