Samba von der Befehlszeile als Nicht-Root mit Lese-/Schreibzugriff und ohne fstab mounten?

Samba von der Befehlszeile als Nicht-Root mit Lese-/Schreibzugriff und ohne fstab mounten?

Nun, ich dachte, das wäre einfacher, aber ich kann einfach nicht herausfinden, ob das, was ich will, machbar ist.

Ich möchte eine Netzwerk-Samba-Freigabe über die Befehlszeile in Ubuntu 20.04 (MATE) mounten – vorzugsweise ohne Änderungen an Dateien oder Speichern von Einstellungen irgendwo; nur eine Befehlszeile.

Also habe ich zuerst versucht:

sudo mount -t cifs -o user=MYSMBUSER //192.0.2.1/myshare /tmp/myshare

Das funktioniert hervorragend, da es Dateien mountet, auflistet und schreibgeschützten Zugriff auf Dateien bietet. Das Schreiben von Dateien ist jedoch nicht möglich (Zugriff verweigert).

Dies liegt offenbar an:

https://unix.stackexchange.com/questions/68079/mount-cifs-network-drive-write-permissions-and-chown

Sie mounten die CIFS-Freigabe als Root (weil Sie sudo verwendet haben), daher können Sie nicht als normaler Benutzer schreiben. Wenn Ihre Linux-Distribution und der Kernel aktuell genug sind, dass Sie die Netzwerkfreigabe als normaler Benutzer mounten können (aber in einem Ordner, der dem Benutzer gehört), verfügen Sie über die richtigen Anmeldeinformationen, um Dateien zu schreiben.

Ja, ich möchte „die Netzwerkfreigabe als normaler Benutzer mounten“, und das scheint eine Option zu sein – allerdings ist mein Benutzername unter Ubuntu nicht der Benutzername für Samba, also:

Alternativ können Sie die Benutzer- und Gruppen-ID angeben, die die bereitgestellte Netzwerkfreigabe verwenden soll. Dadurch kann der jeweilige Benutzer und ggf. die jeweilige Gruppe in die Freigabe schreiben. Fügen Sie Ihrer Bereitstellung die folgenden Optionen hinzu: ...


Erstes Problem: Wie kann man das oben genannte aushängen? Ich habe Folgendes gemacht:

$ sudo umount /tmp/myshare
$ 

... und da keine Fehler gemeldet werden, gehe ich davon aus, dass es ordnungsgemäß abgeschlossen wurde, aber dann versuche ich:

$ ls /tmp/myshare
file_from_share01.txt  file_from_share02.txt ...

... Dateien werden immer noch aufgelistet, also ist die Freigabe gemountet; es stellt sich heraus (überhttps://stackoverflow.com/questions/74626/wie-erzwingen-sie-eine-cifs-verbindung-zum-unmounten), um es auszuhängen, muss ich Folgendes tun:

$ sudo umount -a -t cifs -l

Hier ist der schwierige Teil – wenn ich mich als normaler Benutzer anmelden und dennoch einen SMB-Benutzernamen angeben möchte, muss ich denselben Befehl wie oben schreiben, jedoch ohne sudo:

$ mount -t cifs -o user=MYUSER //192.0.2.1/myshare /tmp/myshare
mount: only root can use "--options" option

Also, vielleichtkönntehabe dies ansonsten als Nicht-Root ausgeführt,WennIch musste die userOption nicht verwenden – tue es aber. Daher kann ich diesen Befehl nicht wirklich verwenden.

Ein Vorschlag, dies zu umgehen, besteht darin, Optionen in fstab anzugeben - über Mounten Sie den freigegebenen CIFS-Ordner ohne Sudo:

Um diesen Ordner als normaler Benutzer mounten zu können, müssen Sie die Mount-Optionen für den CIFS-Ordner in die Konfigurationsdatei /etc/fstab aufnehmen und die Optionen noauto,user,

Ichnichtmöchte dies tun, weil ich keine Aufzeichnungen der SMB-Anmeldeinformationen auf meinem Computer aufbewahren möchte – und wenn ich fstab bearbeiten muss, liegt es an mir, den Eintrag danach aus fstab zu löschen, und normalerweise bin ich zu diesem Zeitpunkt müde, ich könnte es vergessen, bla bla.

Ich bin zu dem Schluss gekommen, dass es sich hierbei wahrscheinlich um eine Sicherheitsfunktion handelt:

https://unix.stackexchange.com/questions/365308/use-mount-o-with-a-non-root-user

Die Einschränkung -o (nur root kann sie angeben) dient dem Schutz des Systems: Der Administrator kann alle erforderlichen Optionen einrichten, entweder direkt mit -o oder mit /etc/fstab; Benutzer können nur benutzersteuerbare Dateisysteme ein- oder aushängen lassen, ohne Optionen anzugeben, da Dateisystemoptionen eine Reihe feindlicher Szenarien zulassen. Daher unterstützen einige Dateisysteme andere Möglichkeiten zum Festlegen bestimmter Optionen, wie beispielsweise die oben mit CIFS verwendete Umgebungsvariable USER.

/etc/fstabÄh, ja, aber für mich ist es sicherer, überhaupt keine SMB-Pfade einzugeben .

Ich würde also wirklich gerne montierenNurüber eine KommandozeileohneÄndern von Konfigurationsdateien (einschließlich /etc/fstab) irgendwo.

Ich hoffte, dass es einen anderen Befehl gibt, und ich fand gvfs-mount- aber ich habe das gleiche Problem wieMounten Sie die SMB-Freigabe mit gvfs über die Befehlszeile:

$ dbus-launch bash
$  gvfs-mount smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.

Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$

An diesem Punkt sieht es so aus, als ob es gemountet wäre, aber das ist tatsächlich nicht der Fall:

$ ls /run/user/1000/gvfs/
$

... und über gvfs-mount -lkönnen wir sehen, dass es keinen entsprechenden Einhängepunkt gibt:

$ gvfs-mount -l
...
Volume(3): test_nfs
  Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
  Mount(0): test_nfs -> file:///tmp/test_nfs
    Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
  Type: GDaemonMount

... und daher können wir mit diesem „Mount“ sowieso auf keine Dateien zugreifen.


Nochmals, wie kann man das aushängen? Das geht nicht umount /tmp/myshare, es wird nicht einmal als ausgehängt betrachtet; habe das hier gefunden.Unmounten Sie die GVFS-Samba-Freigabe mit geöffneter Datei:

$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory

$ gvfs-mount -u smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.

Danach gvfs-mount -lbestätigt eine Überprüfung mit, dass die Freigabe tatsächlich weg ist)


Und um auf die Erwähnung einzugehen gio mount: Beachten Sie zunächst, dass ohne das Starten einer Dbus-Sitzung Folgendes fehlschlägt:

$ gio mount smb://192.0.2.1
gio: smb://192.0.2.1: volume doesn’t implement mount

... dann verhält es sich innerhalb einer von gestarteten Shell dbus-launch bashgenauso wie gvfs-mount:

$ gio mount smb://192.0.2.1/myshare
Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$

Sieht aus, als wäre es montiert, aber:

$ gio mount -l
...
Volume(3): test_nfs
  Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
  Mount(0): test_nfs -> file:///tmp/test_nfs
    Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
  Type: GDaemonMount

... wieder gibt es keinen lokalen Verzeichnis-Einhängepunkt.


Vor diesem Hintergrund: Ist es möglich, eine SMB-Freigabe von der Befehlszeile aus zu mounten, ohne lokale Dateien zu ändern (wie und insbesondere /etc/fstab), ohne sudo und mit Lese-/Schreibberechtigungen (die, wie ich in Windows bestätigt habe, der SMB-Benutzer MYUSER besitzt) – und wenn ja, wie?

Antwort1

Nun, ich poste dies als Antwort, da sich herausgestellt hat, dass einige dieser gvfs/ gio-Befehle anscheinend funktionierten – ich habe anscheinend nur nicht auf den richtigen Mount-Ordner geschaut; in meinem Ubuntu 20.04 ist dies anscheinend nicht der Fall:

$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory

... aber stattdessen:

$ ls ~/.cache/gvfs/
'smb-share:server=192.0.2.1,share=myshare'

... und die Dateien sind da, und ich kann sie lesen/schreiben ... Jetzt wundere ich mich, dass sie noch da sind, denn ich glaube, ich habe sie ausgehängt ... na ja.

Nun, ich bin froh, dass Filesharing nach all diesen Jahrzehnten der Entwicklung heute so einfach ist! Und ich freue mich auf weitere Änderungen, die wir hoffentlich ~/.cache/.etc/gvfs-2/in der Praxis sehen werden, sodass wir in Zukunft noch mehr Fehler und noch mehr nutzlose Antworten erhalten, die wir stundenlang durchforsten müssen! Ist die Entwicklung der Technologie nicht großartig?:)

Antwort2

Der Einhängepunkt liegt nicht unter~/.cache/gvfs/Es ist unter/run/Benutzer/1000/gvfs

Ersetzen Sie 1000 durch Ihre eigene UID-Nummer

Ich werde eine meiner eigenen Freigaben mounten:

~$ gio mount smb://vubmate2004.local/Private
Password required for share private on vubmate2004.local
User [tester]: tester
Domain [WORKGROUP]: 
Password: 

Ich werde prüfen, ob es montiert ist:

~$ ls -al /run/user/1000/gvfs
total 0
dr-x------  3 tester tester   0 Jan  5 15:08  .
drwx------ 10 tester tester 300 Jan  5 15:13  ..
drwx------  1 tester tester   0 Jan  5 15:14 'smb-share:server=vubmate2004.local,share=private'

Ich überprüfe den Inhalt der gemounteten Freigabe:

~$ ls -al /run/user/1000/gvfs/smb-share:server=vubmate2004.local,share=private
total 0
drwx------ 1 tester tester 0 Jan  5 15:14  .
dr-x------ 3 tester tester 0 Jan  5 15:08  ..
-rwx------ 1 tester tester 0 Jan  5 15:14 'new file'

Ich werde die Freigabe aushängen:

~$ gio mount -u smb://vubmate2004.local/Private

Ich schaue mal nach, ob es noch montiert ist:

~$ ls -al /run/user/1000/gvfs
total 0
dr-x------  2 tester tester   0 Jan  5 15:08 .
drwx------ 10 tester tester 300 Jan  5 15:13 ..

verwandte Informationen