Compare commits

..

2 Commits

Author SHA1 Message Date
2a29301db8 Vault 2025-10-07 08:51:28 +05:00
fe5d348b65 RabbitMQ 2025-10-02 18:16:29 +05:00
5 changed files with 313 additions and 10 deletions

View File

@ -172,16 +172,15 @@ sudo rabbitmqctl set_parameter shovel kaz_to_arm '{
}' }'
``` ```
Для Кыргызстана (таможенная инфраструктура) Для отправки в Кыргызстана (таможенная инфраструктура)
```sh ```sh
sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{
"src-protocol": "amqp091", "src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz",
"src-queue": "TO_KGZ", "src-queue": "TO_KGZ",
"dest-protocol": "amqp091", "dest-protocol": "amqp091",
"dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", "dest-uri": "amqp://kz_istt:kzistt123EX@192.168.70.133:20000/kaz_transportation",
"dest-exchange": "swap", "dest-queue": "KAZ",
"dest-exchange-key": "KAZ",
"ack-mode": "on-confirm", "ack-mode": "on-confirm",
"publish-properties": { "publish-properties": {
"delivery_mode": 2 "delivery_mode": 2
@ -193,7 +192,7 @@ sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{
sudo rabbitmqctl clear_parameter shovel kaz_to_kgz sudo rabbitmqctl clear_parameter shovel kaz_to_kgz
``` ```
Для отправки из Киргизии нам то такие настройки: НЕ ИСПОЛЬЗОВАТЬ Для отправки из Киргизии нам то такие настройки:
```sh ```sh
sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{
"src-protocol": "amqp091", "src-protocol": "amqp091",

View File

@ -0,0 +1,158 @@
Думаю что данный механизм будет лучше чем PAM но WAZUH будет ругаться на создание пользователей, наверно не стоит создавать пользователей чаще чем раз в месяц.
# 🔐 Использование PostgreSQL с Vault Database Secrets Engine
Vault от HashiCorp предоставляет [**Database Secrets Engine**](https://developer.hashicorp.com/vault/docs/secrets/databases) — мощный инструмент для **динамической выдачи учетных данных** к базам данных, включая PostgreSQL.
## Что делает Vault с PostgreSQL
Vault может:
- Создавать **временных пользователей** в PostgreSQL
- Ограничивать **время жизни (TTL)** учетных записей
- Автоматически **удалять пользователей** после TTL
- Выдавать **роли с разными правами**
---
## ⚙️ Настройка Vault с PostgreSQL
### 1. Включить Secret Engine
```bash
vault secrets enable database
```
### 2. Настроить подключение к PostgreSQL
```bash
vault write database/config/my-postgresql-db \
plugin_name=postgresql-database-plugin \
allowed_roles="readonly,readwrite" \
connection_url="postgresql://{{username}}:{{password}}@db.example.com:5432/mydb?sslmode=disable" \
username="vaultadmin" \
password="adminpassword"
```
```bash
vault write database/roles/app_billing \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS CONNECTION LIMIT 100; GRANT app_billing TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
```
```bash
vault write database/roles/app_company \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS CONNECTION LIMIT 100; GRANT app_company TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
```
> `vaultadmin` должен иметь привилегии на создание пользователей и назначение прав.
---
### 3. Создать роли Vault → PostgreSQL
#### Роль readonly:
```bash
vault write database/roles/readonly \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
```
#### Роль readwrite:
```bash
vault write database/roles/readwrite \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
```
2. Создаем два AppRole логина
```
vault auth enable approle
```
```conf
vault write auth/approle/role/app_billing_role \
token_policies="app-billing" \
token_ttl=1h \
token_max_ttl=4h
```
```conf
vault write auth/approle/role/app_company_role \
token_policies="app-company" \
token_ttl=1h \
token_max_ttl=4h
```
---
### 4. Получение динамического пользователя
```bash
vault read database/creds/readonly
vault read database/creds/app_billing
vault read database/creds/app_company
```
Ответ:
```json
{
"data": {
"username": "v-token-readonly-3HeNkcQZ",
"password": "D8uJKv2sO7VvXJ5yMwG1",
"ttl": 3600
}
}
```
### Удаление пользователя:
```bash
vault lease revoke <lease_id>
```
---
## 🔁 Использование существующих пользователей (Static Roles)
```bash
vault write database/static-roles/my-static-role \
db_name=my-postgresql-db \
rotation_statements="ALTER USER readonly WITH PASSWORD '{{password}}';" \
username="readonly" \
rotation_period="24h"
```
> Vault будет менять пароль у существующего пользователя.
---
## 🔐 Привилегии PostgreSQL пользователя `vaultadmin`
```sql
CREATE ROLE;
GRANT ...;
ALTER DEFAULT PRIVILEGES ...;
```
---
## 🎯 Применение
- CI/CD пайплайны: временные креды с TTL
- Разработчики: автоматическая выдача доступов
- Безопасность: без хранения логинов в `.env`
---

View File

@ -0,0 +1,145 @@
Настройка авторизации через Vault при помощи PAM (Пароль для каждого из пользователей храняться в Vault)
------------------------------------------------------------------------------------------
Шаг 1: Настройка Vault для хранения паролей
Vault будет хранить пароли существующих пользователей PostgreSQL в KV Secrets Engine.
Включите KV Secrets Engine
```sh
vault secrets enable -path=secret kv
```
Сохраните пароли пользователей:
Для каждого пользователя PostgreSQL сохраните пароль в Vault. Например:
```sh
vault kv put secret/postgres-users/user1 password="securepassword123"
vault kv put secret/postgres-users/user2 password="anotherpassword456"
```
Здесь:
secret/postgres-users/<username> — путь к секрету.
password — поле, содержащее пароль.
Настройте политики Vault:
Создайте политику, которая позволяет Python-скрипту читать пароли:
```conf
path "secret/data/postgres-users/*" {
capabilities = ["read"]
}
```
Примените политику:
```sh
vault policy write postgres-auth postgres-auth-policy.hcl
```
Создайте токен Vault:
Создайте токен для скрипта с доступом к политике:
```sh
vault token create -policy=postgres-auth
```
Сохраните токен (например, в /etc/vault-token), чтобы скрипт мог его использовать.
------------------------------------------------------------------------------------------
Шаг 1: Настройка PostgreSQL для PAM
Редактируем pg_hba.conf:
В файле /etc/postgresql/<version>/main/pg_hba.conf добавьте строку:
```text
host all all 0.0.0.0/0 pam pamservice=postgresql
```
Создаем PAM-конфигурацию:
Создайте файл /etc/pam.d/postgresql:
```
auth required pam_exec.so /path/to/vault_auth.py
account required pam_permit.so
```
Перезапустите PostgreSQL:
```sh
sudo systemctl restart postgresql
```
Создайте Python-скрипт (vault_auth.py), который будет вызываться PAM для проверки учетных данных через Vault. Пример:
```py
#!/usr/bin/env python3
import os
import sys
import hvac
def authenticate_with_vault(username, password):
try:
# Чтение токена Vault
vault_token = os.getenv('VAULT_TOKEN')
if vault_token is None or vault_token == "":
try:
with open('/etc/vault-token', 'r') as f:
vault_token = f.read().strip()
except FileNotFoundError:
print("Error: Vault token file /etc/vault-token not found", file=sys.stderr)
return False
except Exception as e:
print(f"Error reading vault token file: {e}", file=sys.stderr)
return False
if not vault_token:
print("Error: Vault token is empty", file=sys.stderr)
return False
# Инициализация клиента Vault
client = hvac.Client(url='http://127.0.0.1:8200', token=vault_token)
# Запрашиваем пароль из Vault
secret_path = f"secret/data/postgres-users/{username}"
response = client.secrets.kv.v2.read_secret_version(path=secret_path)
# Получаем хранимый пароль
stored_password = response['data']['data']['password']
# Сравниваем введенный пароль с хранимым
return stored_password == password
except Exception as e:
print(f"Authentication failed: {e}", file=sys.stderr)
return False
def main():
# PAM передает имя пользователя через переменную окружения
username = os.getenv('PAM_USER')
# Пароль читается из стандартного ввода
password = sys.stdin.readline().strip()
if authenticate_with_vault(username, password):
sys.exit(0) # Успешная аутентификация
else:
sys.exit(1) # Ошибка аутентификации
if __name__ == "__main__":
main()
```
Сделайте скрипт исполняемым:
```sh
chmod +x /path/to/vault_auth.py
```
```sh
pip install hvac
```
Или передайте токен безопасно через файл (например, /etc/vault-token) и считывайте его в скрипте:
```
with open('/etc/vault-token', 'r') as f:
vault_token = f.read().strip()
```
----------------------------------------------------------------------------------------------------

View File

@ -276,7 +276,7 @@ server.ssl.key-store-password M4yh4
vault auth enable approle vault auth enable approle
``` ```
7. Добавляем политики потом создаём ключ для этой политикиполитики 7. Добавляем политики потом создаём ключ для этой политики
Создаю файл политик Создаю файл политик
```sh ```sh
@ -337,7 +337,7 @@ export VAULT_SECRET_ID="your-secret-id"
``` ```
Проверяем не больше какого значения можно задать время жизни кокена: Проверяем не больше какого значения можно задать время жизни токена:
```sh ```sh
vault read sys/mounts/auth/token/tune vault read sys/mounts/auth/token/tune
``` ```
@ -358,7 +358,7 @@ Create data access token with set politics:
vault token renew <твой-токен> vault token renew <твой-токен>
``` ```
Проверяем зранятся ли токены в хранилище а не в памяти Проверяем хранятся ли токены в хранилище а не в памяти
```sh ```sh
vault read sys/auth/token/tune vault read sys/auth/token/tune
``` ```

View File

@ -512,8 +512,8 @@ mysqldump -uu1109882_root -proot123456 -h127.0.0.1 db1109882_locust > /root/db11
``` ```
Включаем модули: Включаем модули:
```sh ```sh
sudo phpenmod imap sudo phpenmod imap &&
sudo phpenmod mbstring sudo phpenmod mbstring &&
sudo a2enmod rewrite sudo a2enmod rewrite
``` ```
@ -521,6 +521,7 @@ mysqldump -uu1109882_root -proot123456 -h127.0.0.1 db1109882_locust > /root/db11
```sh ```sh
sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf
``` ```
Проверяем файл: Проверяем файл:
```sh ```sh
sudo mcedit /etc/apache2/apache2.conf sudo mcedit /etc/apache2/apache2.conf