# Linux-Linux | samba/cifs | Problem mit Dateirechten?



## D3LU (4. September 2017)

Hallo,

ich habe versucht einen SMB-Share auf meinem Raspberry Pi 2B einzurichten.
Ich habe aber Probleme mit den Userrechten.

Auf Raspberry Pi: (raspbian)

adduser --no-create-home --disabled-login --shell /bin/false shareuser
passwd shareuser
smbpasswd -a shareuser
(habe beide male das gleiche pw gesetzt)

smb.conf: (habe mich an Samba Freigabe mit Authentifizierung – Thomas-Krenn-Wiki orientiert)

[global]
workgroup = smb
security = user
map to guest = never

[share]
valid users = shareuser
path = /media/sharedfolder/
public = no
writable = yes
comment = pishare
printable = no
guest ok = no

Unter Windows Netzlaufwerk hinzufügen mit den Daten funktioniert. Ich kann dann Dateien nach belieben anschauen, erstellen, ändern und löschen.

Auf meinem Laptop mit Linux als root dann:
mount -t cifs //raspberrypi.fritz.box/share /media/remote -o user=shareuser,password=testpw

Hier ist das Ergebnis aber, dass ich zwar Dateien anschauen bzw. öffnen kann und Dateien auch erstellen kann. Ich kann aber keine Dateien ändern(auch gerade unter Linux erstellte Dateien nicht).

Ich vermute, dass das Problem ist, dass ich auf meinem Laptop als Username nox (unter Windows ist es auch ein anderer User aber Windows ignoriert angeblich Dateirechte ohnehin?) verwende. Und die Dateien im Share wenn ich im Terminal ls -la eingebe 1001:1001 gehören.
Schaue ich das ganze auf dem Raspi im Terminal an dann gehören die Dateien shareuser:shareuser...

Jetzt ist mein Problem, dass ich nicht auf irgendwelche guest accounts bzw public share oder so ausweichen möchte sondern, dass nur die Personen, die die Zugangsdaten haben auf den share zugreifen dürfen sollen(öffnen ändern löschen erstellen) aber egal wie sie ihre lokalen User auf den jew. Systemen genannt haben .

Gibt es eine Möglichkeit, das gewünschte umzusetzen? 

Vielen Dank im Voraus
Grüße
D3LU


----------



## Dragonix (5. September 2017)

Hi,

Dazu:


> Hier ist das Ergebnis aber, dass ich zwar Dateien anschauen bzw. öffnen kann und Dateien auch erstellen kann. Ich kann aber keine Dateien ändern(auch gerade unter Linux erstellte Dateien nicht).




also laut [1] werden diese CIFS-UNIX Erweiterungen (u.a. für Dateirechte) bei Linux Server und Linux Client automatisch aktiviert. Damit kenne ich mich aber nicht aus (wie auch mit dem Rest, der noch folgt - ich bieg das immer nur für Einbenutzersysteme hin, keine Ahnung in wie weit da was kaputt gehen kann ).

Du musst, zumindest wenn man dieses ganze CIFS-Berechtigungszeug nicht nutzt, streng zwischen den Benutzern auf den Systemen unterscheiden: Ich hab das so verstanden: Wenn du auf eine gemountete Freigabe schreiben willst: Dann...

braucht der lokale Nutzer (Client) in dem Ordner, in dem die Freigabe eingehängt ist, Schreibrechte (wenn Nutzer "nox" in Ordner "netzlaufwerk", in dem die Freigabe gemountet ist, nicht schreiben darf, dann wars das).
braucht der Sambanutzer, mittels dem die Freigabe eingehängt ist, auf  die Freigabe Schreibrechte (valid users, writable, -o user=...)
braucht der lokale Nutzer, der dem entsprechenden Sambanutzer zugeordnet ist, auf dem Server auf der Dateisystemebene Schreibrechte.
Wenn ich das richtig sehe, kracht das bei dir bei 1.

Bei mir ist es so, dass wenn ich eine CIFS Freigabe mounte, die Dateien/Ordner immer dem Nutzer gehören, der das mounten veranlasst hat (so stehts auch in [1]). Typischerweise mountet root, dann kann auch nur root Dateien anlegen/verändern (zumindest wenn mans nicht mit file_mode/dir_mode ändert, siehe unten).

Da ich nur Ein-Benutzer-Systeme habe, bügel ich dann einfach bei den Mountoptionen ein uid=NUTZER bzw. gid=GRUPPE drüber (bei dir dann wohl uid=nox, wenn ich das richtig sehe):


			
				man mount.cifs schrieb:
			
		

> uid=arg           sets the uid that will own all files or directories on the mounted
> filesystem when the server does not provide ownership information.
> It may be specified as either a username or a numeric uid. When not
> specified, the default is uid 0. The mount.cifs helper must be at
> ...


Dann gehören die Dateien in der gemounteten Freigabe nicht mehr root (Achtung! Lokal, hat nichts mit dem zu tun, wies auf dem Server ausschaut!) sondern dem Nutzer, den du bei uid angegeben hast.

Alternativ oder zusätzlich solltest du dir auch noch die Optionen file_mode/dir_mode anschauen, dazu steht auch was in [1]: Salopp gesagt kannst du mit den Optionen die Rechte einstellen, die lokale Nutzer auf die Freigabe haben (standardmäßig hat eben nur der Eigentümer Schreibrechte, hier kannst du das so ändern, dass jeder schreiben darf).

Wenns nicht unbedingt Samba sein muss, würde ich dir empfehlen, Dateien mittels SSH auszutauschen...

Was ähnliches steht in [2].

Sorry wenn das recht konfus war, der Tag war irgendwie recht anstrengend. Aber ich hoffe ich hab die richtigen Hinweise zur weiteren Recherche geliefert . Evtl die CIFS Extensions mal explizit deaktivieren?

[1] Samba Client cifs › Wiki › ubuntuusers.de
[2] [SOLVED] Mounting CIFS share with specific permissions

Dazu:


> Jetzt ist mein Problem, dass ich nicht auf irgendwelche guest accounts bzw public share oder so ausweichen möchte sondern, dass nur die Personen, die die Zugangsdaten haben auf den share zugreifen dürfen sollen(öffnen ändern löschen erstellen) aber egal wie sie ihre lokalen User auf den jew. Systemen genannt haben .



Das verstehe ich jetzt gerade nicht. Sitzen an deinem Linux Client mehrere User? Wie der lokale Benutzer heißt ist weitestgehend egal, wichtig ist ja, wie der Sambanutzer, über den die Freigabe eingehängt ist, heißt - den gibst du ja aber explizit an. Ausnahme natürlich evtl, wenn diese CIFS Extensions reinfahren...

Grüße
Matthias


----------



## D3LU (5. September 2017)

Hi



Dragonix schrieb:


> Hi,
> 
> Dazu:
> _Hier ist das Ergebnis aber, dass ich zwar Dateien anschauen bzw. öffnen kann und Dateien auch erstellen kann. Ich kann aber keine Dateien ändern(auch gerade unter Linux erstellte Dateien nicht)._
> ...


 
Habe auf dem Raspberry den Ordner der freigegeben wird mit chmod 777 versehen.
Das kommt durch bis zu /media/remote.
In /media ein ls –la zeigt drwxrwxrwx+ für remote. Und ich kann mit nox da Dateien und Ordner erstellen, diese gehören aber dann sofort nichtmehr nox sondern 1001:1001(das ist wahrscheinlich die Id und Gruppe von shareuser auf dem Pi, das ist aber auf dem Laptop nicht vorhanden) und sind mit folgenden Rechten Dateien rw-r—r—und Ordner rwxr-xr-x.



Dragonix schrieb:


> 2.    braucht der Sambanutzer, mittels dem die Freigabe eingehängt ist, auf die Freigabe Schreibrechte (valid users, writable, -o user=...)


 
Der Sambauser darf wohl so wie es aussieht, da jede Datei die in der Freigabe erstellt wird dem (shareuser, auf pi) gehört



Dragonix schrieb:


> 3.    braucht der lokale Nutzer, der dem entsprechenden Sambanutzer zugeordnet ist, auf dem Server auf der Dateisystemebene Schreibrechte.


 
Das ist in dem Fall ja dann nox. Der hat keine. Der ist auf dem Pi ja in der Form nicht als Nutzer vorhanden.



Dragonix schrieb:


> Wenn ich das richtig sehe, kracht das bei dir bei 1.
> 
> Bei mir ist es so, dass wenn ich eine CIFS Freigabe mounte, die Dateien/Ordner immer dem Nutzer gehören, der das mounten veranlasst hat (so stehts auch in [1]). Typischerweise mountet root, dann kann auch nur root Dateien anlegen/verändern (zumindest wenn mans nicht mit file_mode/dir_mode ändert, siehe unten).


 
Ich verstehe das nicht ganz. Für root ist doch egal was die Datei für Rechte hat, der kann doch auch eine Datei die einem User gehört und theoretisch nur lesbar für alle ist, zum Beispiel so eine r--r--r—, ändern?



Dragonix schrieb:


> Da ich nur Ein-Benutzer-Systeme habe, bügel ich dann einfach bei den Mountoptionen ein uid=NUTZER bzw. gid=GRUPPE drüber (bei dir dann wohl uid=nox, wenn ich das richtig sehe):
> Zitat von *man mount.cifs*
> _uid=arg sets the uid that will own all files or directories on the mounted
> filesystem when the server does not provide ownership information.
> ...


 
Das muss ich bei erster Gelegenheit noch mal ganz genau anschauen. 

Wie wäre dann die korrekte Syntax für den mount Befehl?
mount -t cifs //raspberrypi.fritz.box/share /media/remote -o user=shareuser,password=testpw

Vlt hatte ich nen Fehler gemacht. Ich hatte aber bei meinen zahlreichen Versuchen auch schon testweise mount aufrufe gehabt mit uid und gid. (Ich habe aber auch auf dem Server mit usermapfile u.ä. sowie in der smb.conf Dinge wie create mask = 0666directory mask = 0777 probiert. Nicht dass dann etwas eigentlich funktionierendes nicht ging, da sich genau in dem Moment dann zwei „Dinge“ aufgehoben haben^^)

Das Ziel wäre halt, dass der Pi bzw Samba versteht, „ohh es wird mit shareuser und dessen passwort zugegriffen“ also ist es richtig, dass die Dateien shareuser gehören(auf dem pi) und der ändern darf(scheint aber so schon zu passen denn die Dateien sind auf dem Pi shareuser shareuser rw-r—r--). Im gleichen Zuge muss der Laptop verstehen ohh das ist ein share und ich greife auf diesen mit Zugangsdaten zu(also in dem moment möchte nicht nox sondern shareuser etwas machen). Das ist wahrscheinlich der Knackpunkt, denn wenn ich dann in den share schaue, dann sieht es ähnlich wie auf dem Raspberry aus die Dateien sind auch hier rw-r—r— nur ist es 1001:1001 bei user:gruppe… nox und 1001 sind aber offensichtlich nicht gleich bzw. müsste man hier noch eine Verbindung haben…
Ich weiß nicht wie ich das korrekter oder deutlicher ausdrücken könnte. Evtl. ist das gewünschte auch gar nicht möglich?



Dragonix schrieb:


> Alternativ oder zusätzlich solltest du dir auch noch die Optionen file_mode/dir_mode anschauen, dazu steht auch was in [1]: Salopp gesagt kannst du mit den Optionen die Rechte einstellen, die lokale Nutzer auf die Freigabe haben (standardmäßig hat eben nur der Eigentümer Schreibrechte, hier kannst du das so ändern, dass jeder schreiben darf).
> 
> Ok. Wobei auf der Seite war ich leider auch schon.
> 
> Wenns nicht unbedingt Samba sein muss, würde ich dir empfehlen, Dateien mittels SSH auszutauschen...


 
Damit hatte ich auch schon rumgespielt. Bzw. also wenn du das meinst: sshfs › FUSE › Wiki › ubuntuusers.de ?
Wäre aber unter Windows nicht so ohne weiteres nutzbar hier müsste man dann wohl WinSCP Portable verwenden?



Dragonix schrieb:


> Was ähnliches steht in [2].
> 
> Sorry wenn das recht konfus war, der Tag war irgendwie recht anstrengend. Aber ich hoffe ich hab die richtigen Hinweise zur weiteren Recherche geliefert. Evtl die CIFS Extensions mal explizit deaktivieren?


 
Danke, dass Du Dir dann trotzdem die Zeit genommen hast mir zu antworten.



Dragonix schrieb:


> [1] Samba Client cifs › Wiki › ubuntuusers.de
> [2] [SOLVED] Mounting CIFS share with specific permissions
> 
> Dazu:
> ...


 
Das habe ich wohl in der Tat etwas verwirrend formuliert. Nein an meinem Laptop gibt es nur nox als User (und halt root via su). Es ist eher so gemeint, dass wenn ich jetzt den Sambauser auf dem Pi auch nox nenne dann geht es vielleicht mit dem Laptop den ich verwende..? (habe das nicht getestet, da es eigentlich unlogisch erschien und ja dann trotzdem das Problem weiterhin besteht…) Denn angenommen jetzt kommt jemand auch mit Linux zu Besuch, ist im richtigen Netzwerk und ich sage ihm „schreibe irgendwas in die Datei auf dem share, hier hast adresse, user und pw“ und hat zum Beispiel „zwei“ als lokalen User. dann würde der doch vor demselben Problem stehen welches ich jetzt habe, denn nox != zwei wie jetzt shareuser != nox?


Vielen Dank.
Grüße
D3LU


----------



## Dragonix (5. September 2017)

Hi,


> Das ist in dem Fall ja dann nox. Der hat keine. Der ist auf dem Pi ja in der Form nicht als Nutzer vorhanden.



Nein, zumindest ohne diese CIFS Extensions ist das nicht nox - dein Server kennt nox nicht. Hier braucht shareuser die Rechte - meine ich. Und auch mit CIFS Extensions, meine ich, kennt dein Server nox nicht, bzw. bekommt ihn niemals zu sehen; ich meine, die komplette Kommunikation läuft über deinen shareuser.




> Ich verstehe das nicht ganz. Für root ist doch egal was die Datei für Rechte hat, der kann doch auch eine Datei die einem User gehört und theoretisch nur lesbar für alle ist, zum Beispiel so eine r--r--r—, ändern?



Das heißt root auf dem Client kann die Dateien auch nicht verändern? Das würde ich dann glaube ich gerade nicht verstehen.



> Vlt hatte ich nen Fehler gemacht. Ich hatte aber bei meinen zahlreichen Versuchen auch schon testweise mount aufrufe gehabt mit uid und gid. (Ich habe aber auch auf dem Server mit usermapfile u.ä. sowie in der smb.conf Dinge wie create mask = 0666directory mask = 0777 probiert. Nicht dass dann etwas eigentlich funktionierendes nicht ging, da sich genau in dem Moment dann zwei „Dinge“ aufgehoben haben^^)
> 
> Das Ziel wäre halt, dass der Pi bzw Samba versteht, „ohh es wird mit shareuser und dessen passwort zugegriffen“ also ist es richtig, dass die Dateien shareuser gehören(auf dem pi) und der ändern darf(scheint aber so schon zu passen denn die Dateien sind auf dem Pi shareuser shareuser rw-r—r--). Im gleichen Zuge muss der Laptop verstehen ohh das ist ein share und ich greife auf diesen mit Zugangsdaten zu(also in dem moment möchte nicht nox sondern shareuser etwas machen). Das ist wahrscheinlich der Knackpunkt, denn wenn ich dann in den share schaue, dann sieht es ähnlich wie auf dem Raspberry aus die Dateien sind auch hier rw-r—r— nur ist es 1001:1001 bei user:gruppe… nox und 1001 sind aber offensichtlich nicht gleich bzw. müsste man hier noch eine Verbindung haben…
> Ich weiß nicht wie ich das korrekter oder deutlicher ausdrücken könnte. Evtl. ist das gewünschte auch gar nicht möglich?


Doch, das sollte gehen, sowas hab ich hier analog, allerdings ohne Passwort.
Diese uid 1001 ist für mich ein Hinweis, dass dir die CIFS Extensions dazwischen funken. Dein Server sagt, die Dateien gehören User 1001, dein Client kennt aber keinen Nutzer mit dieser uid, also wird anstelle eines Namens die Nummer angezeigt.

Vorschlag: Mach mal das mit dem usermapfile rückgängig (kenne ich nur vorm hören, glaub ich). Dann deaktiviere mal die CIFS Extensions. Und dann mounte mal mit uid=nox.
Also

```
mount -t cifs //raspberrypi.fritz.box/share /media/remote -o user=shareuser,password=testpw,uid=nox
```
(ja, hinter uid darf ein Nutzer stehen, der bekommt die Auflösung hin.)
Und dann zeig mal ein ls -l von /media/remote.

Die Nobellösung wäre es wohl, auf jedem Rechner die gleichen Nutzer zu haben (gleiche uid! Achtung! Namen sind egal, gleiche uid!), und auch die Samba Nutzerverwaltung darüber laufen zu lassen. Ist aber nur ne Vermutung meinerseits.



> Damit hatte ich auch schon rumgespielt. Bzw. also wenn du das meinst: sshfs › FUSE › Wiki › ubuntuusers.de ?
> Wäre aber unter Windows nicht so ohne weiteres nutzbar hier müsste man dann wohl WinSCP Portable verwenden?


Ja, unter Windows bräuchtest du dann WinSCP Portable. Aber zwischen Linux und Linux tuts dann ein einfaches scp/... ohne das ganze Samba Gefrickel...



> Das habe ich wohl in der Tat etwas verwirrend formuliert. Nein an meinem Laptop gibt es nur nox als User (und halt root via su). Es ist eher so gemeint, dass wenn ich jetzt den Sambauser auf dem Pi auch nox nenne dann geht es vielleicht mit dem Laptop den ich verwende..? (habe das nicht getestet, da es eigentlich unlogisch erschien und ja dann trotzdem das Problem weiterhin besteht…) Denn angenommen jetzt kommt jemand auch mit Linux zu Besuch, ist im richtigen Netzwerk und ich sage ihm „schreibe irgendwas in die Datei auf dem share, hier hast adresse, user und pw“ und hat zum Beispiel „zwei“ als lokalen User. dann würde der doch vor demselben Problem stehen welches ich jetzt habe, denn nox != zwei wie jetzt shareuser != nox?


Wie du die Benutzer nennst ist egal, wichtig bei sowas ist, dass die userids (uid) gleich sind. Welche uid der aktuelle Nutzer hat, zeigt dir "id". Oder in der /etc/passwd nachschauen. Rest ergibt sich hoffentlich, wenn das oben klappt :-/.


----------



## D3LU (5. September 2017)

Hi,


Dragonix schrieb:


> Das heißt root auf dem Client kann die Dateien auch nicht verändern? Das würde ich dann glaube ich gerade nicht verstehen.


Doch der konnte schon, aber dann hätte ich ja u.U. mein Filemanager oder Editor usw immer als root starten müssen, wenn ich was von share nutzen will.



Dragonix schrieb:


> Diese uid 1001 ist für mich ein Hinweis, dass dir die CIFS Extensions dazwischen funken. Dein Server sagt, die Dateien gehören User 1001, dein Client kennt aber keinen Nutzer mit dieser uid, also wird anstelle eines Namens die Nummer angezeigt.


Vielen Dank. Du hast Recht, das muss es gewesen sein. Jetzt geht es.



Dragonix schrieb:


> Vorschlag: Mach mal das mit dem usermapfile rückgängig (kenne ich nur vorm hören, glaub ich). Dann deaktiviere mal die CIFS Extensions. Und dann mounte mal mit uid=nox.
> Also
> 
> ```
> ...


Habe jetzt mit:
mount -t cifs //raspberrypi/share /media/remote -o user=smbpi,password=testpw,uid=1000,gid=1000,file_mode=0600,dir_mode=0700



			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.
        




Dragonix schrieb:


> Die Nobellösung wäre es wohl, auf jedem Rechner die gleichen Nutzer zu haben (gleiche uid! Achtung! Namen sind egal, gleiche uid!), und auch die Samba Nutzerverwaltung darüber laufen zu lassen. Ist aber nur ne Vermutung meinerseits.


Das hätte auch was aber das ist zuviel des guten. Vlt aber trotzdem mal in Erinnerung behalten.^^


Dragonix schrieb:


> Welche uid der aktuelle Nutzer hat, zeigt dir "id".


Das ist interessant. -> uid=1000(nox) gid=1000(nox) Gruppen=1000(nox),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev),114(bluetooth)
 Auch dafür Danke. 

Grüße
D3LU


----------

