RabbitMQ
This commit is contained in:
@ -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",
|
||||||
|
|||||||
158
PostgreSQL/PostgreSQL_Vault_Database_Secrets_Engine.md
Normal file
158
PostgreSQL/PostgreSQL_Vault_Database_Secrets_Engine.md
Normal 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`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
145
PostgreSQL/PostgreSQL_Vault_PAM_python.md
Normal file
145
PostgreSQL/PostgreSQL_Vault_PAM_python.md
Normal 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()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------------------------------------------------------------------
|
||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user