Як створити папку 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 = так. Папка 775, маска створення та режиму dir була 775, але в Windows це не було записано, і я не міг отримати чому. Додавання force user = defaultUserзробило роботу для мене.
firepol

Я не можу змусити це працювати, коли я намагаюся поділитися каталогом, мені просто відкриється вікно, яке мені каже, що мені потрібно дати дозвіл на написання "іншим" для того, щоб поділитися каталогом.
Марк Крамер

Я зрозумів, проблемою було місце розташування smb.conf. Google і навіть документація на самбас сказали, що файл має бути, /usr/local/samba/libале насправді він є/etc/samba
Марк Крамер

1
@MarkKramer Це гарна ідея слідкувати за документами, що містяться у вашому конкретному дистрибутиві Linux, оскільки багато дистрибутивів переорганізовують файли, щоб вони відповідали FHS (Ієрархії стандартів файлової системи). Я рекомендую читати та шукати документи, що постачаються разом із вашим дистрибутивом, оскільки 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 

І якщо ви йдете цим маршрутом, ви можете обмежити хост, використовуючи опцію "хости дозволяють". Дивіться: samba.org/samba/docs/server_security.html
ctorx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.