Вопрос или проблема
Я пытаюсь запустить простой скрипт preexec каждый раз, когда к общему ресурсу обращаются в samba, работающем на Rocky Linux 9. Вот моя конфигурация “testparm”:
# testparm
Загрузка файлов конфигурации smb из /etc/samba/smb.conf
Файл сервисов загружен успешно.
Слабое шифрование разрешено GnuTLS (например, NTLM как запасной вариант совместимости)
Роль сервера: ROLE_STANDALONE
Нажмите Enter, чтобы увидеть дамп определений ваших сервисов
# Глобальные параметры
[global]
client signing = required
disable spoolss = Yes
load printers = No
printcap name = /dev/null
security = USER
server signing = required
workgroup = SAMBA
idmap config * : backend = tdb
cups options = raw
printing = bsd
[content]
create mask = 0755
path = /opt/samba/shared
read only = No
root postexec = echo \"%u отключился от %S с %m (%I)\" >> /tmp/log
root preexec = echo \"%u подключился к %S с %m (%I)\" >> /tmp/log
valid users = bart
write list = bart @wheel
Ничего не записывается в /tmp/log. Я также не вижу никаких сообщений в журналах samba. Любая помощь будет полезна!
Kermes
Ответ или решение
Проблема с работой скриптов preexec и postexec в Samba на Rocky Linux 9
Введение
Вопрос, который вы подняли, касается конфигурации Samba, используемой в Rocky Linux 9, и конкретно скриптов preexec
и postexec
. Давайте рассмотрим вашу ситуацию и предложим решения проблемы, чтобы обеспечить корректное выполнение данных скриптов при доступе к общему ресурсу.
Анализ конфигурации
Давайте сначала посмотрим на вашу конфигурацию в файле smb.conf
. Вы указали следующее:
[content]
path = /opt/samba/shared
valid users = bart
write list = bart @wheel
root preexec = echo \"%u connected to %S from %m (%I)\" >> /tmp/log
root postexec = echo \"%u disconnected from %S from %m (%I)\" >> /tmp/log
-
Права доступа к лог-файлу: Убедитесь, что процесс Samba имеет права на запись в файл
/tmp/log
. Обычно Samba запускается от имени пользователяsmbd
, и если этот пользователь не имеет прав на запись, то логирование не будет работать. Вы можете изменить права доступа к папке/tmp
или, предпочтительно, указать другой каталог, доступный для записи.touch /tmp/log chown root:smbd /tmp/log chmod 664 /tmp/log
-
Использование root: Вам не нужно указывать
root
перед командамиpreexec
иpostexec
, просто укажите их напрямую, как показано ниже:preexec = echo \"%u connected to %S from %m (%I)\" >> /tmp/log postexec = echo \"%u disconnected from %S from %m (%I)\" >> /tmp/log
-
Отладка и логи Samba: Включите более подробные логи Samba, чтобы понять, что именно происходит при попытке вызова
preexec
иpostexec
. Для этого добавьте в секцию[global]
следующее:log level = 3 log file = /var/log/samba/%m.log max log size = 50
Это создаст отдельные логи для каждого клиента, что позволит вам видеть, какие ошибки могут возникать.
-
Проблемы версий: Убедитесь, что версия Samba подходит для использования данной конфигурации. Некоторые опции могут работать некорректно в устаревших или устаревших версиях. Используйте команду
samba --version
для проверки версии. -
Проверка конфигурации: После внесения изменений в
smb.conf
, убедитесь, что конфигурация проверена с помощьюtestparm
, а затем перезапустите службу Samba:sudo testparm sudo systemctl restart smb sudo systemctl restart nmb
Заключение
Проблема с вызовом preexec
и postexec
может быть связана с правами доступа к файлам, неправильной конфигурацией и отсутствием подходящих логов. Следуя предложенным рекомендациям, вы сможете установить причину проблемы и обеспечить ее решение. Если после всех проверок проблема не исчезла, рассмотрите возможность использования альтернативных подходов для реализации необходимого функционала, например, через другие системные скрипты или процессы.
Если у вас возникнут дополнительные вопросы, пожалуйста, не стесняйтесь обращаться.