Как установить будущие разрешения контента в папке

Допустим, я пользователь Алиса и у меня есть общедоступная папка /samba/public

Права доступа к общедоступной папке Samba ( /samba/public/ ): nobody: nogroup и 0777.

Когда Алиса пытается скопировать что-то из своей домашней папки на общий диск

(например, cp ~/Downloads/* /samba/public ),

Алиса хочет, чтобы вновь скопированные файлы были доступны для редактирования / удаления всем гостям, имеющим доступ к общедоступному общему ресурсу Samba.

Я хочу, чтобы скопированные файлы принадлежали никем: nogroup и были установлены в 0777.

Вместо этого происходит то, что вновь скопированные файлы принадлежат Алисе: Алиса и гостевые пользователи на общем диске не могут редактировать или удалять файлы.

Как я могу гарантировать, что будущие операции копирования / перемещения контента из домашней папки Алисы в общую / публичную папку Samba не будут принадлежать никому: nogroup, чтобы гостевым пользователям не мешали самим удалять / редактировать файлы?

    В некоторых системах можно установить липкие биты UID (пользователь) и / или GID (группа), 4 и 2 для каталогов:

     $ chmod +6000 dir 

    создавать новые записи, созданные внутри такого каталога, чтобы наследовать пользователя и / или группу из каталога. Так:

     $ chown nobody:nogroup /samba/public/ $ chmod +6000 /samba/public/ 

    Сделаю любую новую запись, которой nobody:nogroup владеет nobody:nogroup .

    Что касается битов прав доступа (664), я рекомендую взглянуть на параметр create mask = 664 внутри /etc/samba/smb.conf

    Я, кажется, исправил это сейчас (коснитесь дерева).

    Я пробовал различные исправления, поэтому трудно определить, что именно заставило все работать, но вот шаги, которые, я думаю, помогли:


    1. У меня запущено приложение Docker, которое загружает контент в мой домашний каталог (в то время это казалось неуместным).

    1. После следования совету @sourcejedi мой umask был изменен на 0002 .
    2. Следуя совету @Isaac, я смог создавать / копировать / перемещать файлы, а также каталоги из моего домашнего каталога в /samba/public/ и гостевые пользователи Samba могли свободно переименовывать, редактировать и удалять.

    1. Однако, когда я попытался скопировать / переместить что-либо в моем домашнем каталоге, которое было загружено с помощью этого приложения Docker, гостевые пользователи Samba не могли свободно переименовывать / редактировать / удалять (потому что приложение Docker создавало каталоги с chmod val 755) ,

    2. Затем я изменил umask приложения Docker на 0002. Последующие загрузки и каталоги, созданные приложением Docker, имели chmod val 775. Когда эти каталоги копируются в /samba/public/ , гостевые пользователи Samba теперь могут переименовывать / редактировать / удалять ,


    Примечания:

    • Изменить umask на значение по вашему выбору так же просто, как выполнить umask XXXX где XXXX – это значение, которое вы хотите. Вы можете проверить значение umask, просто набрав umask в терминале.

    • Изменение umask приложения Docker, которое я использовал, было сделано путем добавления нового параметра ENV под названием umask и установки его в 0002 . При запуске контейнера Docker вы можете передать этот параметр через CLI или, если вы используете Portianer для управления запущенными контейнерами, вы можете передать этот параметр ENV с помощью веб-интерфейса.

    • Главное предостережение: как часть этой работы, я сначала попытался последовать совету, данному в разделе « Настройка разрешений для streamа общих папок», а также попытался использовать шаблон пользовательских частных групп (UPG), который @sourcejedi рекомендовал, прежде чем следовать совету @ Исаака.

      Если кто-то в будущем столкнется с подобными проблемами, это может быть актуально?

    Добро пожаловать в U & L! Вам, вероятно, не нужны файлы, чтобы стать никем: nogroup 0777. Мне очень жаль, но шаблон, который вы хотели бы, был сломан Gnome / systemd (и udisks). По крайней мере, если Алиса использует их на том же компьютере, на котором работает сервер Samba .

    Это обсуждается (не очень четко) в вопросах общего доступа , чтения-записи, дерева каталогов фотографий для обычных пользователей и общего доступа к папке / файлам между несколькими пользователями на диске ext4.

    Если Алиса не использует Gnome (включая файловый менеджер Gnome) или udisks (чтобы пользователи могли монтировать съемные файловые системы) на том же компьютере, на котором работает сервер Samba, тогда вы, возможно, сможете использовать оригинальный шаблон User Private Groups ,

    IIRC, Redhat системы уже установили правильный umask для UPG. Для систем на основе Debian вам может потребоваться включить и настроить pam_umask. См. https://stackoverflow.com/questions/10220531/how-to-set-system-wide-umask

    РЕДАКТИРОВАТЬ: если вам нужно изменить umask , вам также придется изменить режим доступа к любым существующим файлам, которыми вы, возможно, захотите поделиться в будущем. Например, chmod -R g+w $HOME/* или chmod -R g+w /home/*/* . Не используйте chmod -R g+w $HOME . Это изменит режим $HOME/.ssh и, вероятно, прекратит вход в систему с помощью ssh .


    В противном случае, возможно, кто-то может предложить обходной путь, основанный на этой информации.

    Я могу предложить одну альтернативу, основанную на streamе Настройка разрешений для общей папки

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

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

    (Если вам абсолютно необходимо, вы можете «спрятать» сервер Samba, запустив его внутри контейнера, такого как LXC.)

    В случае, если у Алисы есть учетная запись на сервере Samba, которая не является гостем, может также потребоваться использовать chmod g+s в каталоге и в наборе smb.conf

     create mask = 0775 directory mask = 0775