Samba, CIFS и удаление файлов

Итак, у меня есть общий ресурс Samba, расположенный на сервере A. У меня есть этот общий ресурс, смонтированный на двух других серверах, B и C. Идея состоит в том, что B и C должны записывать временные файлы в одно место, чтобы несколько заданий фоновой обработки (также работающие на B и C) имеют доступ к одному и тому же пулу файлов.

Когда фоновые процессы завершены, они удаляют файл, над которым они работали. Когда я делаю список каталогов общего ресурса после того, как файл был удален, исходные имена файлов теперь соответствуют cifs79, cifs78 и т.д. Они занимают столько же места, что и исходный файл, поэтому я предполагаю, что они являются оригиналами, только что переименованы.

Проблема в том, что эти файлы не исчезнут, если я не перезапущу самбу (что я никогда не планирую делать). Я пропускаю простой параметр конфигурации, который немедленно удалит файлы?

Я создал свои акции с этой командой:

mount -t cifs //10.251.251.251/uploads ./uploads -o username=samba_user,noexec

Файлы идут в общий доступ как -rw------- и оставаться таким после того, как они меняют имена.

Вот полный smb.conf файл: http://gist.github.com/172474 и результат запуска smbstatus: http://gist.github.com/172478


Больше информации:

Если я вручную создаю файл из коробки, в которой смонтирован общий ресурс, я могу без проблем создавать, редактировать, удалять. Если я начну сеанс IRB (интерактивный рубин), я могу использовать Ruby для создания / удаления файлов без проблем. Похоже, само приложение создает файл со странными правами доступа. Несмотря на то, что приложение и мой сеанс IRB работают от одного и того же пользователя, они должны иметь одинаковые разрешения для любых действий.

Спасибо за любую помощь!

3 ответа

У вас есть доступ к полной конфигурации для сервера Samba? Я знаю, что обычная идиома состоит в том, чтобы настроить samba для выполнения чего-то другого, кроме удаления файла по команде с сервера для удаления, для реализации функциональности стиля "корзина / корзина" по сети. Переименование файлов в исходном каталоге немного необычно, но все же возможно.

Столбец R/W говорит RDONLY, но в моей конфигурации я только для чтения = нет

Это не означает, что клиентам не разрешено открывать (file, "r"), то есть открывать файлы только для чтения, даже если им разрешено их записывать.

Похоже, Samba должна удерживать файлы, которые B удаляет, потому что у A все еще есть оплок. Срок действия блокировки истекает через некоторое время, после чего samba, вероятно, удалит переименованный файл.

Это очень похоже на то, что NFS делает для реализации семантики fd = открыть / создать временный файл удалить временный файл (если вы его еще не закрыли) закрыть fd

Вы получаете.nfs... файлы в ваших каталогах.

В принципе, я думаю, что это проблема разрешений, файл конфигурации выглядит нормально. Вы пробовали просматривать журналы /var/log/samba/*?

О вашем файле smb.conf:

[global]
force create mode = 0644
force directory mode = 0744 

0744 не является обычным режимом для "принудительного режима каталога", вероятно, опечаткой, обычно, если вы даете разрешения на чтение для папок, которые также хотите пометить битом выполнения, используйте 755, 750 или 700. Этот параметр позволяет всем папкам иметь по крайней мере, эти биты установлены. "Принудительно создать режим" его хорошо.

[uploads]
create mask = 0655
directory mask = 755

Так как вы монтируете его с помощью noexec, я думаю, что правильное значение для вашей "маски создания" будет 666 или 644, а для "маски каталога" будет 755.

Я бы ssh на сервер и запустить что-то вроде этого тоже:

find /tmp/uploads -type f -print0 | xargs -0 chmod 644
find /tmp/uploads -type d -print0 | xargs -0 chmod 755
chown "$SMBUSER:$SMBUSER_GROUP" -r /tmp/uploads/
Другие вопросы по тегам