Алгоритм или бестпрактис для синхронизации .dotfiles?
Исходные данные. Работаю поочередно за тремя компами (дома комп и ноут + на работе комп).
Синхронизирую конфиг систем и дотфайлы домашнего каталога через ансибл и его модуль rsync. Таким образом, везде всё одинаковое.
Но есть большой недостаток - в алиасах баша открытым текстом пароли виндовых хостов и их пользователей. Этих алиасов очень много.
В принципе все алиасы freerdp вынесены в отдельный файл .freerdp_aliases, который инклудится из .bashrc.
По понятным причинам компрометация этого файла - последнее чего бы хотелось.
Предполагаю, что можно сделать его зашифрованным через openssl и именно его синхронизировать или даже версионировать через git (или оставить текущую схему с ансибл). При входе в систему расшифровывать его, кладя в RAM и подключать через "source .bashrc". Работать. После окончания рабочего дня расшифрованный файл надо удалить (ну или изначально при начале работы класть его в RAM).
Но в этот файл регулярно вносятся изменения, бывает раз в день, а бывает лишь один раз в месяц.
Значит после внесения изменений в него, его надо зашифровать. и затереть этим новым шифрованным файлом старый зашифрованный файл. И это желательно делать автоматически, как только внесены изменения в расшифрованный файл, чтобы исключить фактор "забыл руками это сделать", отключение электричества etc. Тут еще паралельный вопрос: А если я не запушил в git эти изменения, и потом еще отредактировал файл на одном или двух своих других хостах, там зашифрованный файл будет оличаться, то гит разрулит зашифрованные файлы как-то?
Какой алгоритм и инструменты посоветуете?
Дополнительно:
Лучше вынести секреты в отдельный файл, а его шифровать или gnupg, или ansible-vault. Приватный ключ для gnupg в любом случае не надо класть в git, а доставлять отдельным механизмом.
Для управления шифрованными файлами в целом можно использовать pass https://wiki.archlinux.org/title/Pass, который комбинирует gnupg и git для хранения шифрованных файлов с неплохим cli-интерфейсом.
Ну а вообще я бы посмотрел на готовые dotfiles-менеджеры типа yadm.
Кстати, я не gnupg хотел, а openssl-ом шифровать так:
openssl enc -aes-256-cbc -pbkdf2 -iter 1234569 -salt -in .xfree_aliases -out .xfree_aliases_encrypted |
openssl enc -aes-256-cbc -pbkdf2 -iter 1234569 -salt -in .xfree_aliases -out .xfree_aliases_encrypted
Насколько безопасно такой файл (.xfree_aliases_encrypted )закидывать в git?
Ключи для RSA, например, делают как минимум 1024 бита, а тут всего 20 бит.
Бест практиса не существует.
Есть очень дохрена разных инструментов, вплоть до специального модуля для ансибла.
Ну и я бы ещё на всякий случай, через гит всё это протаскивал, чтобы каждой машине не нужно было знать о других машинах.
https://project-awesome.org/webpro/awesome-dotfiles
Предполагаю, что можно сделать его зашифрованным через openssl и именно его синхронизировать или даже версионировать через git (или оставить текущую схему с ансибл). При входе в систему расшифровывать его, кладя в RAM и подключать через "source .bashrc". Работать. После окончания рабочего дня расшифрованный файл надо удалить (ну или изначально при начале работы класть его в RAM).
Но в этот файл регулярно вносятся изменения, бывает раз в день, а бывает лишь один раз в месяц.
Не самый плохой вариант шифровать через openssl.
Только зачем расшифровывать файл? Расшифровывайте прямо в память во время использования
то есть в .bashrc можно например так
dbuser=database_user dbpass="$(openssl enc -d -base64 -aes-128-ctr -nopad -k secret_key.txt<<<"l1k2j3kl14jjkl321h4lk124123;ljk2`13jlkj")" |
dbuser=database_user dbpass="$(openssl enc -d -base64 -aes-128-ctr -nopad -k secret_key.txt<<<"l1k2j3kl14jjkl321h4lk124123;ljk2`13jlkj")"
Синтаксис из головы написал, надо уточнить как указать путь к файлу с мастер секретом.
При этом файл остается зашифрованным, но в текущей сесии переменная уже с открытым паролем.
Либо можно сделать несколько файлов подобного типа и инклюдать их в скрипты прямо перед использованием.
Ответы:
если уже используешь rsync, то посоветую подняться чутка и выше и перейти на демона syncthing.
связь между клиентами качественно шифрована. никаких левых облаков и серверов - все данные только на своих компутерах. передача изменений в онлайн
есть возможность на некоторых клиентах хранить шифрованную копию раздачи без возможности доступа к файлам.
есть несколько вариантов по сохранению измененных файлов (простая корзина и сложнее)
- Суть ещё в том, чтобы исключить компрометацию при наличии физического доступа к компу. А шифровать разделы, не хочу, так как там вовлекаются аспекты быстродействия диска и trim (я просто не в курсе, как с этим сейчас).
- Tech, при наличии физического досутпа к компу я сниму и файл с зашифрованными паролями и скрипт расшифровки этих паролей и все пароли получу :)
простые костыли тут не прокатывают. - pfg21, даже если файл зашифрован паролем?
- Tech, о чем и говорю.
некий файл зашифрован паролем.
рядом лежит скрипт, который расшифровывает это файл для использования, в скрипте лежит открытым текстом пароль к зашифрованному файлу.
тупой костыль, "типа" шифрующий файл от преступника :) - pfg21, нет. Пароль для расшифровки файла я планирую вводить каждый раз, когда стартует система. Хранить этот пароль открытым текстом я и не собирался. Иначе смысл всего этого вопроса в посте теряется.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Существует несколько способов синхронизации файлов конфигурации (так называемых .dotfiles) между различными компьютерами. Один из наиболее распространенных способов - использование системы контроля версий, такой как Git.
Для начала, создайте репозиторий Git, в котором будут храниться ваши .dotfiles. Для этого выполните следующие шаги:
1. Создайте новый репозиторий на сервисе Git (например, GitHub, GitLab или Bitbucket).
2. Склонируйте репозиторий на свой компьютер с помощью команды `git clone `.
3. Переместите все свои .dotfiles в папку репозитория.
4. Добавьте файлы в индекс Git с помощью команды `git add .`.
5. Зафиксируйте изменения с комментарием с помощью команды `git commit -m "Добавлены .dotfiles"`.
6. Отправьте изменения на удаленный репозиторий с помощью команды `git push`.
Теперь ваши .dotfiles хранятся в репозитории Git. Чтобы синхронизировать их на другом компьютере, выполните следующие шаги:
1. Склонируйте репозиторий на другой компьютер с помощью команды `git clone `.
2. Создайте символические ссылки на .dotfiles с помощью команды `ln -s `.
3. Теперь ваши .dotfiles будут синхронизированы между двумя компьютерами.
Таким образом, использование Git для синхронизации .dotfiles между различными компьютерами является удобным и эффективным способом управления конфигурационными файлами.