diff --git a/Brokers/RabbitMQ_install.md b/Brokers/RabbitMQ_install.md index d585d0b..da173a1 100644 --- a/Brokers/RabbitMQ_install.md +++ b/Brokers/RabbitMQ_install.md @@ -172,16 +172,15 @@ sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ }' ``` -Для Кыргызстана (таможенная инфраструктура) +Для отправки в Кыргызстана (таможенная инфраструктура) ```sh sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ "src-protocol": "amqp091", "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", "src-queue": "TO_KGZ", "dest-protocol": "amqp091", - "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", - "dest-exchange": "swap", - "dest-exchange-key": "KAZ", + "dest-uri": "amqp://kz_istt:kzistt123EX@192.168.70.133:20000/kaz_transportation", + "dest-queue": "KAZ", "ack-mode": "on-confirm", "publish-properties": { "delivery_mode": 2 @@ -193,7 +192,7 @@ sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ sudo rabbitmqctl clear_parameter shovel kaz_to_kgz ``` -Для отправки из Киргизии нам то такие настройки: +НЕ ИСПОЛЬЗОВАТЬ Для отправки из Киргизии нам то такие настройки: ```sh sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ "src-protocol": "amqp091", diff --git a/PostgreSQL/PostgreSQL_Vault_Database_Secrets_Engine.md b/PostgreSQL/PostgreSQL_Vault_Database_Secrets_Engine.md new file mode 100644 index 0000000..3d7f954 --- /dev/null +++ b/PostgreSQL/PostgreSQL_Vault_Database_Secrets_Engine.md @@ -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 +``` + +--- + +## 🔁 Использование существующих пользователей (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` + +--- + diff --git a/PostgreSQL/PostgreSQL_Vault_PAM_python.md b/PostgreSQL/PostgreSQL_Vault_PAM_python.md new file mode 100644 index 0000000..0cd8a98 --- /dev/null +++ b/PostgreSQL/PostgreSQL_Vault_PAM_python.md @@ -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/ — путь к секрету. +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//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() +``` + + +---------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/Ubuntu.md b/Ubuntu.md index e3c4df0..fe3fcd3 100644 --- a/Ubuntu.md +++ b/Ubuntu.md @@ -512,8 +512,8 @@ mysqldump -uu1109882_root -proot123456 -h127.0.0.1 db1109882_locust > /root/db11 ``` Включаем модули: ```sh - sudo phpenmod imap - sudo phpenmod mbstring + sudo phpenmod imap && + sudo phpenmod mbstring && sudo a2enmod rewrite ``` @@ -521,6 +521,7 @@ mysqldump -uu1109882_root -proot123456 -h127.0.0.1 db1109882_locust > /root/db11 ```sh sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf ``` + Проверяем файл: ```sh sudo mcedit /etc/apache2/apache2.conf