💡 10 полезных советов для написания эффективных bash скриптов в Linux
1. Всегда используйте комментарии в скриптах
Комментарии начинаются со знака решетки — #.
2. Настраивайте завершение выполнения скрипта при ошибке
Так бывает, что bash может продолжать выполнять скрипт, несмотря на сбои в выполнении определенной команды.
Можно использовать следующую команду для выхода из скрипта в случае ошибке:
Также bash может попытаться использовать переменную, не объявленную ранее в коде сценария. Чтобы bash завершал выполнение скрипта в такой ситуации — добавьте в код следующую команду:
Использование двойных кавычек при обращении к переменным предотвращает разбиение строк при наличии в них пробелов на слова, а также — другие возможные сбои.
5. Используйте функции в скриптах
Скрипт, который разбит на функции, становится более модульным. Такой код проще прочитать и понять, чем длинную последовательность предписаний.
6. Используйте знак = для сравнения строк
Во многих популярных языках программирования сравнение на равенство проверяется двойным знаком «равно» ==. Однако в сценариях командной строки Линукс для этого используется одинарное равно =.
7. Используйте знак $ вместо знаков “
Существует несколько способов подстановки команд. Вы можете использовать обратные апострофы
Статическая переменная — это переменная, которая не меняется. Встроенная команда
9. Используйте верхний регистр для названий переменных среды, нижний — для названий пользовательских переменных
Все переменные среды bash, такие как HOSTNAME, BASH, GROUPS и другие — следует писать заглавными буквами. Тогда как для именования пользовательских переменных лучше использовать строчные буквы. В коде большого скрипта при использовании множества различных переменных высок риск назвать некоторые из них одинаково, что может привести к неожиданным или даже критическим ошибка.
10. Выполняйте отладку (debugging) скриптов
Linux / Линукс🥸
1. Всегда используйте комментарии в скриптах
Комментарии начинаются со знака решетки — #.
2. Настраивайте завершение выполнения скрипта при ошибке
Так бывает, что bash может продолжать выполнять скрипт, несмотря на сбои в выполнении определенной команды.
Можно использовать следующую команду для выхода из скрипта в случае ошибке:
# let script exit if a command fails3. Настраивайте завершение выполнения скрипта при обнаружении необъявленной переменной
set -o errexit
# OR
set -e
ls -xyz # command with error
echo "you will not see this message"
Также bash может попытаться использовать переменную, не объявленную ранее в коде сценария. Чтобы bash завершал выполнение скрипта в такой ситуации — добавьте в код следующую команду:
#let script exit if an unsed variable is used4. Используйте двойные кавычки для ссылки на переменные
set -o nounset
# OR
set -u
echo $ThisVariableAreNotDefined
echo "you will not see this message"
Использование двойных кавычек при обращении к переменным предотвращает разбиение строк при наличии в них пробелов на слова, а также — другие возможные сбои.
5. Используйте функции в скриптах
Скрипт, который разбит на функции, становится более модульным. Такой код проще прочитать и понять, чем длинную последовательность предписаний.
6. Используйте знак = для сравнения строк
Во многих популярных языках программирования сравнение на равенство проверяется двойным знаком «равно» ==. Однако в сценариях командной строки Линукс для этого используется одинарное равно =.
7. Используйте знак $ вместо знаков “
Существует несколько способов подстановки команд. Вы можете использовать обратные апострофы
`command` для заключения команды в них, либо же использовать конструкцию $(command). На сегодняшний день рекомендуется использовать именно второй вариант с использованием $, что подтверждается рекомендациями shellcheck, инструментом для анализа кода скриптов. Например:user=`echo “qwerty” `8. Объявляйте статические переменные с опцией readonly
user1=$(echo “abcde”)
Статическая переменная — это переменная, которая не меняется. Встроенная команда
readonly используется для пометки переменных, доступных только для чтения (то есть — неизменяемых). Это подразумевает, что изменить ее в будущем уже будет нельзя.9. Используйте верхний регистр для названий переменных среды, нижний — для названий пользовательских переменных
Все переменные среды bash, такие как HOSTNAME, BASH, GROUPS и другие — следует писать заглавными буквами. Тогда как для именования пользовательских переменных лучше использовать строчные буквы. В коде большого скрипта при использовании множества различных переменных высок риск назвать некоторые из них одинаково, что может привести к неожиданным или даже критическим ошибка.
10. Выполняйте отладку (debugging) скриптов
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤5
В CVE опубликованы отчёты о ложных уязвимостях в curl, PostgreSQL и других проектах
#длиннопост
Организация MITRE, отвечающая за ведение базы данных общеизвестных уязвимостей, опубликовала отчёт с информацией о ложной критической уязвимости. Проблеме присвоен идентификатор CVE-2020-19909 и выставлен уровень опасности 9.8 из 10.
На деле отчёт об уязвимости ссылается на проблему в коде разбора параметра командной строки "--retry-delay", которая была устранена в 2019 году и приводила к целочисленному переполнению. Ошибка не была отнесена разработчиками к категории уязвимостей.
Тем не менее, спустя три года кто-то отправил в MITRE отчёт об уязвимости и присвоил проблеме критический уровень опасности.🤷♀️ Вопрос вызывает то, как MITRE мог согласиться с заявленным уровнем опасности. Примечательно, что разработчики curl обратились в MITRE с просьбой отменить CVE-отчёт, но представители MITRE ограничились отпиской, отказались удалить CVE и лишь пометили его как спорный ("DISPUTED").
Данный инцидент можно было бы считать единичным случаем, но проект PostgreSQL сообщил о выявлении подобного ложного отчёта, также отправленного 22 августа и привязанного к старому CVE-идентификатору, выданному в 2020 году.
❗️ Анализ нетипичных CVE, созданных 22 августа, показал, что в этот день было добавлено около 150 отчётов под идентификаторами, выданными в 2020-2022 годах. Идентификаторы охватывают большое число открытых проектов и, на первый взгляд, также интерпретируют обычные ошибки, не связанные с обработкой внешних данных, как опасные уязвимости.
Спорные отчёты направлены анонимно через сервис информирования об уязвимостях NVD. Мотив публикации не ясен, вероятно кто-то решил продемонстрировать отсутствие должного аудита при приёме отчётов об уязвимостях, возможность использования CVE как механизма для дискредитации проектов или привлечь внимание к исправлению в коде потенциально опасных проблем без анализа их влияния на безопасность.
Linux / Линукс🥸
#длиннопост
Организация MITRE, отвечающая за ведение базы данных общеизвестных уязвимостей, опубликовала отчёт с информацией о ложной критической уязвимости. Проблеме присвоен идентификатор CVE-2020-19909 и выставлен уровень опасности 9.8 из 10.
На деле отчёт об уязвимости ссылается на проблему в коде разбора параметра командной строки "--retry-delay", которая была устранена в 2019 году и приводила к целочисленному переполнению. Ошибка не была отнесена разработчиками к категории уязвимостей.
Тем не менее, спустя три года кто-то отправил в MITRE отчёт об уязвимости и присвоил проблеме критический уровень опасности.
Данный инцидент можно было бы считать единичным случаем, но проект PostgreSQL сообщил о выявлении подобного ложного отчёта, также отправленного 22 августа и привязанного к старому CVE-идентификатору, выданному в 2020 году.
Спорные отчёты направлены анонимно через сервис информирования об уязвимостях NVD. Мотив публикации не ясен, вероятно кто-то решил продемонстрировать отсутствие должного аудита при приёме отчётов об уязвимостях, возможность использования CVE как механизма для дискредитации проектов или привлечь внимание к исправлению в коде потенциально опасных проблем без анализа их влияния на безопасность.
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁81🌚3👍1
🎉 1 сентября nmap исполнилось 26 лет
nmap — свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети.
Linux / Линукс🥸
nmap — свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети.
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
❤36👍12🎉7🔥1
AMD объявила о публикации исходных текстов прошивки AMD-ASPFW, обеспечивающей работу механизма защиты AMD SEV (Secure Encrypted Virtualization), позволяющего защитить виртуальные машины от компрометации со стороны гипервизора или администратора хост системы. Код опубликован под отдельным лицензионным соглашением и соответствует прошивке SEV FW 1.55.25, применяемой в 4 поколении процессоров AMD EPYC (кодовое имя Genoa).
Linux / Линукс🥸
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
Файловая система ReiserFS объявлена устаревшей в ядре Linux
Причина: желание снизить трудозатраты на сопровождение общих для файловых систем изменений, связанных с поддержкой нового API для монтирования, iomap и фолиантов (folios).
Из проблем c ReiserFS также упоминалась стагнация в сопровождении данной ФС, нерешённая проблема 2038 года и отсутствие возможностей по обеспечению отказоустойчивости. Пользовательская база ReiserFS оценивается как незначительная и постоянно сокращающаяся. Год назад последним крупным дистрибутивом, поддерживающим ReiserFS, оставался openSUSE.
Linux / Линукс🥸
Причина: желание снизить трудозатраты на сопровождение общих для файловых систем изменений, связанных с поддержкой нового API для монтирования, iomap и фолиантов (folios).
Из проблем c ReiserFS также упоминалась стагнация в сопровождении данной ФС, нерешённая проблема 2038 года и отсутствие возможностей по обеспечению отказоустойчивости. Пользовательская база ReiserFS оценивается как незначительная и постоянно сокращающаяся. Год назад последним крупным дистрибутивом, поддерживающим ReiserFS, оставался openSUSE.
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Please open Telegram to view this post
VIEW IN TELEGRAM
😁158🤯7🔥6😢3🎉3
Проект Sourcegraph, развивающий движок для навигации по исходным текстам, рефакторинга и поиска в коде, раскрыл сведения об инциденте, в результате которого злоумышленники получили доступ к сайту Sourcegraph.com с правами администратора.
Атакующим удалось загрузить данные о пользователях Sourcegraph, включающие email-адреса зарегистрированных пользователей, имена и email коммерческих клиентов и лицензионные ключи некоторых коммерческих пользователей.
Отмечается, что для доступа к сайту атакующими был использован токен одного из администраторов сайта, случайно сохранённый в публично доступном репозитории проекта.
Linux / Линукс🥸
Атакующим удалось загрузить данные о пользователях Sourcegraph, включающие email-адреса зарегистрированных пользователей, имена и email коммерческих клиентов и лицензионные ключи некоторых коммерческих пользователей.
Отмечается, что для доступа к сайту атакующими был использован токен одного из администраторов сайта, случайно сохранённый в публично доступном репозитории проекта.
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15🎉2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁51🔥5❤2🤔2
Наиболее важные изменения Wine 8.15:
– Добавлен обработчик вывода на печать для печати голого текста.
– В движке MSHTML реализована поддержка механизма сборки мусора "Cycle Collection".
– В WoW64, прослойке для запуска 32-разрядных программ в 64-разрядной Windows, реализована поддержка межпроцессных уведомлений.
– Закрыты отчёты об ошибках, связанные с работой некоторых приложений и игр.
В новом выпуске Wine Staging осуществлена синхронизация с кодовой базой Wine 8.15. Обновлены патчи vkd3d-latest, user32-rawinput-mouse и mshtml-TranslateAccelerator.
Linux / Линукс🥸
– Добавлен обработчик вывода на печать для печати голого текста.
– В движке MSHTML реализована поддержка механизма сборки мусора "Cycle Collection".
– В WoW64, прослойке для запуска 32-разрядных программ в 64-разрядной Windows, реализована поддержка межпроцессных уведомлений.
– Закрыты отчёты об ошибках, связанные с работой некоторых приложений и игр.
В новом выпуске Wine Staging осуществлена синхронизация с кодовой базой Wine 8.15. Обновлены патчи vkd3d-latest, user32-rawinput-mouse и mshtml-TranslateAccelerator.
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30
FreeBSD загружается за 25 миллисекунд
Разработчик FreeBSD Колин Персиваль оптимизировал FreeBSD для Firecracker, сократив время загрузки ядра до 25 миллисекунд. Алгоритм предназначен для micro-VM. Для сравнения ядро Linux в той же среде загружается 80 миллисекунд.
micro-VM предназначены для работы в качестве гостевой операционной системы под другой ОС, что снижает потребность в эмулируемом оборудовании. AWS, например, предлагает micro-VM через свой сервис Lambda на базе гипервизора Firecracker.
👉 Оптимизированное ядро в настоящее время доступно для FreeBSD 14 на платформе x86-64, также ведется работа для Arm64.
Linux / Линукс🥸
Разработчик FreeBSD Колин Персиваль оптимизировал FreeBSD для Firecracker, сократив время загрузки ядра до 25 миллисекунд. Алгоритм предназначен для micro-VM. Для сравнения ядро Linux в той же среде загружается 80 миллисекунд.
micro-VM предназначены для работы в качестве гостевой операционной системы под другой ОС, что снижает потребность в эмулируемом оборудовании. AWS, например, предлагает micro-VM через свой сервис Lambda на базе гипервизора Firecracker.
👉 Оптимизированное ядро в настоящее время доступно для FreeBSD 14 на платформе x86-64, также ведется работа для Arm64.
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍8😁4❤1🌚1
Выявлена уязвимость в реализации механизма автоматической разблокировки полнодискового шифрования. Она позволяет при наличии физического доступа к компьютеру выполнить свои команды с правами root на раннем этапе загрузки, вручную снять блокировку с шифрованного диска и получить полный доступ к информации, хранимой на дисках.
👉 Уязвимость затрагивает Linux-системы в которых используются формат шифрования LUKS (Linux Unified Key Setup), механизмы защиты ключей на базе TPM (Trusted Platform Module) и компоненты Clevis, dracut и systemd для организации автоматической разблокировки во время загрузки.
Метод атаки напоминает выявленную в 2016 году уязвимость в пакете Cryptsetup, позволявшую получить доступ с правами root в командную оболочку начального загрузочного окружения при удерживании клавиши Enter в ответ на запрос ввода пароля для разблокировки зашифрованного раздела.
Новый вариант атаки был выявлен после проверки как отреагирует система, если генерировать нажатия Enter не вручную, а при помощи эмулятора клавиатуры, обеспечивающего минимально возможную задержку между нажатиями.
Успешная атака продемонстрирована в конфигурации на базе Ubuntu 20.04. Подобные конфигурации на базе фреймворка Clevis и хранения информации для расшифровки ключей в TPM обычно применяются, когда необходимо обеспечить шифрование дисков на удалённых серверах, на которых нет возможности после каждой перезагрузки вручную вводить пароль для разблокировки зашифрованных дисков.
💡 В качестве возможной меры для защиты от атаки рекомендуется выставить при загрузке параметры ядра
Linux / Линукс🥸
👉 Уязвимость затрагивает Linux-системы в которых используются формат шифрования LUKS (Linux Unified Key Setup), механизмы защиты ключей на базе TPM (Trusted Platform Module) и компоненты Clevis, dracut и systemd для организации автоматической разблокировки во время загрузки.
Метод атаки напоминает выявленную в 2016 году уязвимость в пакете Cryptsetup, позволявшую получить доступ с правами root в командную оболочку начального загрузочного окружения при удерживании клавиши Enter в ответ на запрос ввода пароля для разблокировки зашифрованного раздела.
Новый вариант атаки был выявлен после проверки как отреагирует система, если генерировать нажатия Enter не вручную, а при помощи эмулятора клавиатуры, обеспечивающего минимально возможную задержку между нажатиями.
Успешная атака продемонстрирована в конфигурации на базе Ubuntu 20.04. Подобные конфигурации на базе фреймворка Clevis и хранения информации для расшифровки ключей в TPM обычно применяются, когда необходимо обеспечить шифрование дисков на удалённых серверах, на которых нет возможности после каждой перезагрузки вручную вводить пароль для разблокировки зашифрованных дисков.
💡 В качестве возможной меры для защиты от атаки рекомендуется выставить при загрузке параметры ядра
rd.shell=0 и rd.emergency=reboot, при которых в случае сбоя на раннем этапе загрузки будет выполнена автоматическая перезагрузка, а не переход в интерактивный сеанс.Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10❤7👍3
💡 Продолжаем про инструменты и сервисы для мониторинга серверов Linux
▪️ Uptime Robot
Работает как еще один уведомитель, который постоянно отслеживает ваш веб-сайт.
▪️ uptime.com
Uptime.com также оповещает вас о простоях веб-сайта по SMS, телефонному звонку или электронной почте. Он проверяет доступность веб-сайта с интервалом в одну минуту в 30 различных местах на 6 континентах. Цены Uptime основаны на тарифных планах basic, superior, business и enterprise.
▪️ Supervisord
Supervisord - это клиент-серверная система управления процессами, которая позволяет своим пользователям управлять рядом процессов в UNIX-подобных операционных системах. Он был вдохновлен удобством, точностью, делегированием и группами процессов и основан на Python. Версия Supervisord на GoLang также доступна на GitHub.
▪️ graphite
Graphite - это корпоративный инструмент мониторинга с открытым исходным кодом, который одинаково хорошо работает как на дешевом оборудовании, так и в облачной инфраструктуре, используемой для отслеживания производительности веб-сайтов, приложений, бизнес-сервисов и сетевых серверов.
▪️ Cabot
Cabot - это бесплатная автономная платформа мониторинга инфраструктуры с открытым исходным кодом, которая предоставляет некоторые из лучших функций PagerDuty, плотности серверов, Pingdom и Nagios без их стоимости и сложности. Он готов к установке в Docker, и его развертывание занимает 5 минут.
Linux / Линукс🥸 #monitoring
▪️ Uptime Robot
Работает как еще один уведомитель, который постоянно отслеживает ваш веб-сайт.
▪️ uptime.com
Uptime.com также оповещает вас о простоях веб-сайта по SMS, телефонному звонку или электронной почте. Он проверяет доступность веб-сайта с интервалом в одну минуту в 30 различных местах на 6 континентах. Цены Uptime основаны на тарифных планах basic, superior, business и enterprise.
▪️ Supervisord
Supervisord - это клиент-серверная система управления процессами, которая позволяет своим пользователям управлять рядом процессов в UNIX-подобных операционных системах. Он был вдохновлен удобством, точностью, делегированием и группами процессов и основан на Python. Версия Supervisord на GoLang также доступна на GitHub.
▪️ graphite
Graphite - это корпоративный инструмент мониторинга с открытым исходным кодом, который одинаково хорошо работает как на дешевом оборудовании, так и в облачной инфраструктуре, используемой для отслеживания производительности веб-сайтов, приложений, бизнес-сервисов и сетевых серверов.
▪️ Cabot
Cabot - это бесплатная автономная платформа мониторинга инфраструктуры с открытым исходным кодом, которая предоставляет некоторые из лучших функций PagerDuty, плотности серверов, Pingdom и Nagios без их стоимости и сложности. Он готов к установке в Docker, и его развертывание занимает 5 минут.
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3🥰3
Разработчики Debian удаляют порт для архитектуры mipsel из репозиториев unstable/experimental. Mipsel являлся одним из старейших поддерживаемых портов Debian. Изменение не касается архитектуры mips64, которая продолжает поддерживаться.
Причиной прекращения поддержки mipsel стал ряд технических проблем. например, ограничение размера памяти в пространстве пользователя в 2Gb или тот факт, что архитектура подвержена проблеме 2038 года (32-битный time_t).
Linux / Линукс🥸
Причиной прекращения поддержки mipsel стал ряд технических проблем. например, ограничение размера памяти в пространстве пользователя в 2Gb или тот факт, что архитектура подвержена проблеме 2038 года (32-битный time_t).
Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
😢20👍8
💡 Алфавит команд
А
B
Linux / Линукс🥸 #alphabet
А
alias- команда позволяет пользователю запускать любую команду или даже группу команд, в том числе с опциями, параметрами и файлами, вводом одного слова или даже символа.
at- это утилита командной строки, которая позволяет планировать выполнение команд в определенное время.
awk - команда восходит к ранним временам Unix. Задолго до появления Perl или Python AWK использовался в скриптах для манипулирования текстом. Она позволяет выполнять действия над строками в соответствии с заданным шаблоном.B
basename - команда в Linux выводит конечный компонент в виде пути к файлу. Это особенно полезно в сценариях bash, где вы хотите извлечь имя файла из длинного пути к файлу.Linux / Линукс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16