Frage Wie sudo über sshfs?


Auf meinem lokalen Host alpha Ich habe ein Verzeichnis foo das wird über sshfs auf Host abgebildet bravo wie folgt:

$ sshfs charlie@bravo:/home/charlie ~/foo

Jedoch auf Host bravo Es gibt einen anderen Benutzer, Delta, den ich möchte sudo /bin/su als, damit ich arbeiten kann bravo:/home/delta. delta darf nicht über ssh eingeloggt sein; Aus Gründen, die ich nicht ändern kann, können Sie nur auf Delta umsteigen, sobald Sie auf dem Rechner sind.

Normalerweise würde ich reinschauen bravo, dann sudo nach delta, aber ich frage mich, ob es irgendeinen Weg gibt, dass ich das tun kann, wenn ich Charlies Home dir über ssh angehängt habe.


28
2017-07-07 22:27


Ursprung


Dies kann am besten mit Dateiberechtigungen gelöst werden. - artifex


Antworten:


Dies hängt vom Betriebssystem des Servers ab, mit dem Sie eine Verbindung herstellen. Für CentOS 5 würden Sie zu den sshfs Mount-Optionen hinzufügen:

-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"

Für Ubuntu 9.10 (ich denke, es könnte 9.04 sein, aber es ist wahrscheinlich das gleiche für beide) oder Debian, die Sie hinzufügen würden:

-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server".

Um den richtigen Pfad für andere Systeme zu finden, auf denen openSSH läuft, führen Sie den Befehl aus

sudo grep Subsystem /etc/ssh/sshd_config

und suchen Sie nach dem Speicherort der sftp-Server-Binärdatei.

Eventuell müssen Sie sudo mit NOPASS einrichten: {Pfad zu sftp-server} oder vorvalidieren mit ssh user@host sudo -v damit sudo hat einen aktualisierten Zeitstempel für notty. In meinem Fall waren meine zwei Befehle:

ssh login_user@host sudo -v
sshfs login_user@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u as_user /usr/lib/ssh/sftp-server"

30
2017-07-09 16:40



Danke, das ist ein sehr gepflegter "Trick". Ich habe gerade ein "-u <some_other_user>" in das sudo für meine Situation hinzugefügt - jor
Sehr gut, hat einwandfrei funktioniert. Mein einziger Punkt ist, dass es / usr / bin / sudo zweimal in dem Beispiel gibt, was unnötig scheint. - xaralis
@Craisis Es tut mir leid, einen alten Post hochzuladen, aber ich möchte mit einem einfachen Benutzer auf einen CentOS 6.5 Server zugreifen, aber einen Ordner mounten, der nur Root-Zugang hat. Wäre das korrekt? sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"? - Don Rhummy
ssh host sudo -v macht mein sudo nicht glücklich - es will ein tty, bevor es mich sudo lässt. Gedanken? - w00t
@ w00t Verwenden ssh -t host sudo -v mit einem Pseudo-Terminal zu verbinden. - Sebi


Sie könnten versuchen (aber ich glaube nicht, dass es funktioniert):

sshfs -o ssh_command='ssh sudo /bin/su bravo' charlie@bravo:/home/charlie ~/foo

Ich verstehe sshfs nicht sehr gut, also könntest du so etwas zum Arbeiten bekommen, aber ich könnte nicht sagen wie, und ich wäre ein wenig überrascht.

Eine andere Möglichkeit ist, den Befehl 'sudo / bin / su bravo' in ~ / .ssh / rc zu setzen, aber das würde alle deine fs mounts beeinflussen (vorausgesetzt, es hat funktioniert, was ich auch bezweifle) sowie deine normale Verwendung von ssh .

Tut mir leid, dass ich ein Debbie-Downer bin.


0
2017-07-08 01:51





Durch Abzug denke ich, dass das ist unmöglich in einem einfachen Befehl zu erreichen.

Das ist weil sshfs ruft ssh auf, ohne einen Befehl zu übergeben, verwendet aber stattdessen SFTP, ein Subsystem von SSH.

Von dem sshfs Manpage:

Auf dem Remote-Computer der SFTP   Subsystem von SSH wird verwendet.

PlusDas Ändern des aktuellen Benutzers (oder "su" oder "sudo") ist nicht Teil des SFTP-Protokolls, obwohl dies wie eine sehr oft geforderte Funktion erscheint.


0
2017-07-08 02:04



das ist nicht unmöglich. Craisis Lösung funktioniert. - Jayen
Natürlich, ja, da er den Befehl überschreibt, der das Subsystem startet und sudo hinzufügt. Gutes Finden, aber Sie müssen Sudo ohne ein Kennwort einrichten (oder einen Zeitstempel verwenden), was die Sicherheit verringern kann. aber ich werde nicht streiten, da OP das wirklich machen wollte. - Weboide


Wahrscheinlich ist der beste Weg durch Dateizugriffsrechte, wie @artifex vorschlägt.

Wie @Weboide sagt, ist es unmöglich durch sshfs.

Aber ich denke, Sie könnten ein einfaches Skript erstellen, nennen wir es sudossh das wird deine nehmen $PWD, umwandeln in /home/delta/ und führen Sie den Befehl durch ssh und sudo auf dem Remote-Computer.

Etwas wie das:

#!/usr/bin/env bash

ssh -t charlie@bravo "cd `pwd | sed 's/user\/foo/delta/'`; sudo -u delta $*"

Danach können Sie ausführen sudossh command und denken Sie daran, relative Pfade zu verwenden.

Wenn Sie ssh-agent verwenden, müssen Sie nur Ihre eingeben sudo Passwort.


0
2017-07-08 09:27





Sie können bindfs + sshfs verwenden, um auf andere Benutzerdateien (auch root) zuzugreifen.

Zuerst mounten Sie Ihren 'root' oder ein anderes Verzeichnis unter Ihrem Benutzer mit der neu zugeordneten UID.

ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"

und dann einfach sshfs in das Verzeichnis.

sshfs USER@SERVER:tmproot TARGET

Aber aus Sicherheitsgründen ist es besser, nicht die ganze Wurzel zu mappen / aber nur ein Teil, den du brauchst. Beispiel: Sie können diese Methode verwenden, um ein beliebiges anderes Benutzerverzeichnis anzuhängen, z. B. Dateien von / var / www in ~ / www und remap root in Ihren Benutzer, damit Sie vollen Zugriff darauf haben.

Wenn Sie Zugriff benötigen, um uid zu erhalten oder Zugriff auf mehrere Benutzer zu haben, dann würde ich einen neuen Benutzer zum Beispiel "rootfs" mit uid = 0 und / bin / false erstellen und eine normale sshfs machen.


0
2017-09-12 12:19





Meine Lösung ist schrill hässlich (dank ein paar Schichten Schnur entkommen), aber es wird den Weg zu lesen sftp-server von /etc/ssh/sshd_config und führe es durch sudo. Was nun, wenn sshd_config befindet sich nicht unter /etc/ssh? Vielleicht drinnen suchen ssh binär mit strings und grep?

#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"sudo \`sed -n '/Subsystem\\\\\\\\s\\\\+sftp\\\\\\\\s\\\\+/{s///;p}' /etc/ssh/sshd_config\`\"" "$@"

0
2018-06-09 17:38