четверг, 29 апреля 2021 г.

Ubuntu: passwordless login with YubiKey 5

https://askubuntu.com/questions/1167691/passwordless-login-with-yubikey-5-nfc



Читать лучше целиком. И краткий пересказ

sudo apt install libpam-u2f

pamu2fcfg | sudo tee /etc/u2f_mappings

# По комментам, лучше писать

# pamu2fcfg -u USERNAME | tee /etc/u2f_mappings

# OR (from root only)


# pamu2fcfg -u USERNAME >> /etc/u2f_mappings

После этого обновляем pam.d/ конфиги, добавляя auth sufficient pam_u2f.so ко всем связанным сервисам: gdm-password lightdm sudo login

sudo -i
cd /etc/pam.d
echo 'auth sufficient pam_u2f.so authfile=/etc/u2f_mappings cue' > common-u2f
for f in gdm-password lightdm sudo login; do
mv $f $f~
awk '/@include common-auth/ {print "@include common-u2f"}; {print}' $f~ > $f
done
exit

Момент в том, что проверять ключ нужно ДО @include common-auth

При этом можно сделать нормальный 2FA, ожидая касания ключа ПОСЛЕ ввода пароля. Для этого строка чуть меняется (и ставится ПОСЛЕ @include common-auth):

auth required pam_u2f.so
Нужно понимать, что так без ключа войти не получится!

суббота, 24 апреля 2021 г.

postfix, dkim, debian

Установка

sudo apt install opendkim opendkim-tools

После установки конфиг лежит в /etc/opendkim.conf

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

mkdir -p /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

 Теперь нам нужно в /etc/postfix/main.cf указать, где искать dkim файлы

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts            refile:/etc/opendkim/TrustedHosts
KeyTable                 refile:/etc/opendkim/KeyTable
SigningTable             refile:/etc/opendkim/SigningTable

Также, там есть ещё ряд настроек

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

Mode                    sv

UserID                  opendkim:opendkim

Umask, Syslog уже есть в оригинальном конфиге, их можно не копировать.

Замечание на тему Socket: если нужно работать через tcp, формат такой: inet:12301@localhost, но по умолчанию открывается Unix socket в /var/run/opendkim/opendkim.sock (легко проверяется через netstat -plan | grep dkim). И если надо переопределить, то по ряду мануалов это делается в /etc/default/opendkim

Ключ генерируется так

sudo -u opendkim opendkim-genkey -s <some_name> -D /etc/opendkim/keys -d <yourdomain.com> -b 2048

!!! В некоторых мануалах перепутаны -b и -s. -b это СКОЛЬКО БИТ ключ, а -s это префикс для dns, так называемый селектор! Тот что <some_name>._domainkey, если планируется несколько мест для отправки - лучше использовать технический префикс сервера типа srv01, и избегать имён вида mail - может быть конфликт с рядом сервисов автогенерации, включая почту от яндекса - мне и такое довелось увидеть...

И второй момент -- после создания ключа файлы создаются только по селектору без учёта доменов, поэтому лучше в keys сразу создать папку с доменом и в -D поправить на keys/<yourdomain.com>. Ниже keyTable с учётом этой папки.

Теперь лучше записать публичную часть в dns

cat /etc/opendkim/keys/<yourdomain.com>/<some_name>.txt

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

В /etc/opendkim/KeyTable

 <some_name>._domainkey.<yourdomain.com> <yourdomain.com>:<some_name>:/etc/opendkim/keys/<yourdomain.com>/<some_name>.private

В /etc/opendkim/TrustedHosts пишем хосты, которые будут подписаны нашей подписью, обычно это только сама машина

127.0.0.1
localhost
# можно указать подсети, вида 192.168.0.0/24

В /etc/opendkim/SigningTable пишем, каким ключом что подписываем

*@<yourdomain.com> <some_name>._domainkey.<yourdomain.com>

 Не путаем KeyTable и TrustedHosts! В KeyTable - где искать ключи по домену и селектору, а TrustedHosts - каким ключом подписываем почту для каких адресов. Можно вообще сделать отдельные ключи для отдельных ящиков.

проверьте, что в /etc/postfix/main.cf

    # Milter configuration
    # Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
    milter_protocol = 6
    milter_default_action = accept
    smtpd_milters = unix:/var/spool/postfix/var/run/opendkim
    non_smtpd_milters = unix:/var/spool/postfix/var/run/opendkim

И перезапустите opendkim, postfix

 

Проверка

после настройки opendkim можно обнаружить в mail.log:

postfix/cleanup[13428]: warning: connect to Milter service unix:/var/run/opendkim/opendkim.sock: No such file or directory

Хотя и файл такой есть, и с правами всё хорошо. Но, слава chroot, работать так не будет.

Фикс:

  1. Then do the following

    sudo adduser postfix opendkim
  2. Postfix running in chroot

    Modify /etc/default/opendkim, change SOCKET option to postfix chroot location

    SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"

    You will have to create directory /var/spool/postfix/var/run/opendkim and change its permission

    sudo mkdir -p /var/spool/postfix/var/run/opendkim
    sudo chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
    
  3. Restart opendkim

    sudo service opendkim restart
    https://unix.stackexchange.com/questions/74477/postfix-smtpd-warning-connect-to-milter-service-unix-var-run-opendkim-opendki

 

Links

Относительно свежая дока, но читать аккуратно

https://www.linode.com/docs/guides/configure-spf-and-dkim-in-postfix-on-debian-9/

Вроде и официальная, но очень старая

https://wiki.debian.org/opendkim

пятница, 23 апреля 2021 г.

Выбор платформы для Kubernetes

 Если хочется поставить k8s, есть несколько путей, которые будут чуть ниже. При этом готовые продукты это не просто "красивый инсталлер", это ещё и дополнительное ПО - веб из коробки, мониторинг из коробки, RBAC, автомасштабирование, сбор логов -- это "базовый набор". При этом часто автоматом настраивается CI/CD, хранилища.

Rancher

По сути это веб-интерфейс с некоторыми плюшками типа мониторинга, автомасштабирования из коробки.

Сам rancher - изначально делался для расширения возможностей докера, чем потом стал заниматься docker swarm. rancher был "надстройкой" с выбором основы: Cattle, Docker Swarm, Apache Mesos (upstream project for DCOS) or Kubernetes, но похоже что в 2.х оставили только kubernetes.
Ветку советую глянуть.
Если я правильно понял доку, rancher даёт возможность собрать кластер, где часть нод - условный aws eks, часть - gcp, а часть вообще свои сервера.

На обычный хост ставится несложно, но требует установленный докер
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher

В облака ставится через terraform


kubeflow

В некотором смысле аналог ранчера, но больше с заточкой под ML.
Пара статей для более быстрого введения

OpenShift

Платный продукт от RedHat. Если хочется серьёзное решение, с серьёзной платной поддержкой - это сюда. То, что называется Enterprise Kubernetes. С нужными сертификатами и прочим. Дорого.

Kubernetes by Canonical

Да, есть и такое.

Облачные решения

Имеются в виду такие вещи как aws eks, mail.ru kubernetes (главная страница), yandex kubernetes и так далее, продуктов сотни. Развёртывание - на уровне "создать кластер скриптами", проблемы под капотом обычно неизвестны, но предсказать из невозможно, обезопаситься - сложно. Если нет кучи кубер спецов -- не самый дешёвый, но хороший вариант, снимающий много головной боли и убирающий потребность в сильной DevOps команде.

Руками

Имеется в виду kubeadm, kubespray и подобное. Надо понимать, что будет поставлена только "база", хранилища (ceph, glusterfs), обрабтку логов (ELK и аналоги), мониторинг (prometheus+grafana) надо ставить и сопровождать отдельно.

Готовые сравнения продуктов


Место для тренировок

Есть 4 часа, можно поднять несколько серверов и собрать в кластер.

Итого

Мало взять rancher или openshift. Кластер может просто сломаться, может не пройти миграция на новую версию и всё что угодно. Поэтому если цель - быстро развернуть демо-стенд или поднять дома тестовый кластер, то такие вещи как rancher удобны и адекватны. Но если планируется зарабатывать так деньги -- нужно или купить платную поддержку, или хорошо знать устройство того что стоит, уметь это мониторить, диагностировать и отлаживать. И для готовых образов вопросы мониторинга важнее чем установленной системы руками. Потому что всё когда-то ломается, нужно уметь видеть узкие места и прогнозировать - что, когда и где может пойти не так, как уменьшить шанс отказов и как чинить если отказ был. И по мере установки руками многие моменты становятся понятны, и если там что-то начало сбоить - понятно какие там компоненты применялись и примерно что могло сломаться.

И отдельный вопрос - как хранить данные.

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

Provisioning Grafana

 Перейдя сразу к сути:

https://grafana.com/docs/grafana/latest/administration/provisioning/

Пишутся .yaml файлы, которые нужно потом положить в папку provisioning и далее по типам, например datasources, plugins, dashboards, notifiers. Сами же файлики очень удобно при этом хранить в гите, получая полный контроль над тем, что и как показывается и кто, что, когда правил.

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

четверг, 22 апреля 2021 г.

yubikey+ubuntu

 Есть такой интересный аппаратный ключик YubiKey (2) (также есть редакции TypeC и мелкие nano). Так вот, для настройки ключа есть пакет yubikey-manager (в маке opensc+ykman). Но что делать, если такого нет, например в убунте 18.04?

среда, 14 апреля 2021 г.

Более быстрые варианты дисков

 Бывает, что нужно много IOPS, и/или очень много пропускной способности, и нам на помощь приходит NVME. Многие знают его по слоту m.2 на материнках, но также есть "внешние" варианты NF1 и более "привычный" формат U.2

Описание формата

https://habr.com/ru/company/kingston_technology/blog/369729/


Примеры:

U.2

https://www.supermicro.com/en/products/system/1U/1029/SYS-1029U-TN10RT.cfm

NF1

https://nvme.smb-solution.ru/supermicro-1029p-nmr36l-32x-nvme-nf1/

четверг, 18 марта 2021 г.

Немного о говнокодерах в убунте

 Есть обычная LTS убунта, никого не трогает, по apt install php ставится версия 7.4 (в 20.04). Но нам нужен пхп 5.6 ВТОРЫМ. Ок, ставим

sudo apt install software-properties-common

sudo add-apt-repository ppa:ondrej/php

Теперь по apt install php5.6 ставится 5.6, вроде всё хорошо... А нет.


# apt info php | grep Version

Version: 2:8.0+82+ubuntu20.04.1+deb.sury.org+1

# apt-cache policy php

php:

  Installed: 2:7.4+75

  Candidate: 2:8.0+82+ubuntu20.04.1+deb.sury.org+1

То есть теперь, если мы используем штатную версию 7.4, по условному apt install php-curl нам прилетит совершенно бесполезная версия 8.0. Что называется, ПРЕВЕД. При этом reconfigure не помогает

# dpkg-reconfigure php

#
# update-alternatives --config php 
это тоже чуть про другое, выбор версии из уже установленных.

Впрочем, это рукожопство лечится. Идём в /etc/apt/preferences.d/ и пишем файлик (какой? Синтаксис там совершенно мерзейший, типичный говнокод в действии - у того же центос прямо в .repo пишем что исключаем из данной репы и живём спокойно). Так что вариант - ppa поставили, нужное поставили, потом из /etc/apt/sources.list.d убрали/удалили.


среда, 17 марта 2021 г.

ubuntu, php, xhprof

"XHProf был разработан Facebook и заброшен , когда они переехали в HHVM. Теперь есть fork проекта под названием Tideways , который обещает добавить поддержку PHP версий 5.6 и 7."

Хотя если перейти на http://pecl.php.net/package/xhprof то версия 2.2.3 там от конца 2020 года...

Итого: можно ставить так

apt install php-pear

apt install php-dev # phpize

pecl install -f xhprof
Build process completed successfully
Installing '/usr/lib/php/20190902/xhprof.so'
install ok: channel://pecl.php.net/xhprof-2.2.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=xhprof.so" to php.ini
Вносим в /etc/php/7.4/mods-available/xhprof.ini

extension=xhprof.so
xhprof.output_dir="/tmp/xhprof"

и в /etc/php/7.4/cli/conf.d делаем ln -s /etc/php/7.4/mods-available/xhprof.ini 20-xhprof.ini

повторить для апача или fpm


или через tideways (веб версия - платно! Сам xhprof вроде нет, но там формат другой, нужно переписывать код)

https://tideways.com/profiler/xhprof-for-php7

https://github.com/tideways/php-xhprof-extension

https://github.com/tideways/php-xhprof-extension/releases

https://gist.github.com/snoek09/72d0563d350fcc9ea6117790eeb6e60f


GUI

https://github.com/perftools/xhgui

apt install mongodb

#pecl install mongodb

apt install php-mongodb

systemctl enable mongodb

grep bind /etc/mongodb.conf # обязательно проверяем что есть bind_ip и он не выставлен в 0.0.0.0 - это чревато! Должно быть 127.0.0.1

systemctl restart mongodb

echo 'extension=mongodb.so' > /etc/php/7.4/mods-available/mongodb.ini

и повторяем включения

apt install composer

composer install --no-dev

curl 127.0.0.1:8080/install.php


вторник, 16 марта 2021 г.

werf+Jenkins

Настраиваем Continuous Integration для Jenkins и Bitbucket с werf

werf

 Есть такая надстройка над helm - werf

Утилита не сложная, по набору документации быстро изучается (русский язык там есть, и проработан неплохо).

Но очень важный момент - на данный момент stable - версия 1.1, а дока пишется под пока ещё beta 1.2. И есть существенные отличия в синтаксисе, поэтому на 1.1 по доке 1.2 будут нюансы. Есть и по 1.1 (сверху переключатель), но там нет руководств по быстрой настройке таких вещей как nodejs (2), ruby, django...

А так, есть куча видео на ютубе и куча статей на хабре, зачем нужна эта утилита.

суббота, 13 марта 2021 г.

Быстрое введение в Clickhouse

 Есть такая бд от яндекса, и неплохое описание на хабре и офсайте.

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

Также нюанс, который редко описывают в доках. Там нет штатной бэкапилки, работа вида "скопировать и потом вернуть на место файлы бд".

Второй нюанс - внутри оно обмазано ZooKeeper-ом, так что его надо уметь ставить, обслуживать и чинить.

Ну и SQL вроде типовой, а вроде и не очень, есть нюансы.

И небольшая обучалка