| aflfuzz | ||
| cmd | ||
| configs | ||
| docs | ||
| golang-fuzz | ||
| internal | ||
| myfuzz | ||
| scripts | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
Linux Auth — Приложение аутентификации на Linux
Linux Auth — консольное приложение для аутентификации пользователей на Linux (Debian 12) с использованием локальной SQLite базы данных.
Поддерживает:
- Ввод логина и пароля с маской
- Ограничение числа попыток входа
- Сброс формы
- Настраиваемые параметры через TOML
- CLI утилиты для инициализации и добавления пользователей
Настройка окружения
- Установить Go, gcc и SQLite dev на Debian 12:
bash scripts/config.sh
-
Обновляет репозитории
-
Устанавливает Go, GCC, SQLite
-
Подготавливает зависимости Go проекта
Сборка проекта
Скрипт build.sh собирает все бинарники:
-
Основное приложение: authapp
-
Инициализация пользователей: init_users
-
CLI утилита для добавления пользователей: add_user
bash scripts/build.sh
-
CGO включён для работы с go-sqlite3
-
Создаёт release и debug версии (build/release/, build/debug/)
Инициализация пользователей
Перед первым запуском необходимо создать начальных пользователей:
./build/release/init_users
-
Создаёт пользователей из скрипта (admin, user1)
-
Пароли автоматически хешируются через SHA-256
Добавление новых пользователей
Используйте утилиту add_user для добавления пользователя без изменения кода:
./build/release/add_user -username USER -password PASS
Пример:
./build/release/add_user -username test -password 1234
Запуск основного приложения
bash scripts/run.sh
-
Запускает authapp с конфигурацией configs/config.toml
-
Поддерживает ввод логина и пароля с маской
-
Предусмотрена логика ограничения попыток и блокировки пользователя
-
Позволяет сбросить форму и повторить попытку
Пример работы:
=== AuthApp ===
Логин: admin
Пароль: ******
Доступ разрешён. Добро пожаловать, admin!
Конфигурация (configs/config.toml)
Пример:
[app]
name = "AuthApp"
max_login_attempts = 3
lock_timeout_sec = 300
[database]
type = "sqlite"
path = "./data/users.db"
[security]
password_hash = "sha256"
[ui]
show_welcome = true
-
max_login_attempts— количество попыток перед блокировкой -
lock_timeout_sec— время блокировки пользователя (сек) -
password_hash— алгоритм хеширования пароля -
show_welcome— вывод приветствия при старте
Особенности и назначение утилит
authapp: Основное приложение для аутентификации пользователей
init_users:Создаёт начальных пользователей в базе SQLite (admin, user1)
add_user: CLI утилита для добавления новых пользователей без перекомпиляции
Проверка работы
Собрать проект:
bash scripts/build.sh
Инициализировать пользователей:
./build/release/init_users
Запустить приложение:
bash scripts/run.sh
Протестировать успешный и неуспешный вход
Добавить нового пользователя:
./build/release/add_user -username test -password 1234
Запуск фаззинга
Сначала соберите приложение и инициализируйте тестовую базу (init_users).
Далее (для учебных целей фаззинг ограничен по времени - 5 минут):
- Запуск нативного фаззера (проверка функции аутентификации, ограничение в 1 поток для нормальной работы БД SQLite)
1.1. cd myfuzz
1.2. ./run_fuzz.sh
1.3. ./view_fuzz_coverage.sh
- Запуск AFL++ в режиме blackbox (фаззинг готового бинарника)
2.1. cd aflfuzz
2.2. ./install.sh
2.3. ./run_fuzz.sh
Попытка скрестить gccgo и afl провалилась, оставлю для истории
- Запуск AFL++ при компиляции через gccgo (установите AFL++ как в пункте 2.2. если ещё не сделали этого)
3.1. cd aflfuzz
3.2. ./install_gccgo_for_afl.sh
3.3. ./build_for_afl.sh
3.4. ./run_afl.sh
Черновики для go-fuzz
На данный момент установка по официальной инструкции https://github.com/dvyukov/go-fuzz/blob/master/README.md не работает по причине golang.org/x/tools@v0.44.0 requires go >= 1.25.0 (running go 1.24.4)
- Запуск go-fuzz
4.1. cd myfuzz
4.2. ./install_go-fuzz.sh (тут возникают проблемы, поэтому следующие шаги проверить не удалось + оказалось, что первая версия конфликтует с нативным фаззингом из пункта 1)
4.3. ./build_for_go-fuzz.sh
4.4. ./run_go-fuzz.sh
Последняя попытка (тоже неудачная)
Утилита обещает поддержку 4 фаззеров, оказалось это просто обёртка для генерации тестов в 4 форматах и запуска фаззеров. Из заявленных фаззеров удалось запустить только нативный (но я это и так сделал в пункте 1), а также сгенерировать тест для go-fuzz (но запустить не удалось, см. пункт 4 выше), для libfuzzer и afl даже тесты не сгенерировались (как я понял, тоже надо самому установить все нужные бинарники).
- Запуск golang-fuzz
5.1. cd golang-fuzz
5.2. ./install_golang-fuzz.sh
5.3. ./run_golang-fuzz.sh