Настройка рабочей среды
Настройка рабочей среды.
Содержание
1 Менеджер паролей pass
- Менеджер паролей
pass
— программа, сделанная в рамках идеологии Unix. - Также носит название стандартного менеджера паролей для Unix (The standard Unix password manager).
1.1 Основные свойства
- Данные хранятся в файловой системе в виде каталогов и файлов.
- Файлы шифруются с помощью GPG-ключа.
1.2 Структура базы паролей
- Структура базы может быть произвольной, если Вы собираетесь использовать её напрямую, без промежуточного программного обеспечения. Тогда семантику структуры базы данных Вы держите в своей голове.
- Если же необходимо использовать дополнительное программное обеспечение, необходимо семантику заложить в структуру базы паролей.
1.2.1 Семантическая структура базы паролей
- Рассмотрим пользователя
user
в доменеexample.com
, порт22
. - Отсутствие имени пользователя или порта в имени файла означает, что любое имя пользователя и порт будут совпадать:
1example.com.pgp
- Соответствующее имя пользователя может быть именем файла внутри каталога, имя которого совпадает с хостом. Это полезно, если в базе есть пароли для нескольких пользователей на одном хосте:
1example.com/user.pgp
- Имя пользователя также может быть записано в виде префикса, отделенного от хоста знаком
@
:1user@example.com.pgp
- Соответствующий порт может быть указан после хоста, отделённый двоеточием (
:
): - Эти все записи могут быть расположены в произвольных каталогах, задающих Вашу собственную иерархию.
1.3 Реализации
1.3.1 Утилиты командной строки
- На данный момент существует 2 основных реализации:
pass
— классическая реализация в виде shell-скриптов (https://www.passwordstore.org/);gopass
— реализация на go с дополнительными интегрированными функциями (https://www.gopass.pw/).
- Дальше в тексте будет использоваться программа
pass
, но всё то же самое можно сделать с помощью программыgopass
.
1.3.2 Графические интерфейсы
qtpass
qtpass
— может работать как графический интерфейс кpass
, так и как самостоятельная программа. В настройках можно переключаться между использованиемpass
иgnupg
.
gopass-ui
gopass-ui
— интерфейс кgopass
.
webpass
- Репозиторий: https://github.com/emersion/webpass
- Веб-интерфейс к pass.
- Написано на golang.
1.3.3 Приложения для Android
Password Store
- URL: https://play.google.com/store/apps/details?id=dev.msfjarvis.aps
- Репозиторий с кодом: https://github.com/android-password-store/Android-Password-Store
- Документация: https://android-password-store.github.io/docs/
- Для синхронизации с git необходимо импортировать ssh-ключи.
- Поддерживает разблокировку по биометрическим данным.
- Для работы требует наличия OpenKeychain: Easy PGP.
OpenKeychain: Easy PGP
- URL: https://play.google.com/store/apps/details?id=org.sufficientlysecure.keychain
- Операции с ключами pgp.
- Необходимо будет импортировать pgp-ключи.
- Не поддерживает разблокировку по биометрическим данным. Необходимо набирать пароль ключа.
1.3.4 Пакеты для Emacs
pass
- Основной режим для управления хранилищем и редактирования записей.
- Emacs. Пакет pass
- Репозиторий: https://github.com/NicolasPetton/pass
- Позволяет редактировать базу данных паролей.
- Запуск:
1M-x pass
helm-pass
- Интерфейс helm для pass.
- Репозиторий: https://github.com/emacs-helm/helm-pass
- Запуск:
1M-x helm-pass
- Выдаёт в минибуфере список записей из базы паролей. При нажатии
Enter
копирует пароль в буфер.
ivy-pass
- Интерфейс ivy для pass.
- Репозиторий: https://github.com/ecraven/ivy-pass
2 Управление файлами конфигурации
- Использование
chezmoi
для управления файлами конфигурации домашнего каталога пользователя.
2.1 Общая информация
- Сайт: https://www.chezmoi.io/
- Репозиторий: https://github.com/twpayne/chezmoi
2.2 Конфигурация chezmoi
2.2.1 Рабочие файлы
- Состояние файлов конфигурации сохраняется в каталоге
1~/.local/share/chezmoi
- Он является клоном вашего репозитория
dotfiles
. - Файл конфигурации
~/.config/chezmoi/chezmoi.toml
(можно использовать также JSON или YAML) специфичен для локальной машины. - Файлы, содержимое которых одинаково на всех ваших машинах, дословно копируются из исходного каталога.
- Файлы, которые варьируются от машины к машине, выполняются как шаблоны, обычно с использованием данных из файла конфигурации локальной машины для настройки конечного содержимого, специфичного для локальной машины.
- При запуске
1chezmoi apply
вычисляется желаемое содержимое и разрешения для каждого файла, а затем вносит необходимые изменения, чтобы ваши файлы соответствовали этому состоянию.
- По умолчанию chezmoi изменяет файлы только в рабочей копии.
2.2.2 Автоматически создавать файл конфигурации на новой машине
При выполнении
chezmoi init
также может автоматически создать файл конфигурации, если он еще не существует.Если ваш репозиторий содержит файл с именем
.chezmoi.$FORMAT.tmpl
, где$FORMAT
есть один из поддерживаемых форматов файла конфигурации (json
,toml
, илиyaml
), тоchezmoi init
выполнит этот шаблон для создания исходного файла конфигурации.Например, пусть
~/.local/share/chezmoi/.chezmoi.toml.tmpl
выглядит так:1{{- $email := promptStringOnce . "email" "Email address" -}} 2 3[data] 4 email = {{ $email | quote }}
- При выполнении
chezmoi init
будет создан конфигурационный файл~/.config/chezmoi/chezmoi.toml
. promptStringOnce
— это специальная функция, которая запрашивает у пользователя значение, если оно еще не установлено в разделеdata
конфигурационного файла.
- При выполнении
Чтобы протестировать этот шаблон, используйте
chezmoi execute-template
с флагами--init
и--promptString
, например:1chezmoi execute-template --init --promptString email=me@home.org < ~/.local/share/chezmoi/.chezmoi.toml.tmpl
2.2.3 Пересоздание файл конфигурации
- Если вы измените шаблон файла конфигурации,
chezmoi
предупредит вас, если ваш текущий файл конфигурации не был сгенерирован из этого шаблона. - Вы можете повторно сгенерировать файл конфигурации, запустив:
1chezmoi init
2.3 Шаблоны
2.3.1 Общая информация
- Шаблоны используются для изменения содержимого файла в зависимости от среды.
- Используется синтаксис шаблонов Go.
- Файл интерпретируется как шаблон, если выполняется одно из следующих условий:
- имя файла имеет суффикс
.tmpl
; - файл находится в каталоге
.chezmoitemplates
.
- имя файла имеет суффикс
2.3.2 Данные шаблона
- Полный список переменных шаблона:
1chezmoi data
- Источники переменных:
- файлы
.chezmoi
, например,.chezmoi.os
; - файлы конфигурации
.chezmoidata.$FORMAT
. Форматы (json
,jsonc
,toml
,yaml
) читаются в алфавитном порядке; - раздел
data
конфигурационного файла.
- файлы
2.3.3 Способы создания файла шаблона
- При первом добавлении файла передайте аргумент
--template
:1chezmoi add --template ~/.zshrc
- Если файл уже контролируется chezmoi, но не является шаблоном, можно сделать его шаблоном:
1chezmoi chattr +template ~/.zshrc
- Можно создать шаблон вручную в исходном каталоге, присвоив ему расширение
.tmpl
: - Шаблоны в каталоге
.chezmoitemplates
должны создаваться вручную:
2.3.4 Редактирование файла шаблона
- Используйте
chezmoi edit
:1chezmoi edit ~/.zshrc
- Чтобы сделанные вами изменения сразу же применялись после выхода из редактора, используйте опцию
--apply
:1chezmoi edit --apply ~/.zshrc
2.3.5 Тестирование шаблонов
- Тестирование с помощью команды
chezmoi execute-template
. - Тестирование небольших фрагментов шаблонов:
1chezmoi execute-template '{{ .chezmoi.hostname }}'
- Тестирование целых файлов:
2.3.6 Синтаксис шаблона
- Действия шаблона записываются внутри двойных фигурных скобок,
{{ }}
. - Действия могут быть переменными, конвейерами или операторами управления.
- Текст вне действий копируется буквально.
- Переменные записываются буквально:
1{{ .chezmoi.hostname }}
- Условные выражения могут быть записаны с использованием
if
,else if
,else
,end
:
1{{ if eq .chezmoi.os "darwin" }}
2# darwin
3{{ else if eq .chezmoi.os "linux" }}
4# linux
5{{ else }}
6# other operating system
7{{ end }}
Удаление пробелов
Отладка шаблона
Логические операции
- Возможно выполнение логических операций.
- Если имя хоста машины равно
work-laptop
, текст междуif
иend
будет включён в результат:
Логические функции
eq
: возвращаетtrue
, если первый аргумент равен любому из остальных аргументов, может принимать несколько аргументов;not
: возвращает логическое отрицание своего единственного аргумента;and
: возвращает логическое И своих аргументов, может принимать несколько аргументов;or
: возвращает логическое ИЛИ своих аргументов, может принимать несколько аргументов.
Целочисленные функции
len
: возвращает целочисленную длину своего аргумента;eq
: возвращает логическую истинуarg1 == arg2
;ne
: возвращает логическое значениеarg1 != arg2
;lt
: возвращает логическую истинуarg1 < arg2
;le
: возвращает логическую истинуarg1 <= arg2
;gt
: возвращает логическую истинуarg1 > arg2
;ge
: возвращает логическую истинуarg1 >= arg2
.
2.3.7 Переменные шаблона
- Чтобы просмотреть переменные, доступные в вашей системе, выполните:
1chezmoi data
- Чтобы получить доступ к переменной
chezmoi.kernel.osrelease
в шаблоне, используйте:1{{ .chezmoi.kernel.osrelease }}
3 Выполнение лабораторной работы
3.1 Менеджер паролей pass
3.1.1 Установка
3.1.2 Настройка
Ключи GPG
Инициализация хранилища
- Инициализируем хранилище:
1pass init <gpg-id or email>
- Инициализируем хранилище:
Синхронизация с git
- Создадим структуру git:
1pass git init
- Также можно задать адрес репозитория на хостинге (репозиторий необходимо предварительно создать):
1pass git remote add origin git@github.com:<git_username>/<git_repo>.git
- Для синхронизации выполняется следующая команда:
Прямые изменения
- Следует заметить, что отслеживаются только изменения, сделанные через сам
gopass
(илиpass
). - Если изменения сделаны непосредственно на файловой системе, необходимо вручную закоммитить и выложить изменения:
- Проверить статус синхронизации модно командой
1pass git status
- Следует заметить, что отслеживаются только изменения, сделанные через сам
- Создадим структуру git:
3.1.3 Настройка интерфейса с броузером
- Для взаимодействия с броузером используется интерфейс native messaging.
- Поэтому кроме плагина к броузеру устанавливается программа, обеспечивающая интерфейс native messaging.
Плагин browserpass
- Репозиторий: https://github.com/browserpass/browserpass-extension
- Плагин для брoузера
- Плагин для Firefox: https://addons.mozilla.org/en-US/firefox/addon/browserpass-ce/.
- Плагин для Chrome/Chromium: https://chrome.google.com/webstore/detail/browserpass-ce/naepdomgkenhinolocfifgehidddafch.
- Интерфейс для взаимодействия с броузером (native messaging)
- Репозиторий: https://github.com/browserpass/browserpass-native
- Gentoo:
1emerge www-plugins/browserpass
- Fedora
3.1.4 Сохранение пароля
Добавить новый пароль
Выполните:
1pass insert [OPTIONAL DIR]/[FILENAME]
OPTIONAL DIR
: необязательное имя каталога, определяющее файловую структуру для вашего хранилища паролей;FILENAME
: имя файла, который будет использоваться для хранения пароля.
Отобразите пароль для указанного имени файла:
1pass [OPTIONAL DIR]/[FILENAME]
Замените существующий пароль:
1pass generate --in-place FILENAME
3.2 Управление файлами конфигурации
3.3 Дополнительное программное обеспечение
- Установите дополнительное программное обеспечение:
- Установите шрифты:
3.3.1 Установка
- Установка бинарного файла. Скрипт определяет архитектуру процессора и операционную систему и скачивает необходимый файл:
- с помощью
wget
:1sh -c "$(wget -qO- chezmoi.io/get)"
- с помощью
3.3.2 Создание собственного репозитория с помощью утилит
- Будем использовать утилиты командной строки для работы с github (см. github: утилиты командной строки).
- Создадим свой репозиторий для конфигурационных файлов на основе шаблона:
1gh repo create dotfiles --template="yamadharma/dotfiles-template" --private
3.3.3 Подключение репозитория к своей системе
- Инициализируйте
chezmoi
с вашим репозиториемdotfiles
:1chezmoi init git@github.com:<username>/dotfiles.git
- Проверьте, какие изменения внесёт
chezmoi
в домашний каталог, запустив:1chezmoi diff
- Если вас устраивают изменения, внесённые
chezmoi
, запустите:1chezmoi apply -v
3.3.4 Использование chezmoi на нескольких машинах
- На второй машине инициализируйте
chezmoi
с вашим репозиториемdotfiles
:1chezmoi init https://github.com/<username>/dotfiles.git
- Или через ssh:
1chezmoi init git@github.com:<username>/dotfiles.git
- Проверьте, какие изменения внесёт
chezmoi
в домашний каталог, запустив:1chezmoi diff
- Если вас устраивают изменения, внесённые
chezmoi
, запустите:1chezmoi apply -v
- Если вас не устраивают изменения в файле, отредактируйте его с помощью:
1chezmoi edit file_name
- Также можно вызвать инструмент слияния, чтобы объединить изменения между текущим содержимым файла, файлом в вашей рабочей копии и измененным содержимым файла:
1chezmoi merge file_name
- При существующем каталоге
chezmoi
можно получить и применить последние изменения из вашего репозитория:1chezmoi update -v
3.3.5 Настройка новой машины с помощью одной команды
- Можно установить свои
dotfiles
на новый компьютер с помощью одной команды:1chezmoi init --apply https://github.com/<username>/dotfiles.git
- Через ssh:
1chezmoi init --apply git@github.com:<username>/dotfiles.git
3.3.6 Ежедневные операции c chezmoi
Извлеките последние изменения из репозитория и примените их
- Можно извлечь изменения из репозитория и применить их одной командой:
1chezmoi update
- Это запускается
git pull --autostash --rebase
в вашем исходном каталоге, а затемchezmoi apply
.
- Можно извлечь изменения из репозитория и применить их одной командой:
Извлеките последние изменения из своего репозитория и посмотрите, что изменится, фактически не применяя изменения
- Выполните:
1chezmoi git pull -- --autostash --rebase && chezmoi diff
- Это запускается
git pull --autostash --rebase
в вашем исходном каталоге, аchezmoi diff
затем показывает разницу между целевым состоянием, вычисленным из вашего исходного каталога, и фактическим состоянием. - Если вы довольны изменениями, вы можете применить их:
1chezmoi apply
- Выполните:
Автоматически фиксируйте и отправляйте изменения в репозиторий
- Можно автоматически фиксировать и отправлять изменения в исходный каталог в репозиторий.
- Эта функция отключена по умолчанию.
- Чтобы включить её, добавьте в файл конфигурации
~/.config/chezmoi/chezmoi.toml
следующее: - Всякий раз, когда в исходный каталог вносятся изменения,
chezmoi
фиксирует изменения с помощью автоматически сгенерированного сообщения фиксации и отправляет их в ваш репозиторий. - Будьте осторожны при использовании
autoPush
. Если ваш репозиторийdotfiles
является общедоступным, и вы случайно добавили секрет в виде обычного текста, этот секрет будет отправлен в ваш общедоступный репозиторий.