Вопрос или проблема
Samba настроен на использование пользователя ‘torrent’ и группы ‘users’ для доступа гостей. Я не могу изменить директорию и ее содержимое, если у них нет прав g+w.
Я хотел бы, чтобы эта директория была доступна для записи без прав g+w.
Что я упускаю?
Мой smb.conf
:
[global]
security = user
map to guest = bad user
guest account = torrent
[WDC_1T]
comment = -- WDC 1TB --
path = /mnt/WDC_1T
read only = no
writeable = yes
guest only = yes
guest ok = yes
force user = torrent
force group = users
guest account = torrent
create mask = 0644
force create mode = 0644
directory mask = 0755
force directory mode = 0755
Создал директорию через samba, всё работает как и должно:
ls -ld _TEST_OK_/
drwxrwxr-x 2 torrent users 4096 02-27 15:42 _TEST_OK_/
Создал директорию в Linux, те же права, кроме того, что группа не имеет прав на запись -> нет доступа на запись:
ls -ld _TEST_PERMISSION_ERROR_/
drwxr-xr-x 2 torrent users 4096 02-27 15:40 _TEST_PERMISSION_ERROR_/
ls -lR _TEST_PERMISSION_ERROR_/
-rw-rw-r-- 1 torrent users 0 02-27 15:40 plik1.txt
Я столкнулся с той же проблемой, используя “force user = nobody” и “force group = nobody” на Fedora (UID 65534).
В итоге создал другого пользователя “netshare” (UID 65533) и использовал его в качестве аккаунта гостя Samba, а также “force user = netshare” и “force group = netshare”.
После этого создание файлов в директории работало без установленного бита группы +w. Это очень странно, но это работает! Должно быть, это связано с тем, как Samba обрабатывает определенные аккаунты.
Ответ или решение
Для решения вашей проблемы с правами доступа в Samba 4, вам необходимо учитывать нюансы совместной работы Samba с учетными записями пользователей и групп. Как вы уже заметили, проблему можно решить, используя другую учетную запись, что связано с тем, как Samba обрабатывает учетные записи, которые не имеют достаточных прав.
Пошаговое решение
-
Создание нового пользователя:
Создайте нового пользователя для общего доступа, который будет иметь необходимые права. На примере вашего решения, вы можете создать пользователяnetshare
.sudo useradd -s /sbin/nologin netshare sudo passwd netshare
-
Настройка доступа к директории:
Убедитесь, что созданная директория, в которую вы хотите предоставлять доступ, имеет владельца и группу, соответствующими вашему новому пользователю.sudo chown netshare:users /mnt/WDC_1T
Установите маску прав доступа для директории:
sudo chmod 0775 /mnt/WDC_1T
-
Обновление конфигурации Samba:
Обновите ваш файлsmb.conf
, чтобы использовать нового пользователя и группу:[WDC_1T] comment = -- WDC 1TB -- path = /mnt/WDC_1T read only = no writeable = yes guest only = yes guest ok = yes force user = netshare force group = users create mask = 0644 force create mode = 0644 directory mask = 0755 force directory mode = 0755
-
Перезагрузка Samba:
После изменения конфигурации убедитесь, что вы перезапустили службу Samba для применения изменений:sudo systemctl restart smbd nmbd
-
Тестирование доступа:
Создайте директорию и файл в общей папке через Samba. Проверьте права доступа:smbclient //localhost/WDC_1T -U torrent mkdir _TEST_NEW_DIR_ touch _TEST_NEW_DIR_/testfile.txt ls -ld _TEST_NEW_DIR_/
Убедитесь, что права доступа к новым файлам и директориям созданы корректно, без необходимости установки группы на запись.
Объяснение
Проблема, с которой вы сталкиваетесь, связана с тем, что Samba обрабатывает определенные встроенные учетные записи (такие как nobody
) иначе, чем пользовательские учетные записи, и у них могут отсутствовать необходимые права для управления файлами и директориями. Использование переменной force user
позволяет вам избегать необходимости устанавливать биты на запись для группы, так как все файлы и директории будут созданы с правами нового пользователя, который имеет соответствующие разрешения.
Заключение
Таким образом, создание специального пользователя для работы с Samba может помочь избежать множества проблем с правами доступа, гарантируя, что создаваемые файлы и директории имеют правильные разрешения без необходимости изменять бит записи для группы.