Wie erstelle ich eine Samba-Freigabe, die unter Windows ohne 777-Berechtigungen beschreibbar ist?


33

Ich habe einen Pfad auf einem Linux-Rechner (Debian 8), den ich mit Samba 4 auf Windows-Computern (Win7 und 8 in einer Domäne) teilen möchte. In meinem habe smb.confich folgendes gemacht:

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

Ich habe perfekten Lesezugriff von Windows. Um jedoch Schreibzugriff zu haben, muss ich dies tun chmod -R 777 /path/to/share, um von Windows aus darauf schreiben zu können.

Ich möchte Schreibzugriff von Windows, nachdem ich die Linux-Anmeldeinformationen des Linux-Besitzers von bereitgestellt habe /path/to/share.

Ich habe es schon versucht:

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

Dann fragt Windows nach Anmeldeinformationen, aber egal was ich eingebe, es wird immer verweigert.

Was ist der richtige Weg, um von einem Windows-Domänencomputer aus Schreibzugriff auf Samba-Freigaben zu erhalten, ohne 777 zu gewähren?

Antworten:


49

Ich empfehle, einen dedizierten Benutzer für diese Freigabe zu erstellen und in anzugeben force user(siehe Dokumentation) .

Erstellen Sie einen Benutzer ( shareuserzum Beispiel) und setzen Sie den Eigentümer aller im Freigabeordner enthaltenen Objekte auf diesen Benutzer:

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

Dann fügen Sie force userEinstellungen für die Berechtigungsmaske hinzu in smb.conf:

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

Beachten Sie, dass dies guest okein Synonym für ist public.


1
Ich hatte ein ähnliches Problem und alle Google-Suchanfragen zeigten die unsaubere Art, einfach 777 zu verwenden. Ich wollte 775 für meinen freigegebenen Ordner und ich wollte, dass Dateien mit meinem Linux- "defaultUser" erstellt werden. Ich habe auch public = yes verwendet. Der Ordner war 775, create und dir mask war 775, aber unter Windows war es nicht beschreibbar und ich konnte nicht herausfinden, warum. Das Hinzufügen force user = defaultUserhat den Job für mich erledigt.
Firepol

Ich kann dies nicht zum Laufen bringen, jedes Mal, wenn ich versuche, das Verzeichnis freizugeben, erhalte ich nur ein Fenster, in dem mir mitgeteilt wird, dass ich "anderen" die Schreibberechtigung erteilen muss, um das Verzeichnis freizugeben.
Mark Kramer

Ich habe es verstanden, das Problem war der Standort von smb.conf. Google und sogar die Sambas-Dokumentation sagten, dass die Datei auf sein sollte, /usr/local/samba/libaber tatsächlich ist es in/etc/samba
Mark Kramer

1
@ MarkKramer Es ist eine gute Idee, die in Ihrer spezifischen Linux-Distribution enthaltenen Dokumente zu befolgen, da viele Distributionen die Dateien neu organisieren, um sie dem FHS (Filesystem Hierarchy Standard) der Linux Foundation anzupassen. Ich empfehle, die mit Ihrer Distribution gelieferten Dokumente zu lesen und zu durchsuchen, da Google nicht immer die beste Antwort ist. Beispielsweise erhalten Sie möglicherweise Informationen zu einer anderen Version der Software. Freundliche Grüße.
RobertL

2

In den Freigabeeinstellungen in smb.confmüssen Sie die Namen der Benutzer und / oder Gruppen angeben, die in die Freigabe schreiben dürfen. Verwenden Sie dazu eine write list = ...Zeile.

Beispiel:

[myshare]
...
write list = my_linux_username

Dann müssen Sie den smbpasswdBefehl verwenden, um ein Kennwort für die Authentifizierung my_linux_usernamefür Samba einzurichten :

sudo smbpasswd -a my_linux_username

Dieser Schritt ist erforderlich, da die Standard-Systemkennwörter /etc/shadowin Algorithmen gehasht werden, die mit den im SMB-Protokoll verwendeten Kennwort-Hash-Algorithmen nicht kompatibel sind. Wenn ein Client ein SMB-Authentifizierungspaket sendet, enthält es ein gehashtes Kennwort. Es kann nur mit einem anderen Passwort-Hash verglichen werden, der denselben Algorithmus verwendet.

(Sehr, sehr alte Anweisungen aus dem vorigen Jahrtausend empfehlen möglicherweise, die Kennwortverschlüsselung in Samba zu deaktivieren und bestimmte Registrierungshacks zu verwenden, damit Windows unverschlüsselte Kennwörter an das Netzwerk senden kann. Dieser Hinweis ist veraltet : Diese Registrierungshacks funktionieren möglicherweise in aktuellen Versionen von nicht mehr Windows, und ermöglichen Sie jedem, der Ihren Netzwerkverkehr überwachen kann, die einfache Erfassung Ihres Kennworts.)


Es gibt noch eine Sache, die Sie möglicherweise clientseitig erledigen müssen. Wenn Ihr Windows-Clientsystem einer Active Directory-Domäne angehört und Sie mit einem AD-Konto angemeldet sind, wird allen nicht qualifizierten Benutzernamen automatisch der Name der AD-Domäne des Benutzers vorangestellt, dh, Sie authentifizieren sich AD_DOMAIN\your_usernamenicht nur als your_username.

Wenn Sie mit einem lokalen Konto angemeldet sind (oder Ihr Clientsystem keiner AD-Domäne angehört), wird dem Benutzernamen möglicherweise automatisch der Hostname des Clients vorangestellt, es sei denn, Sie geben einen anderen Domänennamen an.

Um sich von einem eigenständigen Windows-Client aus erfolgreich bei einem eigenständigen Samba-Server anzumelden, müssen Sie möglicherweise Ihren Benutzernamen als angeben SAMBA_SERVER_HOSTNAME\your_username.

Andernfalls wird Samba den Benutzernamen als sehen WINDOWS_CLIENT_HOSTNAME\your_username, daraus schließen, dass es keine Möglichkeit gibt, Benutzer zu überprüfen, die zu der genannten Domain gehören WINDOWS_CLIENT_HOSTNAME, und die Anmeldung ablehnen.

(Neuere Versionen von Samba verfügen möglicherweise über eine integrierte Prüfung für diese spezielle Situation und ermöglichen Ihnen möglicherweise trotzdem den Zugriff. Aber im Grunde funktioniert die SMB-Authentifizierung "unter der Haube" und wenn Sie mit alten Versionen von Samba umgehen müssen , es könnte noch nützlich sein.)


1

Ich habe danach gesucht, weil ich es eilig hatte und nicht einmal Zeit hatte, mich auf das Erstellen von Benutzern zu konzentrieren und so ...

Ich musste nur so schnell wie möglich die Daten einer Debian 9-Maschine herausnehmen, und das war der schnellste Weg, den ich mir vorgestellt habe. Wenn Sie das Überspringen von Befehlen vermeiden möchten, können Sie dies auch tun, aber es wird offensichtlich nicht empfohlen, es sei denn, Sie befinden sich in einer Eile .

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

Und wenn Sie diesen Weg gehen, können Sie mit der Option "hosts allow" nach Host einschränken. Siehe: samba.org/samba/docs/server_security.html
ctorx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.