Bug 44999 - sudo-logsrvd: invalid ClientMessage при отправке логов на сервер
Summary: sudo-logsrvd: invalid ClientMessage при отправке логов на сервер
Status: CLOSED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: sudo-logsrvd (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Evgeny Sinelnikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-23 14:26 MSK by Evgeny Shesteperov
Modified: 2023-04-21 16:40 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Evgeny Shesteperov 2023-01-23 14:26:28 MSK
Версия
======

- sudo-logsrvd-1.9.12p2-alt1

Дистрибутивы
============

- p10-server-10-x86-64, обновленный до Sisyphus
- p10-workstation-10-x86-64, обновленный до Sisyphus

Стенд
=====

Две машины: клиент и сервер.

Установить пакет sudo-logsrvd на сервере и клиенте:

        # apt-get install -y sudo-logsrvd

Настройка сервера:

1. В файле /etc/sudo_logsrvd.conf раскоментировать строчки:

         listen_address = *:30343
         pid_file = /var/run/sudo/sudo_logsrvd.pid
   
2. Запустить сервер:

         # sudo_logsrvd -n

Настройка клиента (настроить sudoreplay):

1. Создать каталог:
   
        # mkdir -m 750 /var/log/sudo-io

2. В /etc/sudoers добавить следующие строки:  

        test ALL=(ALL) ALL  
        Defaults log_output  
        Defaults!/usr/bin/sudoreplay !log_output  
        Defaults!/sbin/reboot !log_output

На клиенте первый системный пользователь обозначен как test.

Шаги воспроизведения
====================

1. На клиенте от пользователя test выполнить команду из под sudo:
   
        $ sudo whoami
   
2. На клиенте отправить логи sudo на сервер:
   
        # sudo_sendlog -h <IP-адрес сервера> -p 30343 /var/log/sudo-io/00/00/01/

Ожидаемый результат: примерный вывод как указано ниже

    Connected to <IP-адрес сервера>:30343
    Server ID: Sudo Audit Server <версия sudo>
    Remote log ID: /var/log/sudo-io/00/00/06
    1 I/O log transmitted successfully in 0.002411046 seconds

После выполнения команды # sudoreplay -l примерный вывод полей:

    янв 23 14:21:08 2023 : test : TTY=/dev/pts/1 ; CWD=/home/test ; USER=root ; HOST=workstation-10-x86-64-20230123.localdomain ; TSID=000001 ; COMMAND=/usr/bin/whoami

Фактический результат:

    Connected to <IP-адрес сервера>:30343
    Server ID: Sudo Audit Server 1.9.12p2
    Remote log ID: /var/log/sudo-io/00/00/01
    sudo_sendlog: error message received from server: invalid ClientMessage
    sudo_sendlog: exited prematurely with state 0
    sudo_sendlog: elapsed time sent to server [0, 10112045]
    sudo_sendlog: commit point received from server [0, 0]

При этом # sudoreplay -l на сервере показывает вполне корректный вывод:

    янв 23 14:07:58 2023 : test : HOST=workstation-10-x86-64-20230123.localdomain ; TTY=/dev/pts/0 ; CWD=/home/test ; USER=root ; TSID=00/00/01 ; COMMAND=/usr/bin/whoami

Не воспроизводится в P10
Воспроизводится в задании 313932 для P10.
Comment 1 Evgeny Sinelnikov 2023-01-24 19:50:22 MSK
Проблема выявлена только для серверной части. Новая клиентская часть со старым сервером работает корректно.

В серверной части проблема прилетела вот в этом коммите:
- https://github.com/sudo-project/sudo/commit/e6f2ad0ed6fd28e42915260352cd0a897bc2c0cc

commit e6f2ad0ed6fd28e42915260352cd0a897bc2c0cc
Author: Todd C. Miller <Todd.Miller@sudo.ws>
Date:   Wed Sep 28 08:47:25 2022 -0600

    Add missing NULL checks for mandatory fields in protobuf messages.
    Also no longer reject an InfoMessage with an unknown value_case,
    just log and ignore it.

Сервер проверяет валидность пакета и выпадает в функции handle_exit()
    /* Check that message is valid. */
    if (msg->run_time == NULL) {
	sudo_warnx(U_("%s: %s"), source, U_("invalid ExitMessage"));
	closure->errstr = _("invalid ExitMessage");
	debug_return_bool(false);
    }

Причину пока выясняю.
Comment 2 Alexander Makeenkov 2023-04-21 16:40:30 MSK
Версия пакета: sudo-1.9.13p2-alt1.x86_64

Ошибка больше не воспроизводится:

Server ID: Sudo Audit Server 1.9.13p2
Remote log ID: /var/log/sudo-io/00/00/01
1 I/O log transmitted successfully in 0.006069889 seconds