Как создать общий ресурс Samba, доступный для записи из Windows без разрешений 777?


33

У меня есть путь на компьютере с Linux (Debian 8), которым я хочу поделиться с Samba 4 на компьютерах с Windows (Win7 и 8 в домене). По моему smb.confя сделал следующее:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
guest ok = yes
public = yes

У меня есть отличный доступ для чтения из Windows. Но для того, чтобы иметь доступ для записи, мне нужно сделать chmod -R 777 /path/to/share, чтобы иметь возможность записи в него из Windows.

Я хочу получить доступ на запись из Windows после того, как предоставлю учетные данные Linux владельца Linux /path/to/share.

Я уже попробовал:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes

Затем Windows запрашивает учетные данные, но независимо от того, что я ввожу, это всегда отрицается.

Как правильно получить доступ на запись к общим ресурсам Samba с компьютера домена Windows без предоставления 777?

Ответы:


49

Я рекомендую создать выделенного пользователя для этого ресурса и указать его в force user(см. Документы) .

Создайте пользователя ( shareuserнапример) и установите для него владельца всего в папке общего доступа:

adduser --system shareuser
chown -R shareuser /path/to/share

Затем добавьте force userи настройте маску разрешений в smb.conf:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
public = yes
create mask = 0644
directory mask = 0755
force user = shareuser

Обратите внимание, что guest okэто синоним для public.


1
У меня была похожая проблема, и все поиски в Google показали грязный способ просто использовать 777. Я хотел 775 для моей общей папки, и я хотел, чтобы файлы создавались с помощью моего linux "defaultUser", я также использовал public = yes. Папка была 775, создать и dir маска была 775, но в Windows это не было доступно для записи, и я не мог понять почему. Добавление force user = defaultUserсделало работу за меня.
firepol

Я не могу заставить это работать, каждый раз, когда я пытаюсь поделиться каталогом, я просто получаю окно, сообщающее мне, что мне нужно дать «другим» разрешение на запись для того, чтобы поделиться каталогом.
Марк Крамер

Я понял, проблема была в расположении smb.conf. Google и даже документация sambas говорят, что файл должен быть в, /usr/local/samba/libно на самом деле он находится/etc/samba
Марк Крамер

1
@MarkKramer Рекомендуется следовать документам, включенным в ваш конкретный дистрибутив Linux, потому что многие дистрибутивы реорганизуют файлы в соответствии с FHS (Стандартом иерархии файловой системы) Linux Foundation. Я рекомендую читать и искать документы, поставляемые с вашим дистрибутивом, потому что Google не всегда лучший ответ, например, вы можете получить информацию для другой версии программного обеспечения. С уважением.
RobertL

2

В настройках общего ресурса smb.confвам необходимо указать имена пользователей и / или групп, которым разрешено писать в общий ресурс, используя write list = ...строку.

Пример:

[myshare]
...
write list = my_linux_username

Затем вам нужно будет использовать smbpasswdкоманду для установки пароля для аутентификации my_linux_usernameдля Samba:

sudo smbpasswd -a my_linux_username

Этот шаг необходим, потому что стандартные системные пароли в нем /etc/shadowхэшируются в алгоритмах, которые несовместимы с алгоритмами хэширования паролей, используемыми в протоколе SMB. Когда клиент отправляет пакет аутентификации SMB, он включает хешированный пароль. Его можно сравнить только с другим хэшем пароля, который использует тот же алгоритм.

(Очень, очень старые инструкции предыдущего тысячелетия могут рекомендовать отключить шифрование паролей в Samba и использовать определенные взломы реестра, чтобы позволить Windows отправлять незашифрованные пароли в сеть. Этот совет устарел : эти взломы реестра могут больше не работать в текущих версиях Windows, и позволить любому, кто может контролировать ваш сетевой трафик, тривиально захватить ваш пароль.)


Есть еще одна вещь, которую вы можете сделать на стороне клиента. Когда ваша клиентская система Windows присоединена к домену Active Directory и вы вошли в систему с учетной записью AD, она автоматически префиксирует все неквалифицированные имена пользователей с именем домена AD пользователя, т.е. вы будете аутентифицироваться как AD_DOMAIN\your_username, а не только your_username.

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

Чтобы успешно войти на автономный сервер Samba с автономного клиента Windows, вам может потребоваться указать ваше имя пользователя как SAMBA_SERVER_HOSTNAME\your_username.

В противном случае Samba увидит имя пользователя как WINDOWS_CLIENT_HOSTNAME\your_username, придет к выводу, что у него нет возможности проверить пользователей, принадлежащих к указанному домену WINDOWS_CLIENT_HOSTNAME, и отклонит вход в систему.

(Более новые версии Samba могут иметь встроенную проверку для этой конкретной ситуации, и, тем не менее, они могут разрешить вам доступ. Но это в основном то, как аутентификация SMB работает «под капотом», и если вам нужно иметь дело со старыми версиями Samba , это может быть полезно еще.)


1

Я искал это, потому что я спешил и даже не имел времени сосредоточиться на создании пользователей и так ...

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

[mymfolder]
path = /mymfolder
writeable = yes
browseable = yes
public = yes
create mask = 0777
directory mask = 0777
force user = root 

И если вы идете по этому пути, вы можете ограничить хост, используя опцию «hosts allow». См. Samba.org/samba/docs/server_security.html
ctorx
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.