Настройка рабочей среды

Настройка рабочей среды.

Содержание

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
    
  • Соответствующий порт может быть указан после хоста, отделённый двоеточием (:):
    1example.com:22.pgp
    2example.com:22/user.pgp
    3user@example.com:22.pgp
    
  • Эти все записи могут быть расположены в произвольных каталогах, задающих Вашу собственную иерархию.

1.3 Реализации

1.3.1 Утилиты командной строки

  • На данный момент существует 2 основных реализации:
    • pass — классическая реализация в виде shell-скриптов (https://www.passwordstore.org/);
    • gopass — реализация на go с дополнительными интегрированными функциями (https://www.gopass.pw/).
  • Дальше в тексте будет использоваться программа pass, но всё то же самое можно сделать с помощью программы gopass.

1.3.2 Графические интерфейсы

  1. qtpass

    • qtpass — может работать как графический интерфейс к pass, так и как самостоятельная программа. В настройках можно переключаться между использованием pass и gnupg.
  1. gopass-ui

    • gopass-ui — интерфейс к gopass.
  1. webpass

1.3.3 Приложения для Android

  1. Password Store

  1. OpenKeychain: Easy PGP

1.3.4 Пакеты для Emacs

  1. pass

    • Основной режим для управления хранилищем и редактирования записей.
    • Emacs. Пакет pass
    • Репозиторий: https://github.com/NicolasPetton/pass
    • Позволяет редактировать базу данных паролей.
    • Запуск:
      1M-x pass
      
  1. helm-pass

    • Интерфейс helm для pass.
    • Репозиторий: https://github.com/emacs-helm/helm-pass
    • Запуск:
      1M-x helm-pass
      
    • Выдаёт в минибуфере список записей из базы паролей. При нажатии Enter копирует пароль в буфер.
  1. ivy-pass

2 Управление файлами конфигурации

  • Использование chezmoi для управления файлами конфигурации домашнего каталога пользователя.

2.1 Общая информация

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:
    1chezmoi cd
    2$EDITOR dot_zshrc.tmpl
    
  • Шаблоны в каталоге .chezmoitemplates должны создаваться вручную:
    1chezmoi cd
    2mkdir -p .chezmoitemplates
    3cd .chezmoitemplates
    4$EDITOR mytemplate
    

2.3.4 Редактирование файла шаблона

  • Используйте chezmoi edit:
    1chezmoi edit ~/.zshrc
    
  • Чтобы сделанные вами изменения сразу же применялись после выхода из редактора, используйте опцию --apply:
    1chezmoi edit --apply ~/.zshrc
    

2.3.5 Тестирование шаблонов

  • Тестирование с помощью команды chezmoi execute-template.
  • Тестирование небольших фрагментов шаблонов:
    1chezmoi execute-template '{{ .chezmoi.hostname }}'
    
  • Тестирование целых файлов:
    1chezmoi cd
    2chezmoi execute-template < dot_zshrc.tmpl
    

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 }}
  1. Удаление пробелов

    • Для удаления проблем в шаблоне разместите знак минус и пробела рядом со скобками:
      1HOSTNAME={{- .chezmoi.hostname }}
      
    • В результате получим:
      1HOSTNAME=myhostname
      
  1. Отладка шаблона

    • Используется подкоманда execute-template:
      1chezmoi execute-template '{{ .chezmoi.os }}/{{ .chezmoi.arch }}'
      
    • Интерпретируются любые данные, поступающие со стандартного ввода или в конце команды.
    • Можно передать содержимое файла этой команде:
      1cat foo.txt | chezmoi execute-template
      
  1. Логические операции

    • Возможно выполнение логических операций.
    • Если имя хоста машины равно work-laptop, текст между if и end будет включён в результат:
      1# common config
      2export EDITOR=vi
      3
      4# machine-specific configuration
      5{{- if eq .chezmoi.hostname "work-laptop" }}
      6# this will only be included in ~/.bashrc on work-laptop
      7{{- end }}
      
    1. Логические функции

      • eq: возвращает true, если первый аргумент равен любому из остальных аргументов, может принимать несколько аргументов;
      • not: возвращает логическое отрицание своего единственного аргумента;
      • and: возвращает логическое И своих аргументов, может принимать несколько аргументов;
      • or: возвращает логическое ИЛИ своих аргументов, может принимать несколько аргументов.
    1. Целочисленные функции

      • 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 Установка

  • Fedora
    • pass

      1dnf install pass pass-otp
      
      • gopass
        1dnf install gopass
        

3.1.2 Настройка

  1. Ключи GPG

    • Просмотр списка ключей:
      1gpg --list-secret-keys
      
    • Если ключа нет, нужно создать новый:
      1gpg --full-generate-key
      
  1. Инициализация хранилища

    • Инициализируем хранилище:
      1pass init <gpg-id or email>
      
  1. Синхронизация с git

    • Создадим структуру git:
      1pass git init
      
    • Также можно задать адрес репозитория на хостинге (репозиторий необходимо предварительно создать):
      1pass git remote add origin git@github.com:<git_username>/<git_repo>.git
      
    • Для синхронизации выполняется следующая команда:
      1pass git pull
      2pass git push
      
    1. Прямые изменения

      • Следует заметить, что отслеживаются только изменения, сделанные через сам gopass (или pass).
      • Если изменения сделаны непосредственно на файловой системе, необходимо вручную закоммитить и выложить изменения:
        1cd ~/.password-store/
        2git add .
        3git commit -am 'edit manually'
        4git push
        
      • Проверить статус синхронизации модно командой
        1pass git status
        

3.1.3 Настройка интерфейса с броузером

  • Для взаимодействия с броузером используется интерфейс native messaging.
  • Поэтому кроме плагина к броузеру устанавливается программа, обеспечивающая интерфейс native messaging.
  1. Плагин browserpass

3.1.4 Сохранение пароля

  1. Добавить новый пароль

    • Выполните:

      1pass insert [OPTIONAL DIR]/[FILENAME]
      
      • OPTIONAL DIR: необязательное имя каталога, определяющее файловую структуру для вашего хранилища паролей;
      • FILENAME: имя файла, который будет использоваться для хранения пароля.
    • Отобразите пароль для указанного имени файла:

      1pass [OPTIONAL DIR]/[FILENAME]
      
    • Замените существующий пароль:

      1pass generate --in-place FILENAME
      

3.2 Управление файлами конфигурации

3.3 Дополнительное программное обеспечение

  • Установите дополнительное программное обеспечение:
     1sudo dnf -y install \
     2     dunst \
     3     fontawesome-fonts \
     4     powerline-fonts \
     5     light \
     6     fuzzel \
     7     swaylock \
     8     kitty \
     9     waybar swaybg \
    10     wl-clipboard \
    11     mpv \
    12     grim \
    13     slurp
    
  • Установите шрифты:
    1sudo dnf copr enable peterwu/iosevka
    2sudo dnf search iosevka
    3sudo dnf install iosevka-fonts iosevka-aile-fonts iosevka-curly-fonts iosevka-slab-fonts iosevka-etoile-fonts iosevka-term-fonts
    

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

  1. Извлеките последние изменения из репозитория и примените их

    • Можно извлечь изменения из репозитория и применить их одной командой:
      1chezmoi update
      
    • Это запускается git pull --autostash --rebase в вашем исходном каталоге, а затем chezmoi apply.
  1. Извлеките последние изменения из своего репозитория и посмотрите, что изменится, фактически не применяя изменения

    • Выполните:
      1chezmoi git pull -- --autostash --rebase && chezmoi diff
      
    • Это запускается git pull --autostash --rebase в вашем исходном каталоге, а chezmoi diff затем показывает разницу между целевым состоянием, вычисленным из вашего исходного каталога, и фактическим состоянием.
    • Если вы довольны изменениями, вы можете применить их:
      1chezmoi apply
      
  1. Автоматически фиксируйте и отправляйте изменения в репозиторий

    • Можно автоматически фиксировать и отправлять изменения в исходный каталог в репозиторий.
    • Эта функция отключена по умолчанию.
    • Чтобы включить её, добавьте в файл конфигурации ~/.config/chezmoi/chezmoi.toml следующее:
      1[git]
      2    autoCommit = true
      3    autoPush = true
      
    • Всякий раз, когда в исходный каталог вносятся изменения, chezmoi фиксирует изменения с помощью автоматически сгенерированного сообщения фиксации и отправляет их в ваш репозиторий.
    • Будьте осторожны при использовании autoPush. Если ваш репозиторий dotfiles является общедоступным, и вы случайно добавили секрет в виде обычного текста, этот секрет будет отправлен в ваш общедоступный репозиторий.

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие