Назад | Перейти на главную страницу

Samba не перезагружает участников группы пользователей

Я запускаю простую настройку сервера Samba, где пользователи подключаются к общему ресурсу, который содержит папки для определенных групп пользователей. Папки chmod 2770, поэтому только пользователи, которые находятся в правильной группе, могут читать / писать в них.

Проблема в том, что если я изменяю членство в группе (т.е. удаляю пользователя из группы / добавляю пользователя в группу; изменения синхронизируются между клиентами и сервером!) Самба не перезагружает автоматически членство в группах для пользователя, поэтому они все еще могут писать в группы что они больше не являются членами и т. д. Мне нужно либо повторно подключиться к общему ресурсу, либо перезапустить самбу, чтобы применить изменения.

Есть ли способ предотвратить групповое кеширование и / или включить перезагрузку членства в группе в самбе?

Мой smb.conf:

[global]
interfaces = ethlan
bind interfaces only = yes
smb ports = 445
workgroup = WORKGROUP
security = user
passdb backend = tdbsam:/var/lib/mysamba/samba.tdb

disable netbios = yes
nt acl support = no
invalid users = root
read only = no
case sensitive = yes
load printers = no
unix extensions = yes

log file = /var/log/samba.log
log level = 1
syslog = 0

use sendfile = yes

[groups]
path = /home/groups
browseable = yes
force create mode = 0770
force directory mode = 2770
hide unreadable = yes

Вместо того, чтобы перезапускать всю службу Samba, вы можете просто послать ей сигнал, SIGHUP, чтобы заставить его перезагрузить файл конфигурации.

Из smbd(8) страница руководства:

Файл конфигурации и все файлы, которые он включает, автоматически перезагружаются каждую минуту, если они меняются. Вы можете принудительно перезагрузить сервер, отправив SIGHUP на сервер. Повторная загрузка файла конфигурации не повлияет на подключения к какой-либо уже установленной службе. Либо пользователю придется отключиться от службы, либо smbd будет убит и перезапущен.

Последние два предложения важны: на текущие соединения это не влияет.

То, как вы управляете подключениями пользователей, может сильно различаться и зависеть от ситуации.

  • Если они активно используют свое подключение, может быть проще попросить их перезагрузить компьютер, чтобы изменения вступили в силу; таким образом, если они заняты чем-то, они могут просто делать это на досуге.

  • Для отдельных пользователей вы можете убить их процесс подключения (SIGHUP может сработать, но пока не уверен); но вы можете захотеть, чтобы они сохранили и / или закрыли все, что они могли открыть на общих ресурсах, потому что их соединение будет разорвано. Когда они снова получат доступ к общему ресурсу, они создадут новое соединение с новым доступом. Ты можешь использовать smbstatus чтобы найти информацию о текущих подключениях.

  • Перезапуск Samba. Это довольно радикальный подход, но он может понадобиться в определенных ситуациях. Это убьет все текущие соединения, заставив их установить новые соединения.

  • Подожди. Если изменения не требуются в определенное время, вы можете просто позволить клиентам восстанавливать соединения самостоятельно.

Думаю, у меня такая же проблема. В моем случае членство в группах кэшируется для каждого процесса сеанса самбы smbstatus -p.

Я использую этот сценарий, чтобы убить процессы и «обновить» информацию о членстве:

#/bin/sh

VICTIM="$1"

[ -z "$VICTIM" ] && exit 1

if [ "$VICTIM" = "!" ]; then
    L="$(smbstatus -p 2>/dev/null)"
else
    L="$(smbstatus -p -u "${VICTIM}" 2>/dev/null)"
fi

echo "$L" | while read PID USER GROUP CLIENT IP; do
    getent passwd "$USER" >/dev/null || continue

    kill "$PID" 2>/dev/null
    echo -n .
done
echo " done!"

У Windows с этим проблем нет, потому что переподключается к самбе автоматически. У пользователя будет только минимальная задержка до следующего звонка. Но: все активные передачи файлов будут отменены, и пользователю будет выдана ошибка ввода-вывода.

Я автоматизировал это с помощью пакетного файла и cronjob. Таким образом, пользователь может завершить свои собственные сеансы двойным щелчком (и прочитать о проблеме с ошибкой ввода-вывода).