Вопрос или проблема
Предположим, я пользователь Алиса и у меня есть общедоступная папка /samba/public
Права доступа к общедоступной папке Samba (/samba/public/
) установлены на nobody:nogroup и 0777.
Когда Алиса пытается скопировать что-то из своей домашней папки на общий публичный диск
(например, cp ~/Downloads/* /samba/public
),
Алиса хочет, чтобы новоскопированные файлы могли редактировать и удалять все гости, у которых есть доступ к общедоступной папке Samba.
Я хочу, чтобы скопированные файлы принадлежали nobody:nogroup и были установлены на 0777.
Вместо этого происходит так, что новоскопированные файлы принадлежат alice:alice, и пользователи-гости на общедоступном диске не могут редактировать или удалять файлы.
Как я могу гарантировать, что будущие операции копирования/перемещения контента из домашней папки Алисы в общедоступную папку Samba будут принадлежать nobody:nogroup, чтобы пользователи-гости не были лишены возможности удалять/редактировать файлы самостоятельно?
Похоже, что я это исправил теперь (постучим по дереву).
Я пробовал различные решения, поэтому трудно определить, что именно заставило все работать, но вот шаги, которые, я думаю, помогли:
- У меня есть Docker-приложение, которое загружает контент в мою домашнюю директорию (это казалось неважным в тот момент).
- После выполнения совета @sourcejedi мой
umask
был изменен на0002
. - Следуя совету @Isaac, я смог создавать/копировать/перемещать файлы, а также директории из своей домашней директории в
/samba/public/
, и пользователи-гости Samba могли свободно переименовывать/редактировать/удалять.
-
Тем не менее, когда я пытался скопировать/переместить что-либо в своей домашней директории, что было загружено с помощью этого Docker-приложения, пользователи-гости Samba не могли свободно переименовывать/редактировать/удалять (потому что Docker-приложение создавало директории с chmod значением 755).
-
Я затем изменил
umask
Docker-приложения на 0002. Последующие загрузки и созданные директории этим Docker-приложением имели chmod значение 775. Когда эти директории копировались в/samba/public/
, пользователи-гости Samba теперь могут переименовывать/редактировать/удалять.
Примечания:
-
Смена umask на значение по вашему выбору проста, просто выполните
umask XXXX
, где XXXX — это желаемое значение. Вы можете проверить значение вашего umask, просто введяumask
в терминале. -
Смена umask Docker-приложения, которое я использовал, была выполнена добавлением нового параметра ENV с названием
umask
и его установкой на0002
. При запуске контейнера Docker вы можете передать этот параметр через CLI или, если вы используете Portainer для управления вашими работающими контейнерами, вы можете передать этот ENV параметр через веб-интерфейс. -
Основное предостережение: В рамках того, чтобы все это работало, я сначала попытался следовать советам из темы по настройке прав доступа к общим папкам, а также попытался использовать шаблон Личных частных групп (UPG), который рекомендовал @sourcejedi, прежде чем следовать советам @Isaac.
Если кто-то в будущем столкнется с подобными проблемами, это может быть актуально?
Добро пожаловать в U&L! Вам, возможно, не нужно, чтобы файлы становились nobody:nogroup 0777. Мне очень жаль, но шаблон, который вы хотели, был сломан Gnome/systemd (и udisks). По крайней мере, если Алиса использует их на том же компьютере, который запускает сервер Samba.
Это обсуждается (не очень четко) в вопросах Общий, с чтением и записью, фотокаталог для обычных пользователей и Общий каталог/файлы между несколькими пользователями на диске ext4
Если Алиса не использует Gnome (включая файловый менеджер Gnome), и не udisks (чтобы позволить пользователям монтировать сменные файловые системы) на том же компьютере, который запускает сервер Samba, тогда вы реально можете использовать оригинальный шаблон Личных частных групп.
Насколько я помню, системы 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
.
В противном случае, возможно, кто-то сможет предложить обходное решение на основе этой информации.
Я могу предложить одну альтернативу, основываясь на теме Настройка прав доступа к общей папке
Похоже, вы хотите, чтобы пользователи-гости могли удалять и редактировать эти файлы… это предполагает, что они могут быть не очень большими файлами.
Согласно информации, которую вы предоставили, кажется, что Алиса может действовать как гость сама, используя общедоступный ресурс Samba для загрузки файлов. …вам просто нужно избежать того, чтобы сообщить Алисе, где находится директория Samba на сервере. И если она достаточно умна, чтобы найти ее, она достаточно умна, чтобы ей сказали, что компьютеры были ошибкой, и ее совершенно логичная идея не сработает по причинам.
(Если вам это абсолютно нужно, вы можете “скрыть” сервер Samba, запустив его внутри контейнера, такого как LXC.)
В случае, если у Алисы есть учетная запись на сервере Samba, которая не является гостевой, может также потребоваться использовать chmod g+s
на директории, и в smb.conf
установить
create mask = 0775
directory mask = 0775
Ответ или решение
Для того чтобы гарантировать, что будущие операции копирования/перемещения файлов из домашней папки пользователя Алисы в общую папку Samba (/samba/public) будут происходить с владельцем nobody:nogroup и правами доступа 0777, необходимо выполнить несколько шагов, исходя из предоставленной вами информации о текущих настройках.
Шаг 1: Установка umask
Чтобы новые файлы и директории, создаваемые в общедоступной папке, имели нужные права доступа, необходимо настроить значение umask. В данном случае рекомендуется установить значение umask на 0002. Это позволит новым файлам иметь разрешения 775 (директории) и 664 (обычные файлы), что обеспечит необходимый доступ для гостей.
Для изменения umask, выполните следующую команду в терминале:
umask 0002
Чтобы сделать это изменение постоянным для пользователя Алисы, можно добавить строку с командой umask в файл ~/.bashrc
или ~/.profile
.
Шаг 2: Настройка Samba
Если вы управляете настройками Samba, также необходимо обновить конфигурацию Samba для создания новых файлов с нужными правами по умолчанию. Откройте файл конфигурации Samba, который обычно находится в /etc/samba/smb.conf
, и добавьте или измените следующие параметры в разделе, соответствующем вашему общему ресурсу:
[public]
path = /samba/public
writable = yes
guest ok = yes
create mask = 0777
directory mask = 0777
force user = nobody
force group = nogroup
Эти настройки заставят Samba применять указанные права доступа ко всем новосозданным файлам и директориям, а также гарантируют, что все они будут иметь владельца nobody и группу nogroup.
Шаг 3: Изменение umask для Docker
Поскольку вы также используете Docker для загрузки файлов, вам нужно убедиться, что umask для вашего Docker-контейнера также установлен на 0002. Это можно сделать, добавив переменную окружения UMASK
в ваш Docker-контейнер. Вот пример команды, чтобы запустить контейнер с нужным значением umask:
docker run -e UMASK=0002 your-docker-image
Шаг 4: Перенос существующих файлов
Если в каталоге /samba/public/
уже существуют файлы, чьи разрешения нужно изменить, выполните следующую команду для установки правильных прав доступа:
chmod -R g+w /samba/public/*
Заключение
После выполнения этих шагов новые файлы и директории, перемещенные или скопированные в папку /samba/public
, будут иметь правильного владельца и необходимые права доступа для редактирования и удаления гостевыми пользователями. Однако важно помнить, что при работе с правами доступа всегда стоит быть внимательным к безопасности и возможным последствиям, особенно в общедоступных папках.
Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.