Архив метки: Linux

Создаём свой центр сертификации на Linux

Здесь я покажу вам, как можно создать свой центр сертификации и выпускать свои сертификаты для ваших тестовых или внутренних веб серверов.











Введение




Само-подписанные ssl-сертификаты бывают нужны в некоторых случаях:




  • При работе с тестовыми веб-серверами. Когда вам всё равно требуется протокол https. Или не требуется, но вам просто хочется использовать https вместо http. То удобно иметь свой центр сертификации и для каждого тестового сайта выпускать ssl-сертификаты.
  • При работе с внутренними web-серверами. Если у компании есть свой внутренний сайт или веб-приложение. И этот сайт доступен только из внутренней сети компании. То, вероятно, вам захочется использовать протокол https вместо http. А так как доступ к сайту есть у ограниченного числа компьютеров, то на них можно добавить свой корневой ssl-сертификат. И тогда, эти компьютеры начнут доверять внутренним сайтам компании.




Если вы не знаете, что означает доверие к сертификату сайта, то покажу вам следующие скриншоты.




На этом скриншоте, браузер не доверяет сайту, но если нажать на кнопку «Дополнительные«, то вы всё равно сможете перейти на сайт:




Браузер не доверяет сертификату сайта
Браузер не доверяет сертификату сайта




А на этом скриншоте браузер доверяет сайту. Об этом говорит то, что сайт открылся без предупреждений и замочек в адресной строке:




Браузер доверяет сертификату сайта
Браузер доверяет сертификату сайта




В этой статье я проделаю следующее:




  • На Debian 11 установлю apache2 и настрою его работу на https (с сертификатами по умолчанию для localhost).
  • Покажу что клиенты пока не доверяют этому сертификату.
  • Создам центр сертификации на этом же сервере. А именно:
    • создам закрытый корневой ключ и открытый корневой ключ (он же корневой сертификат);
    • с помощью этой пары ключей буду выпускать сертификаты для доменов;
    • установлю выпущенный корневой сертификат на компьютер клиента (на windows);
    • с помощью корневого ключа и сертификата, я выпущу ключ и сертификат для домена (для веб-сервера).
  • Затем я настрою apache2 на использование созданных мною закрытого ключа и сертификата для веб-сервера. И продемонстрирую вам что клиентский браузер начал доверять сертификату сайту.
  • Дальше я установлю и настрою другой веб-сервер — nginx. Настрою его на работу по протоколу https. И продемонстрирую доверие браузера к сайту.




Устанавливаю apache2




Устанавливаю web-сервер apache2:




$ sudo apt install apache2




Настраиваю его работу по протоколу https:




$ sudo a2enmod ssl
$ sudo a2ensite default-ssl.conf
$ sudo systemctl restart apache2




Проверяю доверие к ssl-сертификату сайта, открыв его по https:




Браузер Chrome не доверяет сертификату с которым работает сайт
Браузер Chrome не доверяет сертификату с которым работает сайт




Как видите, доверия нет.




Создаю центр сертификации




Теория




Протокол HTTPS это объединение протоколов HTTP + SSL/TLS. А протокол TLS это асинхронное шифрование. То есть создаётся пара ключей. И то, что один ключ может зашифровать, другой может расшифровать и наоборот. В протоколе HTTPS эти ключи не равнозначные:




  • закрытый ключ — это обычный ключ шифрования применяемый в асинхронном шифровании.
  • открытый ключ — это тоже ключ шифрования. Но он дополнительно содержит некоторую информацию, например имя домена, имя организации и другое. Такой ключ называют сертификатом.




А ещё протокол TLS позволяет создавать цепочки сертификатов. То-есть, если браузер доверяет родительскому сертификату, то он автоматически будет доверять и всем дочерним сертификатам. А чтобы создать дочернюю пару ключей, нужно иметь доступ к родительской паре ключей.




Корневая пара ключей обычно не подтверждает никакой домен. А используется для создания промежуточных сертификатов или сертификатов для доменов (для web-серверов).




Обычно, когда создают ssl-сертификат для домена, то для безопасности отнимают у него право создания дочерних сертификатов.




Корневой ключ обычно защищают паролем. Это уже симметричное шифрование, когда зная один ключ (пароль) можно зашифровать и расшифровать файл закрытого ключа.




Сервер на котором создают корневые сертификаты, а затем с их помощью выпускают сертификаты для доменов называют — центр сертификации.




Создаю корневой закрытый ключ




Для создания ssl/tls сертификатов можно использовать утилиту openssl, она не требует админских прав.




Создаю корневой закрытый ключ:




$ openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc
   ....................................+++++
   ......................+++++
   Enter PEM pass phrase:
   Verifying - Enter PEM pass phrase:




Разберу эту команду:




  • genpkey — команда для создания закрытого ключа;
  • -algorithm RSA — алгоритм асинхронного шифрования, именно он используется для выделения открытого ключа из этого закрытого;
  • -out rootCA.key — получаемый файл закрытого ключа;
  • -aes-128-cbc — алгоритм симметричного шифрования, которым мы зашифруем файл закрытого ключа с помощью пароля. Пароль нужно будет ввести.




Создаю корневой сертификат




Теперь создаю корневой сертификат (открытый ключ):




$ openssl req -x509 -new -key rootCA.key -sha256 -days 3650 -out rootCA.crt
   Enter pass phrase for rootCA.key:
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:RU
   State or Province Name (full name) [Some-State]:Moscow
   Locality Name (eg, city) []:Moscow
   Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sysadminium
   Organizational Unit Name (eg, section) []:.
   Common Name (e.g. server FQDN or YOUR name) []:Sysadminium




Разберу команду:




  • req — создаёт сертификаты или запросы на сертификаты;
  • -x509 — будем создавать сертификат а не запрос;
  • -new — создаём новый сертификат (нужно будет ввести значения некоторых полей в сертификате);
  • -key rootCA.key — используемый закрытый ключ, из которого нужно создать открытый;
  • -sha256 — алгоритм хеширования, чтобы создать подпись ключа;
  • -days 3650 — выпускаем сертификат на 10 лет (обратите внимание что закрытые ключи не имеют срока жизни а сертификаты имеют);
  • -out rootCA.crt — получаемый сертификат.




Итак, я создал пару ключей:




$ ls -l root*
-rw-r--r-- 1 alex alex 1306 сен  9 11:26 rootCA.crt
-rw------- 1 alex alex 1874 сен  9 11:19 rootCA.key




Когда мы будем создавать дочерние сертификаты для доменов, нам понадобится файл с порядковым номером выпускаемых сертификатов. Он должен быть с тем же именем что и корневой ключ, но иметь расширение srl.




Создаю файл порядковых номеров для выпуска сертификатов, в нём следует указать два нуля:




$ nano rootCA.srl
00




Дальше нужно передать корневой сертификат на клиентские компьютеры и установить его в доверенные корневые центры сертификации. Я забираю корневой сертификат по протоколу sftp, показывать этот процесс думаю не нужно.




Установка корневого сертификата на Winows




Устанавливаются сертификаты на Windows очень просто. Дважды щелкаем по сертификату и открывается окно с его свойствами. Дальше нажимаем на кнопку «Установить сертификат«:




Установка сертификата на Windows 10
Установка сертификата на Windows 10




Установить можно для текущего пользователя или для всего компьютера. Так как у меня это тестовая установка, я выберу «Текущий пользователь«:




Установка сертификата на Windows 10 для Текущего пользователя
Установка сертификата на Windows 10 для Текущего пользователя




После нажатия на кнопку «Далее» нужно выбрать «Поместить все сертификаты в следующее хранилище» и нажать кнопку «Обзор«:




Установка сертификата на Windows 10. Выбор хранилища
Установка сертификата на Windows 10. Выбор хранилища




В открывшемся окне выбираем «Доверенные корневые центры сертификации«:




Установка сертификата на Windows 10. Выбор хранилища
Установка сертификата на Windows 10. Выбор хранилища




Затем нажимаем кнопку «ОК«, «Далее» и «Готово«.




И наконец, подтверждаем установку сертификата:




Подтверждение установки корневого сертификата
Подтверждение установки корневого сертификата




И затем нужно будет ещё раз нажать кнопку «ОК«.




Если вы еще раз откроете свойства сертификата (двойным щелчком по нему), то увидите что система начала ему доверять:




Просмотр свойств сертификата
Просмотр свойств сертификата




Создаю ключ и сертификат для домена




Теперь, с помощью корневых ключей мы можем создать ключи для домена. У меня будет домен — site.sysadminium.ru.




Утилита openssl не может без конфигурационного файла добавлять некоторые поля. А нам нужно будет в сертификат добавить поле subjectAltName. Без этого поля браузер Chrome не доверяет сертификату.




Поэтому вначале я создаю следующий конфиг:




$ nano sysadminium.cnf
[ req ]
default_bits = 2048
distinguished_name  = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
countryName                  = Country Name (2 letter code)
countryName_default          = RU
stateOrProvinceName          = State or Province Name (full name)
stateOrProvinceName_default  = Moscow
localityName                 = Locality Name (eg, city)
localityName_default         = Moscow
organizationName             = Organization Name (eg, company)
organizationName_default     = Sysadminium
commonName                   = Common Name (eg, YOUR name or FQDN)
commonName_max               = 64
commonName_default           = site.sysadminium.ru

[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName          = DNS:site.sysadminium.ru




В блоке [ req ] — настраивается команда req:




  • default_bits = 2048 — длина ключа по умолчанию.
  • distinguished_name = req_distinguished_namedistinguished_name — это поля в сертификате, например Common Name, organizationName и другие. Для этих полей мы создадим блок req_distinguished_name ниже.
  • req_extensions = req_ext — расширение для req, здесь мы можем добавить дополнительные поля в сертификат. А в этом параметре мы просто указываем что ниже будет блок req_ext с дополнительными полями.




Блок [ req_distinguished_name ] — служит для конфигурации полей сертификата.




А блок в блок [ req_ext ] — можно добавить некоторые расширяющие свойства сертификата:




  • basicConstraints = CA:FALSE — полученные сертификаты нельзя будет использовать как центр сертификации. Другими словами, забираем у сертификатов для доменов право создавать дочерние сертификаты.
  • keyUsage = nonRepudiation, digitalSignature, keyEncipherment — созданный ключ будет иметь следующие свойства: неотказуемость (если ключом что-то подписали то аннулировать подпись невозможно), цифровая подпись (сертификат можно использовать в качестве цифровой подписи), шифрование ключей (сертификат можно использовать для симметричного шифрования). Об этих свойствах на английском хорошо написано здесь.
  • subjectAltName = DNS:site.sysadminium.ru — а здесь указываем поле subjectAltName и его значение. Как я уже говорил, без этого поля браузер Chrome не доверяет сертификату.




Создаю закрытый ключ для домена




Теперь я создам закрытый ключ для домена:




alex@deb-11:~$ openssl genpkey -algorithm RSA -out site.key
   .......................................+++++
   .............+++++




Создаю файл запроса для домена




С помощью закрытого ключа для домена создаю файл запроса на сертификат:




$ openssl req -new -key site.key -config sysadminium.cnf -reqexts req_ext -out site.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Sysadminium]:
Common Name (eg, YOUR name or FQDN) [site.sysadminium.ru]:




Обратите внимание, все параметры были использованы из конфига, вручную мне не пришлось ничего вписывать.




Создаю сертификат для домена




Теперь, с помощью корневых ключей, подписываю файл запроса и создаю сертификат для домена:




$ openssl x509 -req -days 730 -CA rootCA.crt -CAkey rootCA.key -extfile sysadminium.cnf -extensions req_ext -in site.csr -out site.crt




Разберу команду:




  • x509 — создание сертификата путём подписывания;
  • -req — если подписывать будем файл запроса, то нужно использовать эту опцию;
  • -days 730 — сертификат я делаю на 2 года;
  • -CA rootCA.crt -CAkey rootCA.key — указываю корневую пару ключей;
  • -extfile sysadminium.cnf — файл, содержащий расширения сертификатов. Без этой опции расширения из файла запроса не попадут в сертификат;
  • -in site.csr -out site.crt — файл запроса и файл сертификата.




После проделанного у меня появились три файла связанных с сертификатом для домена:




$ ls -l site.*
-rw-r--r-- 1 alex alex 1257 сен  9 14:27 site.crt # сертификат
-rw-r--r-- 1 alex alex 1098 сен  9 14:17 site.csr # запрос
-rw------- 1 alex alex 1704 сен  9 14:15 site.key # ключ




Перенастраиваю apache2




Кинем сертификат и ключ в следующие каталоги:




$ sudo cp site.crt /etc/ssl/certs/
$ sudo cp site.key /etc/ssl/private/




И настроим apache2 на использование этих ключей:




$ sudo nano /etc/apache2/sites-enabled/default-ssl.conf
   SSLCertificateFile      /etc/ssl/certs/site.crt
   SSLCertificateKeyFile /etc/ssl/private/site.key




Применим изменение конфига apache2:




$ sudo systemctl reload apache2




И проверим как открывается наш сайт с клиента на котором установлен наш корневой сертификат:




Браузер доверяет сертификату сайта
Браузер доверяет сертификату сайта




Как видим, браузер начал доверять нашему тестовому сайту.




Смотрим на сертификат из Chrome




Нажмите на замочек возле адреса сайта (он виден на скриншоте выше). Дальше нажмите на «Безопасное подключение» и на «Действительный сертификат«. Откроются свойства сертификата:




Свойства сертификата из Chrome
Свойства сертификата из Chrome




На вкладке «Подробнее» вы можете изучить и остальные свойства.




Например, помните мы указывали алгоритм ассиметричного шифрования — RSA:




Алгоритм подписи сертификатов
Алгоритм подписи сертификатов




А помните, мы создали файл для серийных номеров выпускаемых сертификатов и записали в нём «00». Давайте посмотрим на серийный номер нашего сертификата:




Серийный номер сертификата
Серийный номер сертификата




Можем посмотреть на сам открытый ключ:




Открытый ключ
Открытый ключ




А в расширениях видно альтернативное имя, которое так нужно браузеру Chrome для доверия к сертификату:




Альтернативное имя
Альтернативное имя




Раньше браузеры проверяли только CN:




Common Name
Common Name




А сейчас, если есть альтернативное имя, то они даже не смотрят в параметр Common Name. А Chrome требует это поле и вообще перестал смотреть на Common Name.




Настраиваю веб-сервер Nginx




Ну и наконец я покажу как настроить Nginx на использование наших сертификатов.




Для начала выключу apache2 и установлю nginx:




$ sudo systemctl stop apache2.service
$ sudo apt install nginx




И настрою его. Нужно рас-комментировать и поменять значения некоторых полей:




$ sudo nano /etc/nginx/sites-enabled/default
   listen 443 ssl default_server;
   listen [::]:443 ssl default_server;
   ssl_certificate     /etc/ssl/certs/site.crt;
   ssl_certificate_key /etc/ssl/private/site.key;




Применю изменения:




$ sudo systemctl reload nginx




И наконец, проверю доверие к ssl-сертификату сайта, обновив страничку в браузере.




Браузер доверяет сертификату сайта
Браузер доверяет сертификату сайта




Здесь apache2 создал свою индексную страничку, поэтому оба веб сервера (nginx и apache2) используют одну и туже страницу. Но как вы помните, я отключил apache2, так что у меня точно отвечает nginx.









Итог




Надеюсь я смог объяснить, как сделать свой центр сертификации и начать выпускать свои собственные сертификаты для доменов. Мы создали следующие файлы:




  • rootCA.key — корневой закрытый ключ. Используется для создания дочерних сертификатов. Обычно лежит на сервере центра сертификации и зашифрован с помощью пароля.
  • rootCA.srl — корневой сертификат. Используется для создания дочерних сертификатов. Его нужно распространить на все ваши компьютеры и установить в хранилище корневых сертификатов. Его тоже можно защитить паролем, но я этого не делал.
  • site.key — ключ для домена (для веб сервера). Его можно было сгенерировать на веб-сервере и не передавать на сервер центра сертификации. Но в моём примере был один сервер и для веб-сервера и для центра сертификации.
  • site.csr — файл запроса на сертификат для домена. Его также можно было сделать на веб-сервере и передать в центр сертификации, чтобы там выпустить сертификат.
  • site.crt — сертификат для домена (для веб сервера). Этот файл создаётся из файла запроса на сертификат с помощью пары корневых ключей.




Также я показал, как использовать созданные сертификаты для настройки веб серверов: apache2 и nginx.




Если вы интересуетесь настройками веб-серверов на Linux, то возможно вам также понравится эта статья:






2022-09-12T11:53:52
Сервера Linux

Как изменить размер шрифта в Ubuntu Linux

В этом посте описаны шаги, которые вы можете предпринять, чтобы увеличить размер шрифта или текста в Ubuntu Linux.

Размер шрифта по умолчанию, который поставляется в Ubuntu Linux, обычно подходит для большинства людей, которые его используют. Но для небольшой группы это может быть слишком мало и бесполезно, особенно для людей с плохим зрением.

При использовании широких экранов и более высоких разрешений может быть трудно четко видеть изображение на больших участках экрана или даже на двойных экранах.

Если вам трудно читать на экране в Ubuntu Linux, вы можете легко изменить размер шрифта, чтобы вам было приятно читать. В некоторых случаях шрифт становится слишком мелким для четкого просмотра, а его увеличение позволит читать, не напрягая глаз.

Следующие шаги покажут вам, как увеличить размер шрифта в Ubuntu Linux.

Как увеличить размер шрифта в Ubuntu Linux

Как описано выше, если размер шрифта маленький и вам трудно читать, вы можете увеличить размер, чтобы вам было приятно читать.

Ниже описано, как это сделать.

Ubuntu Linux имеет централизованное расположение для большинства своих настроек. От конфигурации системы до создания новых пользователей и обновления — все это можно сделать с System Settings панели.

Либо щелкните меню «Система» в правом верхнем углу верхней панели на рабочем столе.

В меню «Система» выберите «Настройки», как показано ниже.

В приложении «Настройки» нажмите плитку «Специальные возможности» , чтобы открыть панель.

В разделе «Параметры системы» -> «Конфиденциальность» -> «Специальные возможности » в разделе «Видение» установите переключатель «Крупный текст» в положение «Вкл.», чтобы увеличить размер текста в Ubuntu Linux.

Чтобы восстановить размер по умолчанию, установите переключатель Крупный текст в положение Выкл.

Шрифты Ubuntu и размер текста должны автоматически увеличиваться после действий, описанных выше. Крупный текст масштабирует текст в 1,2 раза.

Во многих приложениях размер текста можно увеличить в любой момент, нажав CTRL++. Чтобы уменьшить размер текста, нажмите CTRL+–.

Как увеличить размер шрифта в Ubuntu Linux из командного терминала

Затем те же действия, описанные выше, можно выполнить через командную строку. Чтобы изменить размер текста с коэффициентом масштабирования в 1,5 раза, выполните приведенные ниже команды.

gsettings set org.gnome.desktop.interface text-scaling-factor 1.5

После этого размер шрифта в Ubuntu Linux должен быть намного больше, чем по умолчанию. В Ubuntu Linux возможны более продвинутые методы; однако приведенных выше шагов должно быть достаточно, чтобы увеличить размер шрифта.

Вывод:

В этом посте показано, как увеличить размер шрифта в Ubuntu Linux. если вы нашли какую-либо ошибку выше или хотите что-то добавить, пожалуйста, используйте форму комментария ниже.



2022-09-11T12:46:27
Вопросы читателей

Как изменить фон рабочего стола в Ubuntu Linux

В этом посте описаны шаги, которые можно предпринять, чтобы изменить фон рабочего стола в Ubuntu Linux.

Используя фон рабочего стола в Ubuntu Linux, вы можете отображать фотографии своей семьи, домашних животных или других важных людей и мест в вашей жизни.

Ubuntu Linux позволяет менять фон рабочего стола любой понравившейся фотографией. Вам не нужно довольствоваться изображениями, которые поставляются с вашим компьютером. Идите и персонализируйте свой рабочий стол по своему вкусу.

Есть несколько способов изменить фоновый рисунок в Ubuntu Linux. Вы можете использовать образы, уже включенные в Ubuntu Linux, или установить свои собственные.

Один из способов установить одну из ваших собственных фотографий в качестве фона — щелкнуть правой кнопкой мыши файл изображения в диспетчере файлов и выбрать «Установить как обои» или открыть файл изображения в средстве просмотра изображений, нажать кнопку меню в строке заголовка и выбрать « Установить». как обои.

Как установить фоновые обои в Ubuntu Linux

Как описано выше, Ubuntu Linux позволяет пользователям использовать фон рабочего стола в Ubuntu Linux для отображения фотографий семьи, домашних животных или других важных людей и мест в их жизни.

Ниже описано, как изменить фоновый рабочий стол в Ubuntu Linux.

Ubuntu Linux имеет централизованное расположение для большинства своих настроек. От конфигурации системы до создания новых пользователей и обновления — все это можно сделать с System Settings панели.

Либо щелкните меню «Система» в правом верхнем углу верхней панели на рабочем столе.

В меню «Система» выберите «Настройки», как показано ниже.

В приложении «Настройки» щелкните фоновую плитку, чтобы открыть панель.

Текущие выбранные обои отображаются в верхней части экрана.

Чтобы изменить фон рабочего стола, щелкните одно из фоновых изображений, поставляемых вместе с системой.

Выбранное вами изображение будет немедленно применено и сменит фон прямо на ваших глазах.

Обои, которые вы видите с маленькими часами в правом нижнем углу, являются динамическими. Эти обои меняются в течение дня.

Если вы не хотите выбирать обои, поставляемые с Ubuntu Linux, вы можете добавить свои собственные.

Нажмите «Добавить изображение…» , чтобы использовать одну из своих фотографий. По умолчанию папка «Изображения» будет открыта, так как большинство приложений для управления фотографиями хранят там фотографии.

Выберите папку из папки «Изображения» или там, где вы ее сохранили, и сделайте ее фоном.

Это должно сделать это! Теперь вы можете закрыть приложение «Настройки».

Вывод:

В этом посте показано, как изменить фон в Ubuntu Linux. Если вы обнаружите какую-либо ошибку выше или вам есть что добавить, пожалуйста, используйте форму комментариев ниже, чтобы сообщить об этом.



2022-09-11T12:38:32
Вопросы читателей

🐳 Популярные ошибки в конфигурации, которые делают контейнерные приложения уязвимыми для атак

С учетом того, что сегодня число интернет-пользователей поражает воображение, а сами веб-приложения выполняют больше задач, чем когда-либо в прошлом, масштабирование, поддержка и разработка крупных веб-приложений стали серьезной проблемой для команд DevOps.

Теперь, когда приложения масштабируются в нескольких публичных облаках с использованием различных технологических стеков, для их поддержки и развертывания требуются современные решения.

Итак, мы продолжаем статью 🦊 Современное состояние безопасности CI/CD и как предотвратить распространенные ошибки

Среди них популярны контейнерные приложения, обычно использующие такие технологии, как Docker.

Дальнейшее масштабирование стало возможным с появлением таких технологий, как Kubernetes.

Контейнерные приложения позволяют DevOps-командам поддерживать контейнеры с определенными конфигурациями и версиями приложений.

Эта практика также позволяет командам DevOps реплицировать их столько раз, сколько необходимо, и все это в автоматическом режиме.

Сочетание таких технологий, как Kubernetes (которая сделала развертывание, масштабирование и обслуживание контейнерных приложений очень простым) и Docker, зарекомендовало себя как решение для удовлетворения требований современных приложений, что привело к значительному росту их популярности в последнее время.

Однако внедрение новых технологий всегда чревато новыми ошибками и уязвимостями.

Поэтому такой риск требует такого же внимания, как и ручное развертывание, чтобы избежать наплыва уязвимостей, проникающих в ваше контейнерное и автоматизированное развертывание.

Какие популярные ошибки в конфигурации делают контейнерные приложения уязвимыми для атак?

Наиболее распространенным источником уязвимостей в таких технологиях, как Docker, Kubernetes и других технологиях автоматизации, таких как SaltStack, Ansible и Puppet, являются устаревшие версии программного обеспечения, а также отсутствие процедур усиления безопасности и надлежащего анализа конфигурации.

Права

Одна из самых основных форм неправильной конфигурации в Docker связана с повышением прав пользователя.

В таких случаях контейнеры Docker, запускаемые от имени root, представляют гораздо более серьезную угрозу безопасности, чем контейнеры, запускаемые не от имени root.

🐳 Почему процессы в контейнерах Docker не должны запускаться от имени Root

Если контейнер запускается под пользователем root и существуют уязвимости безопасности для данной версии Docker, то, например, в прошлом существовали уязвимости, которые позволяли злоумышленникам проникнуть на хост через уязвимое или неправильно сконфигурированное программное обеспечение, запущенное в самом контейнере.

🐳 Что такое Docker без root (rootless)?

Такое уязвимое программное обеспечение также позволяло злоумышленникам выйти из контейнера и проникнуть на хост-сервер, на котором запущен контейнер.

Именно поэтому настоятельно рекомендуется запускать контейнеры под управлением пользователей с нужным количеством разрешений и доступа.

Docker поддерживает работу в режиме пользователя rootless/non-root, что позволяет значительно повысить уровень безопасности, конфигурацию которого можно увидеть в официальном руководстве по Docker.

Безопасность данных/конфигурации

Место хранения данных – важный момент при работе с контейнерами, такими как Docker, как и знание того, что хранение данных внутри контейнеров часто имеет больше недостатков, чем преимуществ.

Настоятельно рекомендуется хранить любые пользовательские данные вне контейнера; в случае обнаружения уязвимостей контейнер можно уничтожить, обновить и развернуть из чистого состояния.

Это позволяет автоматизировать работу с CVE, поскольку данные не находятся внутри контейнера.

Хранение учетных данных – еще одна частая ошибка конфигурации.

Как и в случае с хранением данных, рекомендуется избегать хранения учетных данных внутри самого контейнера, чтобы в случае возникновения уязвимости контейнер можно было легко обновить и снова запустить без утечки учетных данных.

Монтирование данных вне контейнера легко выполняется с помощью Docker.

Рассмотрим следующую команду Docker run:

docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started

В этом примере данные хранятся вне контейнера по пути /etc/todos – таким образом, контейнер работает независимо, позволяя создавать, уничтожать или перемещать контейнер, сохраняя данные как есть и в отдельном пути.

Автоматизация безопасности

Такие технологии, как Ansible, SaltStack и Puppet, используются для автоматизации задач, которые необходимо выполнять на большом количестве серверов.

Эти технологии используют файлы конфигурации, называемые “плейбуки”, которые содержат информацию о том, что и где должно быть выполнено.

Для работы этих плейбуков необходим доступ к серверам через SSH или аналогичный доступ на уровне консоли.

Однако выполнение этих  задачот имени root и/или хранение паролей root в открытом виде в этих конфигурациях может привести к инцидентам, связанным с безопасностью, в случае утечки конфигураций.

Рассмотрим следующий пример.

Чтобы установить MySQL с помощью Ansible:

- hosts: webservers

  user: vagrant

  sudo: true

  vars_files:

    - vars.yml



  tasks:

    - name: Install MySQL

      action: apt pkg=$item state=installed

      with_items:

        - mysql-server-core-5.5

        - mysql-client-core-5.5

        - libmysqlclient-dev

        - python-mysqldb

        - mysql-server

        - mysql-client



    - name: Start the MySQL service

      action: service name=mysql state=started



    - name: Remove the test database

      mysql_db: name=test state=absent



    - name: Create deploy user for mysql

      mysql_user: user="deploy" host="%" password={{mysql_root_password}} priv=*.*:ALL,GRANT



    - name: Ensure anonymous users are not in the database

      mysql_user: user='' host=$item state=absent

      with_items:

        - 127.0.0.1

        - ::1

        - localhost



    - name: Copy .my.cnf file with root password credentials

      template: src=templates/.my.cnf dest=/etc/mysql/my.cnf owner=root mode=0600



    - name: Update mysql root password for all root accounts

      mysql_user: name=root host={{item}} password={{mysql_root_password}}

      with_items:

        - 127.0.0.1

        - ::1

        - localhost

Как показано выше, мы можем использовать Ansible для установки определенной версии MySQL (5.5), запуска службы, удаления всех тестовых баз данных, добавления пользователя, удаления всех анонимных пользователей, копирования существующего файла my.cnf и обновления пароля root.

Поскольку пароль root MySQL, различная другая конфиденциальная информация (например, версия MySQL) и имя развернутого пользователя MySQL хранятся прямо в конфигурационном файле, безопасность становится насущной проблемой.

Раскрытие конфигурации/файлов

Конфигурация/файлы Docker могут быть идеальной демонстрацией такого рода неправильной конфигурации.

Давайте рассмотрим пример базового официального файла Docker compose (docker-compose.yml), используемого для установки WordPress с MySQL:

version: "3.9"



services:

  db:

    image: mysql:5.7

    volumes:

      - db_data:/var/lib/mysql

    restart: always

    environment:

      MYSQL_ROOT_PASSWORD: somewordpress

      MYSQL_DATABASE: wordpress

      MYSQL_USER: wordpress

      MYSQL_PASSWORD: wordpress



  wordpress:

    depends_on:

      - db

    image: wordpress:latest

    volumes:

      - wordpress_data:/var/www/html

    ports:

      - "8000:80"

    restart: always

    environment:

      WORDPRESS_DB_HOST: db

      WORDPRESS_DB_USER: wordpress

      WORDPRESS_DB_PASSWORD: wordpress

      WORDPRESS_DB_NAME: wordpress

volumes:

  db_data: {}

  wordpress_data: {}

Здесь мы видим, что MySQL 5.7 установлен из последнего образа WordPress, доступного на Docker Hub, а также пароль корня MySQL, имя базы данных, имя пользователя и пароль пользователя.

Поскольку конфигурация контейнера Docker перечисляется в виде обычного/человекочитаемого текста, включая пароли к базе данных, пути к данным и файлам, необходимо убедиться не только в надежности хранения файлов, но и в том, что любая часть автоматизированных процессов развертывания обеззараживается при использовании для развертывания контейнеров.

Обнаружение подобных проблем с конфигурацией позволяет blue team предотвратить утечку конфиденциальных данных, которые впоследствии могут быть использованы для осуществления более сложных атак на облачную инфраструктуру.

Раскрытие Kubernetes

Rancher – это мультикластерная платформа оркестровки с открытым исходным кодом, которая позволяет операционным командам развертывать, управлять и обеспечивать безопасность корпоративных Kubernetes.

Это программное обеспечение для оркестрации часто становится жертвой неправильной конфигурации; например, учетные данные администратора по умолчанию часто полностью раскрываются, что, в свою очередь, используется злоумышленниками.

Раскрытие консоли Kubernetes

Консоль Kubernetes (или дашборд) является важной частью настройки Kubernetes.

Она позволяет получить полный обзор всех контейнеров, управляемых кластером Kubernetes, включая их состояние, использование памяти, других ресурсов, а также различные функции управления.

Раскрытие этой консоли может привести к различным типам атак.

В прошлом открытые консоли использовались для организации майнинга криптовалюты, что может привести к финансовым потерям и замедлению работы приложений из-за потребления ресурсов процессами майнинга криптовалюты.

Раскрытие Kubernetes Kustomization

Инструмент Kubernetes Kustomization используется для настройки объектов Kubernetes с помощью файла “Kustomization”.

Со страницы проектов Kustomize позволяет настраивать необработанные, свободные от шаблонов YAML-файлы для различных целей, оставляя исходный YAML нетронутым и пригодным для использования как есть.

В свою очередь, такая возможность настройки конфигураций делает новые файлы Kustomization довольно мощными, позволяя объединять различные существующие файлы конфигурации Kubernetes.

Однако доступ к этим файлам может привести к утечке большого количества конфиденциальных данных из вашей организации, поэтому очень важно обеспечить постоянную безопасность и дезинфекцию этих файлов.

А как насчет уязвимостей программного обеспечения для оркестрации контейнеров?

Правильная настройка этих инструментов необходима для обеспечения безопасности развертывания контейнерных приложений.

В конце концов, недостатки безопасности в этих инструментах могут быть как простыми, например, приборная панель позволяет обходить аутентификацию, так и сложными, например, приборная панель имеет уязвимости безопасности, позволяющие проводить инъекционные атаки shell.

Учитывая  уязвимость CVE-2020-16846, затрагивающую SaltStack Salt, программное обеспечение для управления инфраструктурой и оркестровки контейнеров, CVE позволяла осуществлять атаки shell injection при отправке определенных веб-запросов к API SaltStack.

Проще говоря, поскольку уязвимости возможны в стеке управления вашей контейнерной инфраструктурой, безопасность всего вашего контейнерного приложения, вероятно, также находится под угрозой.

Заключение

Наряду с неизбежным переходом на контейнерные приложения, используемые в организациях для обеспечения более простого управления, быстрого развертывания и эффективного масштабирования веб-приложений, возникают определенные критические проблемы безопасности, которые часто упускаются из виду при рассмотрении различных преимуществ (а иногда и сложностей) управления этими кластерами контейнеров.

Хотя контейнеры доказали, что они помогают обеспечить согласованность, сократить время развертывания и другие проблемы, связанные с версиями и конфигурациями программного обеспечения для разработчиков и производственных инстансов, они также создают извечную проблему обеспечения правильной и безопасной конфигурации.

Это особенно актуально для конфигурационных файлов, содержащих детали, касающиеся каждого аспекта развертываемого программного обеспечения: пути к данным, пароли баз данных и другие учетные данные доступа.

 



2022-09-09T13:33:57
Закрытие уязвимостей

Как устанавливать программы в Ubuntu Linux

В этом посте описаны шаги, которые можно предпринять для установки дополнительных пакетов программного обеспечения в Ubuntu Linux.

Когда вы устанавливаете Ubuntu и выбираете обычную установку, она поставляется с пакетами или программами, которые вы можете использовать для выполнения своих повседневных задач. Эти пакеты по умолчанию не являются полным списком, который вам нужен.

Возможно, вам потребуется установить дополнительное программное обеспечение, которое еще не установлено. Приложения в Ubuntu Linux доступны в двух форматах: пакеты Snap и Debian.

Пакет snap будет называться snap. Пакеты Debian — это те, которые заканчиваются расширениями.DEB. Если приложение доступно в обоих форматах, Ubuntu Software сначала перечисляет приложения snap.

Ниже описано, как установить дополнительное программное обеспечение в Ubuntu Linux.

Как установить программное обеспечение в Ubuntu Linux

Как описано выше, если вам нужны дополнительные программы, которые еще не установлены в Ubuntu Linux, вы можете легко сделать это из приложения Ubuntu Software.

Ниже описано, как это сделать.

Щелкните значок Ubuntu Software на панели Dock или выполните поиск программного обеспечения в строке поиска «Обзор действий».

При запуске Ubuntu Software выполните поиск приложения или выберите категорию и найдите приложение из списка.

По умолчанию он открывается на вкладке «Обзор». Вкладка «Установленные» включает в себя все установленное программное обеспечение. На вкладке «Обновления» отображается список программного обеспечения, для которого доступны обновления.

Если вы прокрутите немного вниз, вы увидите раздел «Категории», где программное обеспечение сгруппировано по категориям.

Чтобы установить программное обеспечение, выберите приложение, которое вы хотите установить, и нажмите « Установить».

Вам будет предложено пройти аутентификацию, введя свой пароль. Как только вы это сделаете, начнется установка.

Установка обычно завершается быстро, но может занять некоторое время, если у вас медленное подключение к Интернету.

После этого программное обеспечение должно быть установлено и готово к использованию.

Сделайте это с другими приложениями, которые вы хотите установить.

Это должно сделать это!

Вывод:

В этом посте показано, как установить дополнительные пакеты программного обеспечения в Ubuntu Linux. Если вы нашли какую-либо ошибку выше или хотите что-то добавить, пожалуйста, используйте форму комментария ниже.



2022-09-08T09:42:33
Вопросы читателей

Изучение SSH: параметры и параметры конфигурационного файла SSHD

Изучение SSH: параметры и параметры конфигурационного файла SSHD

Изучение SSH: параметры и параметры конфигурационного файла SSHD

в предыдущем (четвертая) часть из этой серии постов на Изучение SSH мы обращаемся к параметры, указанные в Конфигурационный файл OpenSSH которые обрабатываются на стороне SSH-клиент, то есть файл «SSHConfig» (ssh_config).

По этой причине сегодня мы продолжим в этом предпоследняя и пятая доставка, с параметрами, указанными в Конфигурационный файл OpenSSH которые обрабатываются на стороне ssh-сервер, то есть файл «Конфигурация SSHD» (sshd_config).



Читать