Windows 10 ssh key

Как-то задалбывает под WSL2 постоянно вводить пароль к ssh ключам. Рецепт для ubuntu простой:

sudo apt-get install keychain
cat >> .bash_profile
/usr/bin/keychain -q --nogui $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh

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

Get-Service -Name ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add ~\.ssh\id_ed25519
ssh-add ~\.ssh\id_rsa

Ускоряем повторные соединения в ssh

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

Добавляем следующие строки в .ssh/config

Host *
    ControlMaster auto
    ControlPath ~/.ssh/master-%r@%h:%p.socket
    ControlPersist 30m

Путь может быть любым, но рекомендую выбирать только доступный вам. %r , %h, %p – это пользователь, хост и порт соответственно.

Загоняем маки спать

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

Решение очень простое:

  1. Спрашиваем у мака, сколько раз и когда он просыпается: pmset -g log|grep due
  2. Увидев, что он просыпается практически каждую минуту, запрещаем ему поддерживать соединения: sudo pmset -b tcpkeepalive 0

Плюс: мак теперь переживает ночь, теряя 1-2% заряда батареи

Минус: теперь после открытия все соединения разорваны и надо с минуту, пока все вернется в привычное русло.

Android init undocumented

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

Казалось бы, ну в чем проблема? Там внутри линукс, он даже вроде задокументирован. Гуглим, находим https://android.googlesource.com/platform/system/core/+/master/init/README.md

Добавлям все необходимое … и не работает.

Пропускаю кучу мучений с офигенной (в больших кавычках) системой логирования и отладки.

Решение: rc-файлы должны иметь права 644 и никак иначе. Другие права? Не будем с ними работать! Секурсная сесурити, понимаешь. И пофиг, что если я получил доступ до /system, то уж такая-то мелочь меня не остановит “от кражи информации”

Возвращаем четкость маку

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

Если кратко, то в Apple победили менеджеры, которым надо “красиво”, а не “правильно”. В этом оплоте графики и накосячили! Хорошо, что вернуть назад все легко.

Settings-General-Снять галочку с Use font smoothing when available

и в Displays перещелкнуть радиокнопку Resolution на Scaled и выбрать пункт левее от Default. В общем, как на скриншотах выше.

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

Обновления. Боль и лечение.

“Обновление необходимо произвести в ночь с субботы на воскресение, в период минимальной нагрузки” – эта фраза знакома любому ИТшнику в любой стране. И точно так же им нелюбима. Что делать, что бы начать спать по ночам?

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

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

Что плохого?

  • Для начала, работа ночью не является самым желаемым временем работы у ИТ подразделения, что бы не говорили об этом мифы, предания и сказания. Мы такие же люди, мы точно так же любим спать.
  • Как ни странно, но повторюсь: ночью большинство людей спят. И если что-то пойдет не так, решение проблемы может застопориться до утра. Просто потому что дежурная смена не может сделать что-то этакое, что потребовалось. Как бы вы не стояли на голове, но часто в 4 утра нельзя сделать то, что после 9 утра делается за 10 минут. В результате время простоя растет, SLA нарушается, мотивация снижается.
  • И наконец, просто стоимость обновления. Ночные работы в воскресенье гораздо дороже тех же самых, но во вторник утром.

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

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

Во-первых, начать в конце-концов применять техники, позволяющие обновляться без остановки основного сервиса. Их много, они описаны очень хорошо и я не буду тут повторяться. Но начальные слова для гугления например CI/CD и canary deployment.

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

Мой опыт показывает, что переход от “ой, для обновления нам надо Н часов и работа М людей” до “новая версия появляется где надо через 10-15 минут и сама” необходимо примерно полгода. Это без надрывов и резких движений. И да, эти практики применимы к любым системам.

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

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

  • Никаких обновлений продакшн систем с обеда пятницы до утра понедельника
  • Большие релизы планируются на утро вторника
  • Большие релизы перед праздниками недопустимы

Откуда пошли эти правила? Конечно, из опыта.

Почему никаких релизов перед праздниками и выходными? Потому что в 99% случаев такие даты – это просто кто-то из менеджеров где-то на каком-то совещании сказал что-то типа “ну, 1го числа систему переводим на новые рельсы”. А другой менеджер не имеет достаточно смелости сказать “Нафига обновлять систему 1 го мая? Там длинные праздники”. 1 процент я оставил, потому что где-то наверное “круглые” и “ровные” даты оправданы. Но лично я ни разу не встречал такого.

Почему большие обновления лучше всего планировать на утро вторника?

  • Все вопросы и проблемы, которые были в выходные, обычно уже решены в понедельник, либо понятны их последствия. И если что, легко отменить обновление вообще.
  • Люди вошли в рабочий ритм и все известные мне организации считают вторник рабочим днем.
  • Если что-то пойдет не так, у нас есть куча рабочих дней с очень малой вероятностью прерывания по личным делам.
  • И наконец, “опоздуны” и “потеряшки” могут протратить свои выходные из-за своей лени.

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

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

Но если выдержать первоначальный наплыв, то буквально через 3-4 недели все заметят сильные позитивные изменения. Предидущие три компании показали: резко снижается напряженность в коллективе и число подъемов ночью на починку сломанного. Остальное думаю у всех свое будет.

И самое приятное: вас потом поблагодарят за возвращенные выходные и спокойный сон ночью.

PS Photo by Andrew Neel on Unsplash

CentOS 7 и MariaDB 10

Внезапно потребовалось обновить на старой центоси mariadb до свежих версий. Оказалось довольно просто:

Удаляем старое, добавляет новое, обновляем.

# cat > /etc/yum.repos.d/MariaDB10.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
# systemctl stop mariadb
# yum remove mariadb-server mariadb mariadb-libs
# yum clean all
# yum -y install MariaDB-server MariaDB-client
# systemctl enable mysql
# systemctl start mysql
# mysql_upgrade -p
......
cj64070_base.b_xml_tree                            OK
information_schema
performance_schema
Phase 7/7: Running 'FLUSH PRIVILEGES'
OK

И всё.

PS 10.4 почему-то встает криво, лень разбираться

FreeIPA и Ubuntu 18.04

Попробовал эту связку. Кратко: Ubuntu использовать можно только как клиент. Как сервер – огребете дикую тучу проблем. Просто из-за того, что никто так не делает. А репликация вообще не работает, потому что сломана в потрохах системы.

Но на всякий случай, если очень охота поднять сервер и клиента на убунту

И на сервере и на клиенте

apt-get install rng-tools

cat >> /etc/default/rng-tools
HRNGDEVICE=/dev/urandom

systemctl enable rng-tools
systemctl start rng-tools

на сервере

chmod o+r /var/lib/krb5kdc
chmod o+x /var/lib/krb5kdc
touch /etc/krb5kdc/kadm5.acl

apt install libjs-scriptaculous

cd /usr/share/fonts/truetype
ln -s font-awesome /usr/share/fonts/truetype/fontawesome

и убрать из

# cat /etc/apache2/conf-enabled/ipa.conf|grep DEF
AddOutputFilterByType DEFLATE text/html text/plain text/xml 

Повторюсь, репликацию я так и не смог настроить. Где-то в районе wsgi-dbus они друг друга не любят

Пароли – наше все!

Давным давно, аж 5 лет назад, я уже задавался темой хранения паролей. Тогда я выбрал платный 1Password и до недавнего времени был полностью доволен.

За 5 лет изменилось довольно многое и к примеру тот 1Password уже не купить: нынче всё по подписке, за каждый чих требуют денег. Да и требования к хранению паролей лично у меня изменились. Немного, но значительно.

Во-первых, я больше не хочу верить. Все маркетинговые слова про “улучшенную защиту”, “aes-256”, “PBKDF2” и “SHA256” остаются словами до тех пор, пока не будет доказательств. Нет, в реальности это может быть и так, но проверить нечем.

Во-вторых, я не хочу больше отдавать контроль над моими паролями кому-то еще. Со старой версией 1Password все хорошо: она позволяет хранить пароли в iCloud, Dropbox или любом каталоге по выбору. Нынешняя, как и остальные, предлагают хранить пароли непонятно где и не понятно как защищенными. Специально сейчас прошелся по сайтам 1Password, Dashline, Lastpass, Roboform и прочим, все тот же набор маркетингового буллшита и никаких доказательств. А возможность доступа к паролям из браузера вообще считают за достоинство …

И наконец, я хочу халявы. Не то, что бы денег жалко, но садиться на иглу “платите нам $10 в месяц” не охота

По своей старой привычке “а оно надо?” я посмотрел профиль использования своих данных. Чаще всего мне надо использовать различные ключи к облачным сервисам. Вот эти вот все GCP_PROJECT, AWS_ACCESS_KEY_ID, pem файлы для ssh и так далее. А вот пароли как пароли у меня используются довольно редко. Ну раз, ну два в день. Лицензии и прочие подобные ключи я вообще использую раз в месяц, когда переустанавливаю все в рамках DRP.

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

Довольно специфичные условия, не так ли? Но нет предела совершенству!

Первым делом я пошел смотреть на KeePass. За прошедшие 5 лет он никуда не делся, все такой же монстр с кучей свистелок и перделок. И все так же хочет кучу всего, потому что и может практически все. Можно, не если честно, не вставляет.

Затем поиск вывел меня на довольно новый менеджер паролей Bitwarden. В нем все, как я люблю: у него открытый код и абсолютно прозрачная модель монетизации. За $10 в год можно получить абсолютно все, что необходимо от менеджера паролей в настоящее время. Более того, можно поставить свой собственный сервер и все клиенты будут синхронизироваться с ним, а не с сервером компании.

Попутно обнаружилась совершенно шикарная вещь: у битвардена есть консольный клиент. Выглядит это так (пароли все равно поменял)

[kiltum@mbook ~]$ bw unlock
? Master password: [hidden]
Your vault is now unlocked!

To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
$ export BW_SESSION="WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB=="
> $env:BW_SESSION="WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB=="

You can also pass the session key to any command with the `--session` option. ex:
$ bw list items --session WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB==

[kiltum@mbook ~]$ bw list items --session WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB==
[{"object":"item","id":"de683640-15ca-4dc0-98ec-a95400951086","organizationId":null,"folderId":null,"type":1,"name":"kiltum.livejournal.com","notes":null,"favorite":false,"login":{"uris":[{"match":null,"uri":"https://kiltum.livejournal.com/"}],"username":"kiltum","password":"passwordwasdeleted","totp":null,"passwordRevisionDate":null},"revisionDate":"2018-09-07T09:02:43.6466667Z"},{"object":"item","id":"161cff1e-eeaf-4091-8c0f-a954009ee2ab","organizationId":null,"folderId":null,"type":1,"name":"www.facebook.com","notes":null,"favorite":false,"login":{"uris":[{"match":null,"uri":"https://www.facebook.com/"}],"username":"multik@multik.org","password":"herewaspassword","totp":null,"passwordRevisionDate":null},"revisionDate":"2018-09-07T09:38:29.0466667Z"}]

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

Но после небольшой дискуссии в #unix.ru мне было предложено посмотреть на Pass. Поначалу я попробовал и весь расплевался. Этот менеджер паролей … ну в общем, он совершенно перпендикулярен всем остальным. В нем все не так и не туда. И вообще он какой-то кривой. Да, кривой и точка!

Но так как больше других менеджеров не находилось, решил оставить и попользоваться всеми тремя менеджерами (1password, bitwarden и pass) одновременно. Создавать новые пароли, ключи и токены, перемещаться между машинами и вообще пытаться вести обычную жизнь DevOps/SRE/SysAdmin/CTO/чебурашки.

Практически сразу выяснилось, что pass это просто развесистый bash скрипт, который в своей работе использует gpg и git. В теории это означает, что pass будет работать на всех платформах где есть эти программы. В реальности я его попробовал только под OS X и Linux

Что в итоге я получил?

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

$ gpg aws_prod.gpg 
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: encrypted with 4096-bit RSA key, ID B2698444DC05C50F, created 2017-09-11
      "Viacheslav Kaloshin "

Во-вторых, использование git на своем сервере снимает все вопросы про “кто еще получает доступ до моих данных”. Как и полную историю всех изменений с самого начала. Никаких “30 последних изменений”. Хранится всё.

$ git log|head -5
commit 8ab2f5fae8bf9a8b48dc97df908343c25a1745c1
Author: Viacheslav Kaloshin 
Date:   Mon Sep 24 15:41:37 2018 +0300

    Rename cs/ed_aws_qa to cs/ed/aws_qa.

И наконец, эта опенсорс, халява и возможность поправить и сделать по-своему.

Описывать, как устанавливать pass смысла нет: это и так прекрасно расписано на официальном сайте. Более того, на новых машинах можно просто склонировать репозиторий в ~/.password-store и на этом вся установка будет завершена.

И наконец, то, что мне больше всего понравилось.

Безопасное переключение между окружениями. В данном случае AWS, но этот же механизм работает с GCE, Azure и любым другим софтом, хранящим ключи в переменных окружения.

$ pass show cs/ed/aws_qa
AWS_ACCESS_KEY_ID=BKIAIELZCTWSJ7FECP4Z
...
$ pass show cs/ed/aws_prod 
AWS_ACCESS_KEY_ID=BKIAIN56RKIABTBHJXTW
...
$ export  `pass show cs/ed/aws_qa`
$ set|grep AWS_ACC
AWS_ACCESS_KEY_ID=BKIAIELZCTWSJ7FECP4Z
$ export  `pass show cs/ed/aws_qa`
$ set|grep AWS_ACC
AWS_ACCESS_KEY_ID=BKIAIN56RKIABTBHJXTW

Замена конструкции ssh -i key.pem user@hostname

$ pass show cs/qapem
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAw4AMstljzZRxvqNIO/ZsXnkCMm8O+FXuuTGqzII2ysH5fz8Q3pLZmKVXfz+7
....
eNK7UAHXBLGciXfFjlYlvZaLci93wtY4reWCgmsCmNx98WBMZUmF0R1VCjU/DYleIpMtNBY=
-----END RSA PRIVATE KEY-----
$ pass show cs/qapem| ssh-add -
Identity added: (stdin) ((stdin))
$ ssh user@hostname

В чем главный плюс? На машине ничего не остается в открытом виде. И стоит закрыть сессию, как все доступы магическим образом исчезнут. Никаких больше “оберегайте свой .aws от чужих глаз и прочее”.

В чем главный минус? На каждое изменение надо звать pass git push и не забывать при переходе на другую машину делать pass git pull. Но для любого современного разработчика это совершенно привычные действия, поэтому и минус-то не большой.

gpg sign пароль не в консоли

Достаточно долгое время все мои коммиты во все репозитории подписываются моим PGP ключем. Но все время доставало то, что при коммите из всяких “гламурных” программ типа PyCharm gpg отказывался подписывать коммит, заставляя открывать консоль и вводить gpg commit там. Сегодня мне это надоело и я нашел вот такое вот простое решение:

brew install pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

Если вы под линуксом, то замените brew на yum/apt/чтоеще

Ученье свет, а неученых тьма

Внезапно и совершенно неожиданно для себя обнаружил, что на udemy курсы значительно внятней и понятней, чем на coursera. Мой любимый тест “на кубернетес”, который coursera вместе с Хайтауэром провалила тотально и полностью (там большая часть курса – тотальный бред. С тех пор я уверен, что в Kubernetes Up & Running Хайтауэр только ради политкорректности), тут не вызвал никаких проблем.

В общем, я на udemy набрал курсов, теперь во всю обучаюсь.

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

Postgres PITR to one file

У штуки под названием postgres есть очень хороший способ бекапа. Называется он PITR. Стандартный процесс бэкапа выглядит так:

touch /var/lib/pgsql/backup_in_progress
psql -c "select pg_start_backup('hot_backup');"
tar -cf /var/lib/pgsql/backup.tar /var/lib/pgsql/data/
psql -c "select pg_stop_backup();"
rm /var/lib/pgsql/backup_in_progress
tar -rf /var/lib/pgsql/backup.tar /var/lib/pgsql/archive/

В чем засада? Засада в tar. В данном случае он тупо копирует весь каталог postgres со всеми потрохами. А это дает дикую нагрузку на диск, что в реальной жизни огорчает postgres до изумления. Конечно если есть возможность, то лучше создавать такой tar где-нибудь на другом диске или даже сервере, а если нет? И нет возможности поднять где-нибудь slave сервер и делать бекапы с него?

Первым предположением будет добавить ключик z или j – пусть сразу пакует. И тут сразу же возникает проблема: нельзя добавить файликов в уже запакованный tar. Надо распаковывать, добавлять и снова запаковывать. Какие есть пути решения?

1. Так и таскать два .tar.gz файла. Одиним меньше, другим больше …
2. Забить и переложить проблему на админов сторов. Пусть дают больше места и скорости.
3. Сделать скрипт, который где-то там, далеко, будет перепаковывать файлы. Заодно и целостность бекапа проверит.

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

mkfifo backup_fifo
sleep 98765 > backup_fifo
stdbuf -i0 -o0 -e0 cat backup_fifo | cpio -o -H tar | pigz -q > /path/to/backup.gz
psql -c "select pg_start_backup('hot_backup');"
stdbuf -i0 -o0 -e0 find postgres/data -type f > backup_fifo
psql -c "select pg_stop_backup();"
stdbuf -i0 -o0 -e0 find postgres/archive -type f > backup_fifo
kill sleep

Расскажу последовательно:

mkfifo backup_fifo. Создаем fifo фаил. Он будет у нас очередью для имен файлов, подлежащих архивированию.

sleep 98765 > backup_fifo. Открываем fifo и держим его открытым. Думаю, что 68 суток должно хватить для любого бекапа.

cat backup_fifo | cpio -o -H tar | pigz -q Запускаем процесс “таренья” всего, чьи имена прилетят в fifo. Так как tar не умеет читать имена файлов с stdin, использовал cpio в режиме tar. Ну и pigz – это параллельный gzip.

А дальше полностью повторяем стандартный процесс бекапа postgres, без каких-либо отступлений от генеральной линии. В конце прибиваем sleep и fifo закрывается, закрывая за собой все остальное.

В чем тонкости?

1. Использование sleep в качестве держалки для fifo. Я больше не смог вспомнить ни одной утилиты, которые ничего никуда не пишут, но открывают stdout & stdin.
2. Использование stdbuf. Если её не использовать, то из-за буферизации будет невозможно понять, какой и когда закончился этап. В результате легко получается, что tar забирает не то, что нужно.

Для предотвращения гонок в пункте 2 я пробовал вставлять в бекап файлы-маркеры и потом отслеживать время доступа к ним, но решение получилось … не элегантным и потребовало третий поток для исполнения.

Понятно, что в реальном скрипте все обвешано проверками и прочими тонкостями, но суть я скопипастил точно.

ЗЫ Картинку честно стащил из интернета.

Установка High Sierra Beta с нуля

1. Надо иметь Developer Account
2. Надо иметь флешку ( я обозвал HighSierra ) - с флешки все удалится!
3. Открыть macappstores://itunes.apple.com/app/id1209167288
4. Скачать - должно получиться 5+ гигов
5. В терминале
sudo /Applications/Install\ macOS\ High\ Sierra\ Beta.app/Contents/Resources/createinstallmedia --volume /Volumes/HighSierra --applicationpath /Applications/Install\ macOS\ High\ Sierra\ Beta.app/ --nointeraction &&say Boot drive created
6. Дождаться Boot drive created и загрузиться с флешки. Дальше как обычно

Новый сервер на CentOS 7

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

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

Первое, что необходимо сделать – отрубить 99,9% автоподбиральщиков паролей.

# cat /etc/sysconfig/iptables|grep 22
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT

Затем ставим sslh – мультиплексор протоколов. Его задача – дать доступ до основных сервисов через 443 порт.

# cat /etc/sslh.cfg
# This is a basic configuration file that should provide
# sensible values for "standard" setup.

verbose: false;
foreground: true;
inetd: false;
numeric: false;
transparent: false;
timeout: 2;
user: "sslh";
# Change hostname with your external address name.
listen:
(
{ host: "edge"; port: "443"; }
);
protocols:
(
{ name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; },
{ name: "openvpn"; host: "localhost"; port: "1194"; },
# { name: "xmpp"; host: "localhost"; port: "5222"; },
{ name: "http"; host: "localhost"; port: "80"; },
{ name: "ssl"; host: "localhost"; port: "443"; log_level: 0; },
{ name: "anyprot"; host: "localhost"; port: "443"; }
);

Как видите, конфигурация 100% стандартная, за исключением того, что мне не нужен xmpp. после обкатки можно будет и закрыть “обычный” ssh порт совсем. Минусом станет то, что в логах и утилитах пользователи станут заходить через localhost. Реальные адреса будут видны только через journald

… и все. В остальном инсталляция CentOS 7 не требует дальнейших движений напильником.

Криптовалюты – чего куда зачем?

Биткоин, эфир … “крипта” и какая-то “ико”. В нашей окружающей жизни стали появляться странные слова, связанные с криптовалютой. Набрав в любом поисковике bitcoin, вы 100% попадете на какой-нибудь сайт, рассказывающий о преимуществах этого средства и рисующий офигительные графики роста или падения курса. Попытка разобраться обычно приводит к заумным статьям про майнинг, хеши и прочие термины, которые ни разу не понятны …

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

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

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

А теперь представьте себе, что у вас есть какая-нибудь картинка. Скажем, сфотографированный лично вами закат. Картинка получилась настолько красивой, что её пожелал купить кто-то в интернете. Но просто переслать почтой картинку мало. Ведь только ваша совесть остановит вас от того, что бы сделать еще одну продажу. Что делать?

Умные люди придумали, как перенести механизм с нотариусами в интернет.

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

Следующий шаг был очень прост: вместо файлов использовать цифры. Которыми обозначили число хранящихся монет. Так как для расчета “подписей” используются криптоалгоритмы, то вполне логично получилось название “криптовалюта”. Так как везде используются компьютеры, то получилась адская смесь терминов, которая вводит в заблуждение обычный людей (и некоторых не обычных). Давайте я расскажу еще раз пошагово, но уже с использованием терминов, а вы сами поймаете аналогии.

1. Нам нужен “кошелек”. Кошелек – это ваш уникальный адрес в сети. Именно уникальный, второго такого в сети нет. Уникальность обеспечивается сложными, на “тыщу мульонов” раз проверенными алгоритмами.
2. Вы ставите программу, которая генерирует кошелек, соединяется с серверами которые поддерживают работу валюты и делает кучу другой работы необходимой для функционирования.
3. Затем вы кому-то даете адрес своего кошелька и просите перевести денег на него.
4. Этот кто-то отправляет в сеть команду “перевести с кошелька А на кошелек Б столько-то денег”.
5. Сеть раздает задания “подпишите, что у кошелька А снялось столько-то денег, а у Б столько-то зачислилось. плата за подпись – столько-то”. Тут в дело вступают “майнеры”. Напрягая свои видеокарты, FPGA и ASICи, они с помощью сложных алгоритмов ищут те самые “хеши”, которые подпишут эту транзакцию.
6. Как только “хеши” найдены, операция завершается.

Просто? Да, просто. Но эта простота таит несколько серьезных отличий от привычных вам денег.

1. Открытость. Любой в сети может посмотреть состояние вашего кошелька. Сколько и от кого пришло и сколько и куда ушло.
2. Анонимность. Нет никакого способа связать какой-либо кошелек с кем-нибудь, пока не будет осуществляться ввод/вывод денег в “реальный мир”.
3. Невозможность “отката” транзакций. Если деньги “ушли”, то все. Нет никаких механизмов для исправления ситуации.
4. Возможность создания неограниченного числа кошельков. И восстановление кошельков из “ничего”

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

Вас это не пугает и вы решили попробовать? Ниже один из вариантов для bitcoin.

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

Так как я рассказываю про биткоин, то самым логичным будет набрать в поисковике “bitcoin wallet” и попасть на официальную страницу. Выбираете тот, который вам больше понравится. Можно одновременно использовать хоть 10 клиентов для одного кошелька – нет никаких препятствий для этого.

Процедура создания кошелька везде одинакова. Программа чего-то там поделает и попросит вас распечатать и сохранить 12 слов на английском (или “посев”-“seed”). Это самые важные слова. Любой, кто имеет их, будет способен получить полный и абсолютный доступ к вашему кошельку. Ну а потом программа покажет вам длинную строчку из кракозябр (типа такой 1Ag6nJXyRKEjnpzsE9D2wjQXCtt65JU5xF), которая и будет вашим “кошельком”.

ВНИМАНИЕ! Первое, что вы должны сделать – это попробовать восстановить кошелек в другой программе. Криптовалюты дело новое, поэтому вполне вероятна ошибка. Вот пример.

Seed из electrum не подходил никуда, кроме самого electrum. На картинке Exodus, но я попробовал и другие. Пришлось пересоздавать уже в другой программе, а на электруме поставить крест.

2. Положить в кошелек денег. Как ни странно, это самая сложная часть. Откуда взять криптовалюту?

Вариантов несколько:
– “Намайнить”. Поставить на компьютер специальные программы, настроить их и потратив кучку электроэнергии, получить искомое. Это отдельная тема и я её не буду освещать тут.
– Заработать/попросить. Тут как в реальном мире. Кто-то, кто имеет криптовалюту, по каким-то причинам переводит вам. На сколько договоритесь, столько и получите.
– Ввести из реального мира через нал или кеш. Это самый сложный и одновременно простой путь, поэтому я опишу его.

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

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

Так же приготовьте скан какого-либо счета. Счет должен быть свежим, с вашей фамилией и адресом. На счете должна быть печать. Или штрихкод.

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

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

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

Реально рынок. Одни частники. Хочешь покупай, хочешь продавай. Налом, с карты на карту, перечислением – как угодно. Всей защиты – репутация продавца и дикие проценты. Повторюсь, больше защиты никакой нет. Поэтому купили (адрес кошелька дадут) – перевод на свой кошелек. Будучи после обеда в хорошем настроении, решил шикануть.

Вот так это выглядит со стороны биржи.

А вот так – со стороны клиента.

Деньги приходят практически мгновенно, но где-то с час они недоступны (смотри на надписи в клиенте). Именно в этот момент “майнеры” по всему миру греют воздух своими дивайсами.

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

Повторю правила.

Открытость. Любой может посмотреть состояние кошелька. Любой вводит номер моего кошелька и видит все. Для просмотра баланса и транзакций надо только адрес-имя кошелька.

Анонимность и невозможность отката.

Вот мне очень хороший человек прислал 0.001 эфира. И 12 других человек подтвердили это. Если они сами не скажут, что эти кошельки принадлежат им – у меня нет возможности узнать, кто они.

Неограниченное число кошельков. Тут предоставляю право проверить вам самим.

Вот так все просто.
ЗЫ 1Ag6nJXyRKEjnpzsE9D2wjQXCtt65JU5xF и 0x4f565Cc6D0ea31Fb88e095A6e8Db9233f3234379 – мои кошельки. Можете переводить сколько угодно денег, я не буду против 🙂

Запрет macOS менять имя машины

Довольно часто я со своим макбуком попадаю в чужие сети. И некоторые (не будем показывать пальцем) в DHCP ответе отдают новое имя машины. А macOS как и положено, меняет свое имя на указанное. Мелочь, но напрягает когда в терминале видишь непривычное имя.

Решение простое: сделать скрипт/выполнить следующие команды. Вместо mbook поставьте свое

NAME="mbook"
sudo scutil --set HostName ${NAME}
sudo scutil --set LocalHostName ${NAME}
sudo scutil --set ComputerName "${NAME}"

Решение простое: DHCP может переписать HostName, но приоритет у LocalHostName и остального выше.