Записки молодого девопсера
153 subscribers
94 photos
7 files
623 links
Здесь выкладываются различные команды и решения проблем, с которыми приходится сталкиваться, а также интересные статьи и видео из мира IT.
Download Telegram
При обновлении Gitlab узнал, что существуют специальные сервисные учетные записи:

* Ghost User - служит для отображения комментариев и issues для удаленных пользователей (https://gitlab.com/gitlab-org/gitlab-foss/-/issues/33020)

* Gitlab Support Bot - создает issues (https://docs.gitlab.com/ee/user/project/service_desk.html#support-bot-user)

* Gitlab Migration Bot - не нашел никакой информации. Возможно, служит для проведения миграций в БД или иных сущностей

P.S. Подобные учетные записи не учитываются в подсчёте лицензий.
Для смены таймзоны внутри Docker-контейнера на базе Alpine нужно установить пакет tzdata командой apk add tzdata и установить переменную окружения TZ (например, TZ=Europe/Moscow)
В версии 2,221 Jenkins добавили полезный функционал для очистки старых билдов и артефактов. Опцию можно настроить глобально для всех проектов или для каждого проекта по отдельности. Можно указать сколько дней нужно хранить билды/артефакты и максимальное число билдов/артифактов.
https://support.cloudbees.com/hc/en-us/articles/215549798-Best-Strategy-for-Disk-Space-Management-Clean-Up-Old-Builds
Делаем свой сайт безопаснее.
Есть вот такой ресурс https://www.ssllabs.com, который проверяет безопасность вашего сайта (актуальность шифров, алгоритмов, протоколов и прочее).
После сканирования ресурс дает рейтинг вашему сайту в плане защиты. Ниже краткий пересказ того, как я получал рейтинг A+ вместо B на примере веб-сервера nginx.
* Отключаем поддержку старых версий протокола TLS (а именно, версий 1.0 и 1.1), оставляем 1.2 и 1.3 - устанавливается директивой ssl_protocols
ssl_protocols TLSv1.2 TLSv1.3;

* Оставляем набор актуальных шифров (отключаем недействительные, небезопасные, малоиспользуемые и уязвимые шифры) - устанавливается директивой ssl_ciphers
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !RC4 !EXP !PSK !SRP !CAMELLIA !SEED';

* Даем возможность веб-серверу выбирать шифр, а не браузеру - устанавливается директивой ssl_prefer_server_ciphers
ssl_prefer_server_ciphers on;

https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
Microsoft выкатил утилиту Super Linter для проверки кода на следующих языках:
Ansible (ansible-lint)
CSS (stylelint)
CoffeeScriptc(offeelint)
Dockerfile (dockerfilelint)
Golang (golangci-lint)
JavaScript (eslint standard js)
JSON (jsonlint)
Markdown (markdownlint
Perl (perl)
Python3 (pylint)
Ruby (RuboCop)
Shell (Shellcheck)
Terraform (tflint)
TypeScript (eslint standard js)
XML (LibXML)
YAML (YamlLint)
ENV (dotenv-linter)
https://habr.com/ru/post/507528/
Пока все прикручивается только к Github Actions, но есть возможность локального запуска в Docker.
Интересная задумка - строить схему взаимодействия между сервисами, а на выходе получать готовый docker-compose файл.
https://nuxx.io/
Если вы используется Ansible в связке с Python2 и Jinja, то при запуске (случайно или специально) на Python3 можно получить следующую ошибку:
fatal: [host-01.test.ru]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'iteritems'"}

В Python2 словари используют методы iterkeys(), itervalues(), iteritems() , в Python3 эти методы удалены. Следует использовать методы dict.keys(), dict.values(), dict.items() для обеспечения совместимости между Python2 и Python3.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_python_version.html#dict-iteritems
P.S. И не стоит забывать, что Python2 уже deprecated и выпилен с большинства апстрим дистрибутивов.
https://github.com/zricethezav/gitleaks
Небольшая утилита для сканирования репозиториев на предмет секретов, таких как пароли, ключи API и токены .
Утилита либо клонирует репозиторий по ссылке, либо указывается путь на файловой системе.
Заявлена поддержка Github и Gitlab API, которая позволяет сканировать целые организации, пользователь и запросы на слияния (честно говоря, в документации не увидел такую возможность)
Пример запуска:
docker run  docker.io/zricethezav/gitleaks:latest gitleaks --repo=https://gitlab.example.com/repo_name --access-token=your_token --verbose --pretty

Помимо токена можно указать логин+пароль или ssh-ключ.
Вывод выглядит следующим образом (пример):
{
"line": "-----BEGIN RSA PRIVATE KEY-----",
"offender": "-----BEGIN RSA PRIVATE KEY-----",
"commit": "1111111111111111111111111111111111111111",
"repo": "test_repo",
"rule": "Asymmetric Private Key",
"commitMessage": "Add private key",
"author": "Test User",
"email": "[email protected]",
"file": "id_rsa",
"date": "2016-10-20T14:37:47Z",
"tags": "key, AsymmetricPrivateKey"
}

Если у вас Gitlab, то можно через API получить URL всех репозиториев, а потом скриптом обработать все.
Через API список репозиториев можно получить вот так (требуется наличие утилиты jq):
curl -s --header "PRIVATE-TOKEN: your_token" "https://gitlab.example.com/api/v4/projects?per_page=100&page=1" | jq -r '.[]|.web_url'

Также нужно учитывать ограничение на выдачу количества записей в API
https://docs.gitlab.com/ee/api/projects.html#pagination-limits
Смотрел на днях видео, где рекомендовали в случае DDoS-атак отдавать 444 код ответа. Решил узнать, что это за код. И, внезапно, выяснилось, что браузеры немного по-другому взаимодействуют с ресурсом, который отдаем подобный код ответа
https://habr.com/ru/post/415565/