Быстрая установка
На свежем Linux-сервере (требуются curl или wget и права root):
curl -fsSL https://armlock.geekchain.ru/install.sh | bash
Скрипт определит архитектуру (amd64 / arm64), скачает последний production-релиз,
проверит SHA-256 и положит бинарь в /usr/local/bin/armlock.
Дальше — sudo armlock install и sudo armlock pam install.
Параметры install.sh
# Конкретная версия (канал определяется по префиксу v / t)
curl -fsSL https://armlock.geekchain.ru/install.sh | bash -s -- v1.2.3
curl -fsSL https://armlock.geekchain.ru/install.sh | bash -s -- t0.0.3
# Принудительный канал
curl -fsSL https://armlock.geekchain.ru/install.sh | bash -s -- test
# Поставить в свою директорию (без sudo)
curl -fsSL https://armlock.geekchain.ru/install.sh | bash -s -- --bin-dir ~/.local/bin
# Использовать собственное зеркало
ARMLOCK_INSTALL_BASE_URL=https://my-mirror.example.com/releases \
curl -fsSL https://armlock.geekchain.ru/install.sh | bash
Установка вручную (без pipe-to-shell)
Загружаем актуальные ссылки на бинарь…
Последние релизы
Загружаем манифест…
Команды
armlock install — инициализация /etc/armlock/
sudo armlock install # идемпотентно
sudo armlock install --force # перезаписать armlock.conf
Создаёт /etc/armlock/ (0755), /etc/armlock/users/ (0700)
и шаблон /etc/armlock/armlock.conf (0600). Запускать первой командой
после установки бинаря.
armlock cli — управление конфигами пользователей
armlock cli user add <name>
armlock cli user list
armlock cli user show <name> [--redact]
armlock cli user delete <name>
armlock cli factor add <name> password --source shadow
armlock cli factor add <name> password --source hash [--algo argon2id|bcrypt] [--password-stdin]
armlock cli factor add <name> totp [--digits 6|8] [--period 30] [--issuer armlock]
armlock cli factor remove <name> <password|totp>
armlock cli policy require <name> <factor> [<factor>...]
armlock cli policy show <name>
armlock cli password-hash [--password-stdin] [--update-conf]
Все операции пишут JSON-файлы в /etc/armlock/users/ атомарно
(через temp + rename). Запись идёт через 0600 root:root — секреты
внутри.
armlock pam — установка/обновление модуля pam_armlock.so
sudo armlock pam install [--yes] # первая установка
sudo armlock pam update [--check] # обновление на месте
armlock pam version # версия из .so (byte-scan)
Замена работающего модуля безопасна: ядро держит старый inode по открытым дескрипторам в sshd/login, новые auth-сессии подхватывают новый файл — перезапуск служб не нужен.
armlock update — самообновление бинаря
armlock update --check # 0=актуально, 1=есть обновление, 2=ошибка
sudo armlock update --yes # автоприменение без подтверждения
sudo armlock update --version v1.2.3 # откат или фиксация версии
sudo armlock update --channel test # принудительно test-канал
Канал определяется автоматически по префиксу версии (v* →
production, t* → test). Полностью отключить самообновление:
ARMLOCK_NO_SELF_UPDATE=1. Заменить URL релиз-сервера:
ARMLOCK_UPDATE_BASE_URL или update.base_url в
armlock.conf.
armlock client · armlock console — в разработке
client: фоновый демон, синхронизирует
/etc/armlock/users/*.json с удалённого сервера через WebSocket
(с longpoll-фолбэком). Запускается через systemd.
console: локальный веб-интерфейс администратора
(127.0.0.1 по умолчанию). Настройки — секция
[console] в armlock.conf: порт, TLS, логин/пароль
админа. При включённом TLS без указания путей сертификата автоматически
генерируется self-signed в /etc/armlock/console/.
Примеры пользователей
Четыре характерных сценария. Каждый блок — последовательность команд,
которая создаёт юзера эквивалентного фикстуре в репозитории
(docker/users/<name>.json). Запускать от root.
mike — пароль через /etc/shadow (классическая системная аутентификация)
# Юзер должен существовать в системе и иметь пароль.
# В armlock делаем factor=password/source=shadow и единственный фактор в политике.
sudo armlock cli user add mike
sudo armlock cli factor add mike password --source shadow
sudo armlock cli policy require mike password
На bookworm chpasswd по умолчанию использует yescrypt
($y$), а наша библиотека crypt поддерживает только
$1$/$5$/$6$. Для shadow-юзеров
задавайте пароль с явной схемой:
sudo useradd -m mike
echo 'mike:password111' | sudo chpasswd -c SHA512
alice — хэш пароля прямо в конфиге (argon2id)
# Системный аккаунт alice не нужен — armlock хранит хэш в JSON.
sudo armlock cli user add alice
sudo armlock cli factor add alice password --source hash --algo argon2id
# (приглашение Password / Confirm — введите пароль alicepass)
sudo armlock cli policy require alice password
Альтернатива — без интерактивного ввода (для автоматизации):
echo 'alicepass' | sudo armlock cli factor add alice password \
--source hash --algo argon2id --password-stdin
Соль argon2id генерируется случайно при каждом запуске, в репозиторной
фикстуре docker/users/alice.json зафиксирован детерминированный
PHC-хэш (m=4096, t=3, p=4) для стабильных тестов.
bob — shadow-пароль + TOTP вторым фактором
sudo useradd -m bob
echo 'bob:bobpass' | sudo chpasswd -c SHA512
sudo armlock cli user add bob
sudo armlock cli factor add bob password --source shadow
sudo armlock cli factor add bob totp --secret JBSWY3DPEHPK3PXP
sudo armlock cli policy require bob password totp
Если опустить --secret, armlock сгенерирует случайный
base32-секрет, распечатает otpauth:// URI и нарисует ASCII-QR
прямо в терминале для добавления в Google Authenticator / Authy.
carol — только TOTP, без пароля (single-factor possession)
sudo armlock cli user add carol
sudo armlock cli factor add carol totp --secret ORSXG5BNORSXG5BNORSXG5BN
sudo armlock cli policy require carol totp
В policy.require только totp — пароль вообще
не запрашивается. PAM-модуль сразу зовёт TOTP-промпт. Это
single-factor possession (что-то, чем владеешь — устройство с секретом),
не 2FA. Уместно для kiosks, временного доступа, hardware-key-only логинов.
Как это устроено
-
Конфиг каждого юзера лежит в
/etc/armlock/users/<name>.jsonи описывает факторы (password / totp) и политику: какие факторы должны пройти и в каком порядке. -
PAM-модуль
pam_armlock.soпри вызове из sshd / login / sudo читает этот JSON, идёт поpolicy.requireи для каждого фактора запрашивает ввод (Password:/TOTP code:), проверяя через нужный backend. -
Один бинарь
armlock— все офлайн-роли:cliдля управления,pamдля модуля,updateдля самообновления. Будущиеclient(синк с remote) иconsole(веб-админка) — там же. -
Релизы публикуются по тегам:
v*идут в канал production,t*— в test. Карточки выше отображают актуальное состояние обоих каналов изreleases.json.