Come faccio a fare sudo su sshfs?


35

Sul mio host locale alphaho una directory fooche è mappata via sshfs per ospitare bravocome segue:

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

Tuttavia, sull'host bravoc'è un altro utente, delta, che desidero sudo /bin/sucome, in modo da poter lavorare bravo:/home/delta. deltapotrebbe non essere effettuato l'accesso tramite ssh; per motivi che non posso cambiare, puoi passare a delta solo quando sei sulla macchina.

Normalmente farei ssh bravo, poi sudo in delta, ma mi chiedo se c'è modo di farlo quando ho la directory home di charlie montata tramite ssh.


2
Questo può essere risolto al meglio con i permessi dei file.
Artifex,

Risposte:


36

Questo varierà a seconda del sistema operativo del server a cui ti stai connettendo. Per centOS 5 aggiungeresti alle opzioni di mount di sshfs:

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

Per Ubuntu 9.10 (penso, potrebbe essere 9.04, ma probabilmente è lo stesso per entrambi) o Debian aggiungeresti:

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

Per trovare un percorso corretto per altri sistemi che eseguono openSSH, esegui

sudo grep Subsystem /etc/ssh/sshd_config

e cerca la posizione del file binario sftp-server.

Potrebbe essere necessario installare sudo con NOPASS: {percorso di sftp-server} o prevalidare con in ssh user@host sudo -vmodo che sudoabbia un timestamp aggiornato per notty. Nel mio caso, i miei due comandi erano:

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"

1
Grazie, questo è un 'trucco' molto pulito. Ho appena aggiunto un "-u <some_altro_utente>" al sudo per la mia situazione
jor

1
Molto bene, ha funzionato perfettamente. Il mio unico punto è che nell'esempio c'è / usr / bin / sudo due volte, il che sembra superfluo.
Xaralis,

1
@Craisis Mi dispiace per aver tirato fuori un vecchio post, ma voglio ssh in un server CentOS 6.5 con un utente di base, ma montare una cartella che ha solo l'accesso come root. Sarebbe corretto sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server":?
Don Rhummy,

1
ssh host sudo -vnon rende felice il mio sudo, ne vuole un po 'prima che mi permetta di farlo. Pensieri?
w00t

1
@eggo @Sebi @calandoa @xaralis Questo comando funziona anche se voglio sudo come root in debian 9? Perché se uso: ssh -t myuser@host sudo -v sshfs myuser@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u root /usr/lib/openssh/sftp-server"non funziona: \ - dice solo "gli host remoti si sono disconnessi"
user3450548

3

Puoi usare bindfs + sshfs per accedere ad altri file utente (anche root).

Innanzitutto monti il ​​tuo 'root' o qualsiasi altra directory sotto il tuo utente con uid rimappato.

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

e poi semplicemente sshfs nella directory.

sshfs USER@SERVER:tmproot TARGET

Ma per sicurezza è meglio non mappare l'intera radice /ma solo una parte di cui hai bisogno. Ad esempio: è possibile utilizzare questo metodo per montare qualsiasi altra directory utente sul proprio, ad esempio file da / var / www in ~ / www e rimappare root nell'utente in modo da avere pieno accesso ad esso.

Se hai bisogno di accesso per preservare l'UID o avere accesso a più utenti, allora creerei un nuovo utente, ad esempio "rootfs" con uid = 0 e / bin / false, e faccio un normale sshfs.


0

Potresti provare (ma non credo che funzionerà):

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

Non capisco molto bene gli sshfs, quindi potresti riuscire a far funzionare qualcosa del genere, ma non potrei dire come, e sarei un po 'sorpreso.

Un'altra possibilità è quella di mettere il comando 'sudo / bin / su bravo' in ~ / .ssh / rc, ma ciò influirebbe su tutti i tuoi mount fs (supponendo che abbia funzionato, cosa che dubito anche io) così come il tuo normale uso di ssh .

Scusatemi per essere un deprie downer.


0

Per deduzione, penso che questo sia impossibile da ottenere in un semplice comando.

Questo perché sshfs chiama ssh senza passare alcun comando ma, invece, utilizza SFTP che è un sottosistema di SSH.

Dalla manpage di sshfs :

Sul computer remoto viene utilizzato il sottosistema SFTP di SSH.

Inoltre , la modifica dell'utente corrente (o "su" o "sudo") non fa parte del protocollo SFTP, sebbene sembri una funzionalità molto richiesta.


questo non è impossibile. La soluzione di Craisis funziona.
Jayen,

Certo sì, poiché ha la precedenza sul comando che avvia il sottosistema e aggiunge sudo. Buona scoperta ma devi impostare sudo senza password (o utilizzare un timestamp), che potrebbe ridurre la sicurezza. ma non discuterò dal momento che OP voleva davvero farlo.
Weboide,

0

Probabilmente, il modo migliore è attraverso i permessi dei file, come propone @artifex.

Come dice @Weboide, è impossibile tramite sshfs.

Ma credo che potresti creare un semplice script, chiamiamolo sudosshche prenderà il tuo $PWD, convertilo in /home/delta/ed esegui il comando attraverso sshe sudosulla macchina remota.

Qualcosa come questo:

#!/usr/bin/env bash

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

Successivamente è possibile eseguire sudossh commande ricordare di utilizzare i percorsi relativi.

Se usi ssh-agent, devi solo inserire la tua sudopassword.


0

La mia soluzione è incredibilmente brutta (grazie ad alcuni strati di stringa che fuoriescono), ma leggerà il percorso sftp-serverda /etc/ssh/sshd_confige lo eseguirà sudo. Ora cosa succede se sshd_confignon si trova sotto /etc/ssh? Forse cerca all'interno del sshbinario con stringse grep?

#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"sudo \`sed -n '/Subsystem\\\\\\\\s\\\\+sftp\\\\\\\\s\\\\+/{s///;p}' /etc/ssh/sshd_config\`\"" "$@"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.