forked from nihonium/linux-auth
207 lines
6.8 KiB
Markdown
207 lines
6.8 KiB
Markdown
# Linux Auth — Приложение аутентификации на Linux
|
||
|
||
Linux Auth — консольное приложение для аутентификации пользователей на Linux (Debian 12) с использованием локальной SQLite базы данных.
|
||
Поддерживает:
|
||
|
||
- Ввод логина и пароля с маской
|
||
- Ограничение числа попыток входа
|
||
- Сброс формы
|
||
- Настраиваемые параметры через TOML
|
||
- CLI утилиты для инициализации и добавления пользователей
|
||
|
||
## Настройка окружения
|
||
|
||
1. Установить Go, gcc и SQLite dev на Debian 12:
|
||
|
||
```bash
|
||
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. Запуск нативного фаззера (проверка функции аутентификации, ограничение в 1 поток для нормальной работы БД SQLite)
|
||
|
||
1.1. cd myfuzz
|
||
|
||
1.2. ./run_fuzz.sh
|
||
|
||
1.3. ./view_fuzz_coverage.sh
|
||
|
||
2. Запуск AFL++ в режиме blackbox (фаззинг готового бинарника)
|
||
|
||
2.1. cd aflfuzz
|
||
|
||
2.2. ./install.sh
|
||
|
||
2.3. ./run_fuzz.sh
|
||
|
||
### Попытка скрестить gccgo и afl провалилась, оставлю для истории
|
||
|
||
3. Запуск 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)
|
||
|
||
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 даже тесты не сгенерировались (как я понял, тоже надо самому установить все нужные бинарники).
|
||
|
||
5. Запуск golang-fuzz
|
||
|
||
5.1. cd golang-fuzz
|
||
|
||
5.2. ./install_golang-fuzz.sh
|
||
|
||
5.3. ./run_golang-fuzz.sh
|