• Как изменить размер раздел диска Linux

    Рассмотрим как на виртуальной машине Linux увеличить раздел диска без LVM.

    Исходные данные

    • Debian 11
    • Исходный размер /dev/sda — 20G
    • Необходимо увеличить размер /dev/sda — 25G

     

    Исходные данные

    В системе один диск /dev/sda размером 20G, отобразим информацию по нему:

    fdisk -l
    
    Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x73000288
    
    Device Boot Start End Sectors Size Id Type
    /dev/sda1 * 2048 39942143 39940096 19G 83 Linux
    /dev/sda2 39944190 41940991 1996802 975M 5 Extended
    /dev/sda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
    df -h
    
    Filesystem Size Used Avail Use% Mounted on
    udev       944M 0     944M   0% /dev
    tmpfs      192M 500K  192M   1% /run
    /dev/sda1   19G 990M   17G   6% /
    tmpfs      960M    0  960M   0% /dev/shm
    tmpfs      5.0M    0  5.0M   0% /run/lock
    tmpfs      192M    0  192M   0% /run/user/1000

     

    Увеличение размера диска

    Увеличиваем размер жесткого диска в ВМ, в моем случае я увеличиваю до 25G. После расширения диска в ВМ, принудительно выполним рескан дисков, командой:

    echo 1 > /sys/block/sda/device/rescan

    Проверяем изменения. В случае если после рескана размер диска не увеличился в системе, то выполняем перезагрузку и проверяем повторно.

    fdisk -l
    
    Disk /dev/sda: 25 GiB, 26843545600 bytes, 52428800 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x73000288
    
    Device     Boot    Start      End  Sectors  Size Id Type
    /dev/sda1  *        2048 39942143 39940096   19G 83 Linux
    /dev/sda2       39944190 41940991  1996802  975M  5 Extended
    /dev/sda5       39944192 41940991  1996800  975M 82 Linux swap / Solaris
    ВНИМАНИЕ. Рекомендуется перед последующими действиями сделать резервную копию ВМ.

    Читать далее

  • Не освободилось место после удаления файла в Linux

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

     

    К примеру мы имеем большой файл /var/log/mysql/error.log и мы его удалили:

    rm -rf /var/log/mysql/error.log

     

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

    lsof | grep deleted | grep error.log
    
    COMMAND   PID  TID TASKCMD   USER   FD   TYPE   DEVICE   SIZE/OFF  NODE   NAME
    mariadbd  641  768 mariadbd  mysql  6u   REG    8,1      178689523 917524 /var/log/mysql/error.log (deleted)

    Видим что файл /var/log/mysql/error.log с пометкой (deleted) занят процессом mariadbd и не может быть удален. Можно конечно перезагрузить сервер и тогда файл удалится, но не всегда перезагрузка возможна, поэтому мы освободим удаленный файл от процесса, тем самым высвободим занимаемое им место.

     

    Зная PID процесса (641) найдем номер файлового дескриптора удаленного файла, командой:

    ls -l /proc/641/fd | grep error.log
    
    l-wx—— 1 root root 64 Dec 25 10:00 10 -> /var/log/mysql/error.log

    Читать далее

  • Полезные команды по работе с SSL-сертификатами при помощи OpenSSL

    Иногда приходится работать с SSL-сертификатами и каждый раз приходится вспоминать, либо искать информацию как сделать то или иное действие с сертификатами при помощи OpenSSL.

    Поэтому решил создать дополняему статью на тему полезных команд по работе с SSL-сертификатами при помощи OpenSSL.

     

    Проверка на валидность сертификата

    Проверка .pem, .crt — сертификата.
    Проверка .key — приватного ключа.
    Проверка .csr — ключ запроса сертификата.

    MD5 у всех должен совпадать. Важно чтобы MD5 были одинаковые только у приватного ключа (.key) и сертификата (.pem, .crt), .csr нужен в случае если понадобится продлевать данный сертификат.

    openssl x509 -noout -modulus -in server.crt | openssl md5
    openssl rsa -noout -modulus -in server.key | openssl md5
    openssl req -noout -modulus -in request.csr | openssl md5

    Пример.

    root@openssl:~/intermediate# openssl rsa -noout -modulus -in private/server.key | openssl md5
    (stdin)= f6647d0867087e0adae0d65d5451a994
    root@openssl:~/intermediate# openssl x509 -noout -modulus -in certs/server.crt | openssl md5
    (stdin)= f6647d0867087e0adae0d65d5451a994
    root@openssl:~/intermediate# openssl req -noout -modulus -in csr/server.csr | openssl md5
    (stdin)= f6647d0867087e0adae0d65d5451a994
    

    Читать далее

  • Как извлечь файлы .crt и .key из файла .pfx

    Файл .pfx, который находится в формате PKCS#12, содержит сертификат SSL (открытые ключи) и соответствующие закрытые ключи. Иногда необходимо извлечь сертификат и закрытый ключ в незашифрованный текстовый формат, чтобы использовать их в другой системе.

    Рассморим как преобразовать файл .pfx в отдельные файлы .crt и .key.

     

    Извлечение .crt и .key из файла .pfx

    Команда чтобы извлечь закрытый ключ:

    openssl pkcs12 -in [yourfile.pfx] -nocerts -out [encrypted_key.key]

    В процессе извлечения необходимо ввести пароль, который использовали при создании файла .pfx. Далее будет предложено ввести новый пароль для защиты экспортируемого файла .key.

     

    Команда чтобы расшифровать закрытый ключ:

    openssl rsa -in [encrypted_key.key] -out [decrypted_key.key]

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

     

    Команда чтобы извлечь сертификат:

    openssl pkcs12 -in [yourfile.pfx] -clcerts -nokeys -out [certificate.crt]

    Читать далее

  • Ошибка — Cannot find key for kvno in keytab

    В один момент перестала работать Kerberos/SSO аутентификация на сайте размещённом на веб-сервере Apache, в логах значатся ошибки вида:

    ...
    [Mon Sep 04 11:04:58.724720 2023] [auth_kerb:error] [pid 19547] [client 10.51.90.61:58932] gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (, Cannot find key for HTTP/svc.web@JAKONDA.LOCAL kvno 4 in keytab)
    ...
    

     

    Проверяем текущее значение номера Key Version Number (KVNO) в keytab-файле:

    klist -k /etc/svc.web.keytab
    
    Keytab name: FILE:/etc/svc.web.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
       2 HTTP/zabbix.nordrim.ae@NORDRIM.LOCAL
    

    Видим что номер Key Version Number (KVNO) учётной записи равен 2, в то время у учетной записи AD атрибут msDS-KeyVersionNumber равен 4.

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

     

    В Windows можно посмотреть текущее значение KVNO для учетной записи в свойствах учётной записи — атрибут msDS-KeyVersionNumber

    Читать далее

  • Настройка Kerberos Single Sign-On (SSO) с GSSAPI на Debian 11 Bullseye.

    Рассмотрим как настроить Kerberos Single Sign-On (SSO) с GSSAPI в Apache веб-сервере на Debian 11 Bullseye.

    Исходные данные:

    • Windows домен — jakonda.local
    • Доменная служебная учетная запись — svc.web
    • Linux машина — Debian 11

     

    Сперва необходимо создать сервисную учетную запись (в моем случае это будет svc.web) и сгенерировать для нее KEYTAB-файл на домен контроллере Windows.

    Делается все это командой ниже, не забываем подставить свои данные вместо моих.

    ktpass -princ HTTP/web.jakonda.ru@JAKONDA.LOCAL -mapuser svc.web@JAKONDA.LOCAL -pass 3T2XgYCz2IFcBUo0altu -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out C:\Keytabs\svc.web.keytab
    ИНФОМАЦИЯ. где web.jakonda.ru — это имя веб-сервера на котором должна работать Kerberos SSO аутентификация, а JAKONDA.LOCAL это имя домена. Важно соблюдать регистр написания имени домена.

    Передаем сгенерированный KEYTAB-файл на Debian любым удобным способом и размещаем его в каталоге /etc, либо в любом другом безопасном месте месте.

     

    Назначим права и уровень доступа к файлу:

    chown root:www-data /etc/svc.web.keytab
    chmod 640 /etc/svc.web.keytab

     

    Устанавливаем пакеты веб-сервера apache, модуль аутентификации gssapi для него и kerberos.

    apt-get install apache2 apache2-utils libapache2-mod-auth-gssapi krb5-user

    Читать далее

  • Как отобразить реальный IP-адрес клиента в логах Apache 2.4, работающем за прокси в Nginx.

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

     

    Nginx

    В файле конфигурации вирутального хоста в секцию location необходимо добавить следующие параметры:

    location / {
         ...
         proxy_set_header Host            $host;
         proxy_set_header X-Real-IP       $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         ...
    }

     

    Apache

    В Apache 2.4 входит модуль mod_remoteip, который может перезаписывать удаленный IP-адрес. Настроим его чтобы он принимал проброс IP-адреса клиента с прокси-сервера Nginx.

     

    Создаем конфигурацию для модуля mod_remoteip. Выполняем команду:

    cat << EOF > /etc/apache2/conf-available/remoteip.conf
    <IfModule remoteip_module>
            RemoteIPHeader X-Forwarded-For
            RemoteIPTrustedProxy 127.0.0.1
            RemoteIPInternalProxy 127.0.0.1
    </IfModule>
    EOF
    ИНФОРМАЦИЯ. В случае если у вас проси-серве Nginx и Apache разнесены по разным серверам, то в параметре RemoteIPInternalProxy необходимо указать IP-адрес прокси-сервера.

    Читать далее

  • Bash скрипт автоматизации для быстрого перехода между нужными папками на Linux.

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

    Тестировалась работоспособность на deb-like Linux системах, думаю на rpm тоже будет работать.

     

    Скачиваем скрипт в любую директорию и распаковываем

    wget -O hzcd.zip https://sysos.ru/download/1711
    unzip hzcd.zip

    Выполняем установку

    ./hzcd.sh --install && . ~/.bashrc
    Установка выполнится в ~/.hzcd директорию. Будут внесены изменения в ~/.bashrc

    Команды консоли:

    • .-l — показать список замапленных директорий
    • .-a — добавить текущею
    • .-d — удалить текущею

    Любой алиас из списка перейти в указанную директорию. Для себя алиасы так-же назначаю через точку например .work

    Читать далее

  • Защита Nginx от атак HTTP 404 | 429 с помощью Fail2Ban на Debian.

    Рассмотрим как обрабатывать HTTP 404 в логах веб-сервера Nginx и блокировать злоумышленников которые пытаются найти уязвимости на опубликованных сайтах с помощью Fail2Ban.

    Пример подобной атаки злоумышленников на веб-сайт размещенный на Nginx:

    130.255.15.40 - - [08/Aug/2023:17:27:53 +0300] "GET /aslogo.jpeg HTTP/1.1" 404 41318 "-" "gobuster/3.1.0"
    130.255.15.40 - - [08/Aug/2023:17:27:53 +0300] "GET /dexter.txt HTTP/1.1" 404 41318 "-" "gobuster/3.1.0"
    130.255.15.40 - - [08/Aug/2023:17:27:53 +0300] "GET /dexter.html HTTP/1.1" 404 235 "-" "gobuster/3.1.0"
    130.255.15.40 - - [08/Aug/2023:17:27:53 +0300] "GET /5553.md HTTP/1.1" 404 41318 "-" "gobuster/3.1.0"
    130.255.15.40 - - [30/Aug/2023:17:00:13 +0300] "GET /admin HTTP/1.1" 429 162 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.7"
    130.255.15.40 - - [30/Aug/2023:17:00:13 +0300] "GET /admins HTTP/1.1" 429 162 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.7"

     

    # Устанавливаем пакет fail2ban, если он не установлен:

    apt-get install fail2ban

    # Создаем фильтр Fail2Ban для поиска запросов 404:

    cat << EOF > /etc/fail2ban/filter.d/nginx-4xx.conf
    [Definition]
    failregex = ^<HOST> - - \[.*\] "(GET|POST).*HTTP.* (404|429)
    ignoreregex =
    EOF

    # Настраиваем Fail2ban для блокировки 404 запросов. В конфигурационный файл -/etc/fail2ban/jail.local добавляем:

    [nginx-4xx]
    enabled  = true
    port     = http,https
    logpath  = /var/log/nginx/*access.log
    maxretry = 20
    findtime = 10
    bantime  = 10m
    ignoreip =

    Читать далее

  • Установка актуальной версии Ansible на Debian 11 Bullseye

    Опишу как выполнить установку последний версии Ansible из исходников на Debian 11 Bullseye.
    Официальный репозиторий Ansible — https://github.com/ansible/ansible

    Для работы последних версий Ansible  требуется версия Python 3.10 и старше. Как поставить последнюю версию Python на Debian можно по этой статье.

     

    Установка

    # Выполняем установку Ansible при помощи pip для всех пользователей системы:

    python3 -m pip install ansible

    # Проверить результат установки можно командой:

    ansible --version
    ansible [core 2.15.2]
      config file = None
      configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python3.11/site-packages/ansible
      ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
      executable location = /usr/bin/ansible
      python version = 3.11.4 (main, Aug  2 2023, 16:54:45) [GCC 10.2.1 20210110] (/usr/bin/python3)
      jinja version = 3.1.2
      libyaml = True
    

    Читать далее