LINUX.ORG.RU

Сообщения wiremann

 

minio изменение cipher suite

Форум — General

Здравствуйте, подскажите пожалуйста, есть настроенный кластер minio с поддержкой TLS, хочу изменить cipher suite, хочу использовать только 2 cipher suite: TLS_AES_256_GCM_SHA384 и TLS_AES_128_GCM_SHA256. Пробовал разные варианты (добавлял в конфиг /etc/default/minio):

tls:
  enabled: on
  cipher_suites:
    - TLS_AES_256_GCM_SHA384
    - TLS_AES_128_GCM_SHA256
tls:
  enabled: on
  certificate: /home/minio/.minio/certs/public.crt
  key: /home/minio/.minio/certs/private.key
  cipher_suites:
    - TLS_AES_256_GCM_SHA384
    - TLS_AES_128_GCM_SHA256
"tls": {
"enabled": true,
"cipherSuites": ["TLS_AES_256_GCM_SHA384", "TLS_AES_128_GCM_SHA256"]
}

Но в итоге testssl все равно показывает, что доступно больше chipher suite по порту 9000:

Negotiated cipher TLS_AES_128_GCM_SHA256, 253 bit ECDH (X25519)
Cipher order
TLSv1.2: ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-CHACHA20-POLY1305

Как все-таки можно оставить только необходимые криптопротоколы?

Ниже мой конфиг /etc/default/minio, в который я пробовал добавлять cipher suite

# Volume to be used for MinIO server.
MINIO_VOLUMES="http://s3node{1...4}:9000/s3/disk{1...4}"
# Use if you want to run MinIO on a custom port.
MINIO_OPTS="--address :9000 --console-address :9001"
# Root user for the server.
MINIO_ROOT_USER="admin"
# Root secret for the server.
MINIO_ROOT_PASSWORD="12345678"
MINIO_SERVER_URL="http://s3node1:9000"

 ,

wiremann
()

minio web console на отдельном хосте

Форум — Admin

Здравствуйте, подскажите пожалуйста. Установил кластер minio на ВМ с Centos 7 (делал по статье https://habr.com/ru/articles/595377/), кластер работает, доступ к minio web console есть (работает на этих хостах), в качестве логина/пароля указываю MINIO_ROOT_USER/MINIO_ROOT_PASSWORD. Хочу теперь установить minio web console на отдельной ВМ (Centos 7), пытаюсь делать по https://github.com/minio/console, но не могу понять, как передать эти мои логин/пароль MINIO_ROOT_USER/MINIO_ROOT_PASSWORD для подключения к моему кластеру. Пытался создавать через mc нового пользователя, как написано в инструкции на https://github.com/minio/console - в итоге через действующую консоль подключаюсь с новым пользователем, а с новой консоли не получается, ошибка авторизации.

Перемещено hobbit из general

 

wiremann
()

отправка логов apache kafka в elasticsearch с разделением по полям

Форум — Admin

Здравствуйте, подскажите пожалуйста. Есть кластер apache kafka (версия 2.8). Необходимо логи kafka (server.log) отправлять в elasticsearch с помощью fluent bit (fluent bit пишет напрямую в elasticsearch). Логи отправляются и попадают в elasticsearch, но проблема в том, что лог не разделяется по полям, пишется все сообщение в одно поле log, хотя я настроил regexp для логов kafka. Что не так в моей конфигурации? Или проблема все-таки в некорректном regexp? Ниже конфиг fluent-bit.conf для apache kafka:

[INPUT]
    Name            tail
    Path            /home/kafka/kafka/logs/server.log
    Parser          apache-kafka
    Tag             apache.kafka
    Refresh_Interval 5
    Mem_Buf_Limit   5MB
    Skip_Long_Lines On
[OUTPUT]
    Name            es
    Match           apache.kafka
    Host            192.168.0.15
    Port            9200
    Index           apache-kafka-%Y.%m.%d

Ниже конфиг parsers.conf для apache kafka

[PARSER]
   Name    apache-kafka
   Format  regex
   Regex   ^\[(?<timestamp>[^\]]+)\] (?<log_level>\S+) \[(?<thread_name>[^\]]+)\] (?<log_message>.*)$
   Time_Key     timestamp
   Time_Format  %Y-%m-%d %H:%M:%S,%L

Ниже кусок лога server.log, который и должен попадать в elasticsearch:

[2023-06-14 14:14:05,787] INFO [ExpirationReaper-0-AlterAcls]: Starting (kafka.server.DelayedOperationPurgatory$ExpiredOperationReaper)
[2023-06-14 14:14:05,900] INFO [SocketServer listenerType=ZK_BROKER, nodeId=0] Starting socket server acceptors and processors (kafka.network.SocketServer)
[2023-06-14 14:14:05,903] INFO [/config/changes-event-process-thread]: Starting (kafka.common.ZkNodeChangeNotificationListener$ChangeEventProcessThread)
[2023-06-14 14:14:05,951] INFO [SocketServer listenerType=ZK_BROKER, nodeId=0] Started data-plane acceptor and processor(s) for endpoint : ListenerName(PLAINTEXT) (kafka.network.SocketServer)
[2023-06-14 14:14:05,951] INFO [SocketServer listenerType=ZK_BROKER, nodeId=0] Started socket server acceptors and processors (kafka.network.SocketServer)
[2023-06-14 14:14:05,954] INFO Kafka version: 2.8.2 (org.apache.kafka.common.utils.AppInfoParser)
[2023-06-14 14:14:05,954] INFO Kafka commitId: 3146c6ff4a24cc24 (org.apache.kafka.common.utils.AppInfoParser)
[2023-06-14 14:14:05,954] INFO Kafka startTimeMs: 1686741245951 (org.apache.kafka.common.utils.AppInfoParser)
[2023-06-14 14:14:05,954] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
[2023-06-14 14:14:06,003] INFO [broker-0-to-controller-send-thread]: Recorded new controller, from now on will use broker fluentbit-cl1:9092 (id: 0 rack: null) (kafka.server.BrokerToControllerRequestThread)

 , ,

wiremann
()

самоподписанный сертификат ssl предупреждение Недействительный сертификат

Форум — General

Здравствуйте, подскажите пожалуйста, есть веб-сервер на nginx (ОС Centos 7), настроил самоподписанный сертификат (настраивал по статье https://www.8host.com/blog/sozdanie-samopodpisannogo-ssl-sertifikata-dlya-nginx-v-ubuntu-18-04/). Добавил этот сертификат на клиентский ПК (Windows 7) в доверенные корневые сертификаты через оснастку Сертификаты, но все равно в хроме при доступе на сайт возникает предупреждение "Не защищено, Недействительный сертификат. Что я сделал не так?

 

wiremann
()

kubernetes kubespray ошибка Network is Unreachable

Форум — General

Здравствуйте, подскажите пожалуйста, пытаюсь развернуть кластер kubernetes через kubespray (5 ВМ, ОС Centos 7). Все необходимые зависимости установил из файла kubespray/requirements.txt через pip. Непосредственно после запуски playbook в процессе развертывания кластера возникает ошибка:

TASK [download : download_container | Download image if required] ***************************************************************************************************************************************************************************
fatal: [kubespray1]: FAILED! => {"attempts": 4, "changed": true, "cmd": ["/usr/local/bin/nerdctl", "-n", "k8s.io", "pull", "--quiet", "quay.io/calico/node:v3.24.5"], "delta": "0:00:00.039810", "end": "2023-02-24 08:01:36.647635", "msg": "non-zero return code", "rc": 1, "start": "2023-02-24 08:01:36.607825", "stderr": "time=\"2023-02-24T08:01:36+03:00\" level=info msg=\"trying next host\" error=\"failed to do request: Head \\\"https://quay.io/v2/calico/node/manifests/v3.24.5\\\": dial tcp [2600:1f18:483:cf02:d0d3:7b3b:6c76:3787]:443: connect: network is unreachable\" host=quay.io\ntime=\"2023-02-24T08:01:36+03:00\" level=fatal msg=\"failed to resolve reference \\\"quay.io/calico/node:v3.24.5\\\": failed to do request: Head \\\"https://quay.io/v2/calico/node/manifests/v3.24.5\\\": dial tcp [2600:1f18:483:cf02:d0d3:7b3b:6c76:3787]:443: connect: network is unreachable\"", "stderr_lines": ["time=\"2023-02-24T08:01:36+03:00\" level=info msg=\"trying next host\" error=\"failed to do request: Head \\\"https://quay.io/v2/calico/node/manifests/v3.24.5\\\": dial tcp [2600:1f18:483:cf02:d0d3:7b3b:6c76:3787]:443: connect: network is unreachable\" host=quay.io", "time=\"2023-02-24T08:01:36+03:00\" level=fatal msg=\"failed to resolve reference \\\"quay.io/calico/node:v3.24.5\\\": failed to do request: Head \\\"https://quay.io/v2/calico/node/manifests/v3.24.5\\\": dial tcp [2600:1f18:483:cf02:d0d3:7b3b:6c76:3787]:443: connect: network is unreachable\""], "stdout": "", "stdout_lines": []}

Я попробовал вручную выполнить /usr/local/bin/nerdctl pull quay.io/calico/node:v3.24.5 и я получил эту же ошибку network is unreachable, но если я выполняю curl https://quay.io/v2/calico/node/manifests/v3.24.5, то возвращается успешный ответ, т.е. сетевых проблем нет. В чем может быть проблема?

 

wiremann
()

bash скрипт цикл с условием

Форум — General

Здравствуйте, подскажите пожалуйста, есть текстовый файл с данными myfile (3 столбца: Дата, Размер, Наименование), данные динамически меняются в файле. Необходимо отфильтровать строки по самой ранней дате, в отфильтрованных строках посчитать сумму по столбцу Размер и далее проверить - если суммарный размер по столбцу Размер больше 10000, то выводим сообщение «Размер больше 10000», а если суммарный размер по столбцу Размер меньше 10000, то выполняем в цикле предыдущие действия - отфильтровываем строки по самой ранней дате, считаем сумму по столбцу Размер и если суммарный размер больше 10000, то выход из цикла, а если меньше 10000, то все заново Частично написал скрипт, но не пойму, как правильно написать цикл с условием. Сейчас скрипт выглядит так:

#!/bin/bash

# определяем самую раннюю дату в файле myfile
EARLIEST_DATE=`cat /root/myfile |awk '{print $1}' |sort |head -n 5 |tail -n 1`

# отфильтровываем все строки с этой самой ранней датой из файла myfile и выбираем только столбец с размером 
FILTER_STRINGS=`cat /root/myfile |grep $EARLIEST_DATE |awk '{print $3}' > $TMP_SIZE`

# суммируем размер за нашу дату
SUMMARY_SIZE=`cat $TMP_SIZE| awk '{s += $1} END {print s}'`

# проверяем, больше требуемого размера наш суммарный размер по столбцу Размер или нет 
if [[ $SUMMARY_SIZE -gt 10000 ]]; then
echo "Размер больше 10000"
  else 
    #здесь должен идти цикл с повторяющимися действиями, не пойму, как правильно написать

 

wiremann
()

bash скрипт перенаправление ошибок в файл

Форум — General

Здравствуйте, подскажите пожалуйста, есть bash скрипт и нужно писать в лог, успешно или нет отработала команда или нет в таком формате: «Команда отработала успешно» либо «Команда завершилась с ошибкой». И далее перенаправлять поток ошибок в этот же лог файл Все работает, за исключением одного момента. У меня сейчас получается сначала идет перенаправление потока ошибок в файл, а далее уже вывод сообщения «Команда завершилась с ошибкой». Не могу понять, как сделать наоборот, чтобы сначала выводилось сообщение, а потом уже сама ошибка

Вот мой скрипт:

# лог файл
LOG_FILE=/log/my.log
# выполняем нужную нам команду
ls -l skldjflkjsdf 2>> $LOG_FILE
# пишем в лог, успешно завершилась команда или нет
if [ $? -eq 0 ]; then
echo "Команда отработала успешно" >> $LOG_FILE
else echo "завершилась ошибкой" > $LOG_FILE
fi

 

wiremann
()

postgresql фактическое время выполнения запроса меньше значения total_time

Форум — Development

Здравствуйте, подскажите пожалуйста, есть postgres 13 версии, создана БД с таблицей mytable размером 650 Мб. Выполняю однократно запрос select * from mytable, запрос по факту выполнялся 43 секунды (проверял с включенным timing), но если посмотреть в pg_stat_statements , то вижу, что total_time указано 19795.10915 (значение calls 1). Почему такое различие в 2,3 раза между фактическим выполнением запроса и выводом total_time?

Из pg_stat_statements получаю таким запросом:

select datname, query, calls, (total_plan_time + total_exec_time) as total_time, rows, shared_blks_hit, shared_blks_read, ((total_plan_time + total_exec_time)/calls) as avg_time from pg_stat_statements  join pg_database d on pg_stat_statements.dbid = d.oid order by total_time desc limit 10;

Перемещено hobbit из general

 

wiremann
()

как безопасно хранить ssh ключи?

Форум — General

Здравствуйте, подскажите пожалуйста, а кто как хранит у себя приватные ssh-ключи и на что обращать внимание с т.з. безопасности? Насколько нормально/плохо хранить по стандартной практике в домашнем каталоге пользователя в каталоге .ssh? На мой взгляд, безопаснее хранить где-нибудь в другом месте, а то этот каталог точно проверят в случае чего. Используете ли для хранения ключей какие-нибудь менеджеры паролей с ssh-агентом? Насколько сильно небезопасно сохранять парольную фразу ключа в каком-нибудь ssh-агенте, где есть такая возможность, чтобы не вводить каждый раз при входе на хост? (Moba Xterm и т.д.)

 

wiremann
()

postgresql создание пользователя с правами на чтение

Форум — General

Здравствуйте, подскажите пожалуйста, есть postgresql 13 с БД mybase. В БД есть 2 таблицы table1 и table2. Необходимо создать пользователя с правами только на чтение данных таблиц и все. Делаю так:

CREATE ROLE user1 WITH LOGIN ENCRYPTED PASSWORD '123456';
GRANT CONNECT ON DATABASE mybase TO user1;
GRANT USAGE ON SCHEMA public TO user1;
GRANT SELECT ON all tables IN schema public TO user1;

В итоге да, из данных таблиц можно только читать, но при этом у пользователя есть возможность создать новую таблицу и далее добавлять в нее данные. Почему так произошло? Или это связано с тем, что я использую схему public? Что в этом случае делать?

 

wiremann
()

backup БД postgresql с помощью barman

Форум — Admin

Здравствуйте, подскажите пожалуйста, настраиваю backup’ы для postgresql через barman (один хост с postgresql, второй хост - непосредственно с barman). Все настроил, backup’ы корректно создаются, но когда я пытаюсь восстановиться из backup’a, то восстановление вроде проходит успешно (barman выводит сообщение «Recovery completed. Your PostgreSQL server has benn successfully prepared for recovery»), но по факту данные не были восстановлены (например, в БД на момент бэкапа были 2 таблицы, для проверки удалил одну из таблиц, сделал восстановление из бэкапа - также осталась одна таблица)

Восстановление БД делаю так:

  • на хосте с postgresql останавливаю postgresql: systemctl stop postgresql-11
  • на хосте с barman выполняю: barman recover --remote-ssh-command "ssh postgres@barman-postgresql" barman-postgresql 20210521T133328 /var/lib/pgsql/11/data
  • на хосте с postgresql запускаю postgresql: systemctl start postgresql-11 Пробовал также запускать postgresql в режиме восстановления: /usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data start результат такой же

Что я делаю не так?

 ,

wiremann
()

копирование файлов за текущую дату с сервера

Форум — General

Здравствуйте, подскажите пожалуйста, пытаюсь скопировать с удаленного сервера из каталога /tmp файлы за текущую дату (дата изменения файла за текущую дату). Пытаюсь так:

scp root@server:/tmp/$(ssh root@server 'ls -l /tmp --time-style=+'%d-%m-%Y' | awk -v d=$(date +%d-%m-%Y) '$6==d'') /backup_test

Но получаю ошибку:

awk: cmd. line:1: ==d
awk: cmd. line:1: ^ syntax error
scp: /tmp: not a regular file

При этом если попытаться выполнить просто команду:

ls -l /tmp --time-style=+'%d-%m-%Y' | awk -v d=$(date +%d-%m-%Y) '$6==d'

то данная команда корректно отрабатывает

 ,

wiremann
()

настройка мониторинга postgresql в zabbix, ошибка

Форум — Admin

Здравствуйте, подскажите пожалуйста, настраиваю мониторинг postgresql через zabbix 4.2. Я использую стандартный встроенный шаблон postgresql. Все данные отображаются корректно, кроме метрик из запроса pgsql.query.time.sql, данные из pgsql.query.time.sql не отображаются

Пытаюсь вручную выполнить запрос данный запрос, получаю ошибку:

psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -v tmax=$5 -f "/var/lib/zabbix/postgresql/pgsql.query.time.sql"
psql:/var/lib/zabbix/postgresql/pgsql.query.time.sql:31: ОШИБКА:  ошибка синтаксиса (примерное положение: ")")
СТРОКА 22: ...'epoch' FROM (clock_timestamp() - query_start)) > )::integer...

Вот сам запрос из /var/lib/zabbix/postgresql/pgsql.query.time.sql:

WITH T AS
        (SELECT db.datname,
                        coalesce(T.query_time_max, 0) query_time_max,
                        coalesce(T.tx_time_max, 0) tx_time_max,
                        coalesce(T.mro_time_max, 0) mro_time_max,
                        coalesce(T.query_time_sum, 0) query_time_sum,
                        coalesce(T.tx_time_sum, 0) tx_time_sum,
                        coalesce(T.mro_time_sum, 0) mro_time_sum,
                        coalesce(T.query_slow_count, 0) query_slow_count,
                        coalesce(T.tx_slow_count, 0) tx_slow_count,
                        coalesce(T.mro_slow_count, 0) mro_slow_count
        FROM pg_database db NATURAL
        LEFT JOIN (
                SELECT datname,
                        extract(epoch FROM now())::integer ts,
                        coalesce(max(extract('epoch' FROM (clock_timestamp() - query_start))::integer * (state NOT IN ('idle', 'idle in transaction', 'idle in transaction (aborted)') AND query !~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) query_time_max,
                        coalesce(max(extract('epoch' FROM (clock_timestamp() - query_start))::integer * (state NOT IN ('idle') AND query !~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) tx_time_max,
                        coalesce(max(extract('epoch' FROM (clock_timestamp() - query_start))::integer * (state NOT IN ('idle') AND query ~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) mro_time_max,
                        coalesce(sum(extract('epoch' FROM (clock_timestamp() - query_start))::integer * (state NOT IN ('idle', 'idle in transaction', 'idle in transaction (aborted)') AND query !~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) query_time_sum,
                        coalesce(sum(extract('epoch' FROM (clock_timestamp() - query_start))::integer * (state NOT IN ('idle') AND query !~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) tx_time_sum,
                        coalesce(sum(extract('epoch' FROM (clock_timestamp() - query_start))::integer * (state NOT IN ('idle') AND query ~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) mro_time_sum,

                        coalesce(sum((extract('epoch' FROM (clock_timestamp() - query_start)) > :tmax)::integer * (state NOT IN ('idle', 'idle in transaction', 'idle in transaction (aborted)') AND query !~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) query_slow_count,
                        coalesce(sum((extract('epoch' FROM (clock_timestamp() - query_start)) > :tmax)::integer * (state NOT IN ('idle') AND query !~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) tx_slow_count,
                        coalesce(sum((extract('epoch' FROM (clock_timestamp() - query_start)) > :tmax)::integer * (state NOT IN ('idle') AND query ~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)')::integer), 0) mro_slow_count
                FROM pg_stat_activity
                WHERE pid <> pg_backend_pid()
                GROUP BY 1) T
        WHERE NOT db.datistemplate )
SELECT json_object_agg(datname, row_to_json(T))
FROM T

 ,

wiremann
()

проверка доступности ресурса с учетом % потерь

Форум — General

Здравствуйте, подскажите пж-та, не могу никак сообразить: необходимо с помощью bash-скрипта проверять доступность ресурса http://www.google.com с помощью утилиты ping (отправляется 4 пакета) и в случае если процент потерь составляет 75% и больше (потерялось 3 пакета из 4 или 4 из 4), необходимо выполнить действие 1. Если процент потерь менее 75%, то выполнять действие 2. Не могу понять, как это реализовать. Пока сделал так: ping http://www.google.com -c 4 -q -w 30 &>/dev/null rezult=$? if [ $rezult != 0 ]; then echo «действие 1» else echo «действие 2»

Но данный способ не учитывает % потерь, условие срабатывает, даже если теряется 1 пакет

 ,

wiremann
()

grep фильтрация по времени

Форум — General

Здравствуйте, подскажите пж-та, каким образом можно в логе отфильтровать данные за определенный период времени (например, за 15 минут)? Смог сделать, например, за 1 час с 15:00 - 16:00 2018-04-02: grep «2018-04-02 1[5]:» mylog.txt Но каким образом можно отфильтровать, скажем, с 16:10 до 16:25 2018-04-02?

 ,

wiremann
()

скрипт поиска файлов по определенным маскам

Форум — Development

Здравствуйте, подскажите пж-та, как можно реализовать на bash'e: необходимо в определенном каталоге найти все файлы, подпадающие под определенные маски, например, txt, avi и вывести на экран список файлов с данными расширениями. Не пойму, как можно это сделать (скорее всего через вложенный цикл for, но не могу понять как)

 ,

wiremann
()

схема отказоустойчивости и балансировки для веб-ресурса

Форум — Admin

Здравствуйте, подскажите пж-та: имеется веб-сайт, работающий на wordpress. Данный сайт работает на centos 6 на одном физическом сервере, в качестве фронтэнда используется nginx, backend - apache, БД postgresql. Данный веб-ресурс используется в корпоративной сети, в последнее время нагрузка и важность сайта значительно увеличились. Встал вопрос об обеспечении отказоустойчивости и балансировки нагрузки для данного сайта. Есть еще 2 аналогичных физических сервера, которые можно задействовать (hp dl380 g5). Какую схему оргаризации отказоустойчивости и балансировки вы можете посоветовать?

 , ,

wiremann
()

RSS подписка на новые темы