Доступ к fifo из Windows через Samba не работает, очевидных причин почему нет.

Вопрос или проблема

Я попытался считать из fifo в Windows через samba, чтобы посмотреть, работает это или нет (если будет работать, у меня может быть что-то интересное с этим), и обнаружил, что это не так. ReadFile() сразу возвращает 0 байт, где ожидается блокировка.

Поиск в интернете нашел одну интересную старую тему в google groups. https://groups.google.com/g/linux.samba/c/lkkziMXkgP4 Так что это когда-то работало в 2011 году. Забавно.

Вот мой smb.conf с удаленными конфиденциальными данными и комментариями.

[global]
   name resolve order = bcast host lmhosts wins
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   security = ads
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Введите\sновый\s*\пароль:* %n\n *Повторите\sновый\s*\пароль:* %n\n *пароль\sуспешно\sобновлен* .
   pam password change = yes
   min protocol = SMB2
   client signing = mandatory
   server signing = mandatory
   idmap uid = 10000-20000
   idmap gid = 10000-20000
   template homedir = /home/%D/%U
   template shell = /bin/bash
   root preexec = /etc/samba/makehomedir.sh %U
   usershare allow guests = yes

[allusers]
   comment = "Домашние директории пользователей"
   guest ok = no
   read only = no

[printers]
   comment = Все принтеры
   browseable = no
   path = /var/tmp
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700

[print$]
   comment = Драйверы принтеров
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

fifo находится в моей домашней директории. Сказать, что он должен быть в специальной директории, это вопрос, который я могу протестировать.

Есть одна важная вещь, которую вы не видите. Скрытие специальных файлов не установлено.

Так что вопрос в следующем: это ошибка конфигурации, ошибка в samba или действительно не ожидается, что это будет работать больше?

Версия Samba 4.17.12

Ответ или решение

Проблема Доступа к FIFO через Samba в Windows: Анализ и Решения

Введение

Доступ к именованным каналам (FIFO) в среде Windows через Samba может вызвать трудности, включая проблему, когда вызов ReadFile() возвращает 0 байт сразу, вместо ожидаемой блокировки. Эта ситуация может возникнуть по различным причинам, включая конфигурацию Samba, особенности поддержки Windows и корректность средств доступа к файловой системе. В данном ответе мы рассмотрим возможные проблемы, их причины и предложим решения.

Анализ конфигурации Samba

При анализе вашего файла smb.conf можно выделить следующие ключевые моменты:

  1. Протокол smb: Вы используете min protocol = SMB2, что является хорошей практикой для обеспечения безопасности. Однако стоит убедиться, что обоим клиентам (Windows и Samba) доступны последние версии протокола.

  2. Разрешения на доступ к файлам: Убедитесь, что правами доступа к FIFO, находящемуся в вашей домашней директории, установлены такие параметры, что пользователь, под которым работает Samba, может читать и записывать данные. Проверка прав доступа может помочь выявить, может ли клиент осуществить необходимые операции.

  3. Параметры папок: В вашем конфиге, секция [allusers] имеет read only = no, что должно позволять запись в директорию, но проблема может заключаться в том, что CAN и SMB взаимодействуют совершенно иначе, чем через локальную файловую систему. Возможно, стоит проверить, как Samba обрабатывает свои внутренние права, поскольку samba требует иногда дополнительных указаний для работы с специфичными элементами, такими как FIFO.

  4. Поддержка специальных файлов: Отметив, что опция "Hide special files" не включена, вы упомянули, что FIFO находится в директории, доступной через Samba. Однако общая практика заключается в том, что named pipes (или FIFO) чаще всего не поддерживаются через SMB на Windows должным образом. Именно это может быть источником вашей проблемы.

Возможные решения

  1. Размещение FIFO в специальной директории: Попробуйте разместить FIFO в директории, явно разрешенной для работы с Samba (например, в /tmp или специальной скрытой директории). Хотя вы упомянули, что можете протестировать данное решение, это может оказаться действенным.

  2. Клиентская конфигурация: Убедитесь, что клиентская сторона (Windows) не накладывает собственные ограничения на доступ к FIFO. Использование специализированных утилит, таких как Process Monitor, может помочь выявить проблемы с доступом.

  3. Обновление Samba: Рассмотрите возможность обновления до последней версии Samba. Возможно, в текущей версии (4.17.12) присутствуют ошибки, которые уже исправлены в более поздних обновлениях.

  4. Тестирование на других системах: Если есть возможность, протестируйте доступ к FIFO с других систем, чтобы удостовериться, что проблема не специфична для вашей текущей конфигурации или системы.

  5. Консультации с сообществом: Поскольку ранее существовали сообщения о том, что данная функциональность работала, стоит рассмотреть возможность обращения к более свежим аспектам работы с FIFO через Samba, так как изменения в архитектуре могли затронуть поведение.

Заключение

Таким образом, доступ к FIFO через Samba в Windows действительно может вести себя неожиданно из-за множества факторов, включая конфигурацию Samba, особенности криптографии и ограничения на уровне файловой системы. Путем тестирования различных решений и обращений к сообществу, вы сможете выяснить, действительно ли возможность доступа к FIFO была утрачена или это следствие конфигурационной ошибки.

Оцените материал
Добавить комментарий

Капча загружается...