53 votes

Comment puis-je sudo sur sshfs?

Sur mon localhost alpha, j'ai un répertoire foo qui est mappé via sshfs sur l'hôte bravo comme suit :

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

Cependant, sur l'hôte bravo, il y a un autre utilisateur, delta, que je veux sudo /bin/su, afin que je puisse travailler dans bravo:/home/delta. delta ne peut pas se connecter via ssh; pour des raisons que je ne peux pas changer, vous ne pouvez passer en sudo vers delta que lorsque vous êtes sur la machine.

Normalement, je me connecterais en ssh à bravo, puis je passerais en sudo vers delta, mais je me demande s'il y a un moyen de le faire lorsque le répertoire personnel de charlie est monté via ssh.

60voto

Craisis Points 451

Cela variera en fonction du système d'exploitation du serveur auquel vous vous connectez. Pour centOS 5, vous ajouteriez aux options de montage sshfs :

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

Pour Ubuntu 9.10 (je pense, peut-être 9.04, mais c'est probablement pareil pour les deux) ou Debian, vous ajouteriez :

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

Pour trouver le bon chemin pour d'autres systèmes exécutant openSSH, exécutez

sudo grep Subsystem /etc/ssh/sshd_config

et recherchez l'emplacement du binaire sftp-server.

Vous devrez peut-être configurer sudo avec NOPASS : {chemin de sftp-server} ou valider préalablement avec ssh user@host sudo -v pour que sudo ait un horodatage mis à jour pour notty. Dans mon cas, mes deux commandes étaient :

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"

7voto

Sven Points 51

Vous pouvez utiliser bindfs + sshfs pour accéder aux fichiers d'autres utilisateurs (même root).

Tout d'abord, vous montez votre dossier 'root' ou tout autre dossier sous votre utilisateur avec un uid remappé.

ssh -t UTILISATEUR@SERVEUR "mkdir ~/tmproot; sudo bindfs --map=root/UTILISATEUR / ~/tmproot"

et ensuite simplement sshfs dans le dossier.

sshfs UTILISATEUR@SERVEUR:tmproot CIBLE

Mais pour des raisons de sécurité, il est préférable de ne pas mapper tout le root / mais seulement la partie dont vous avez besoin. Par exemple: Vous pouvez utiliser cette méthode pour monter n'importe quel autre dossier utilisateur dans le vôtre, par exemple les fichiers de /var/www dans ~/www et remapper root dans votre utilisateur afin d'avoir un accès complet à celui-ci.

Si vous avez besoin de conserver l'uid ou d'avoir accès à plusieurs utilisateurs, je créerais un nouvel utilisateur, par exemple "rootfs", avec uid=0 et /bin/false et ferais un sshfs normal.

1voto

Weboide Points 3255

Par déduction, je pense que c'est impossible à réaliser en une simple commande.

Cela est dû au fait que sshfs appelle ssh sans passer de commande, mais utilise plutôt SFTP qui est un sous-système de SSH.

À partir de la page de manuel de sshfs:

Sur l'ordinateur distant, le sous-système SFTP de SSH est utilisé.

De plus, changer d'utilisateur actuel (ou 'su' ou 'sudo') ne fait pas partie du protocole SFTP, bien que cela semble être une fonctionnalité très demandée.

0voto

Slartibartfast Points 3255

Vous pourriez essayer (mais je ne pense pas que cela fonctionnera) :

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

Je ne comprends pas très bien sshfs, donc il est possible que vous puissiez faire quelque chose comme ça fonctionner, mais je ne saurais dire comment, et je serais un peu surpris.

Une autre possibilité serait de mettre la commande 'sudo /bin/su bravo' dans ~/.ssh/rc, mais cela affecterait toutes vos montages de systèmes de fichiers (en supposant que cela fonctionne, ce que je doute également) ainsi que votre utilisation normale de ssh.

Désolé d'être aussi pessimiste.

0voto

chmeee Points 7180

Sûrement, la meilleure façon est à travers les permissions de fichier, comme le propose @artifex.

Comme le dit @Weboide, c'est impossible via sshfs.

Mais je suppose que vous pourriez créer un script simple, appelons-le sudossh qui prendra votre $PWD, le convertira en /home/delta/ et exécutera la commande via ssh et sudo sur la machine distante.

Quelque chose comme ceci:

#!/usr/bin/env bash

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

Après cela, vous pouvez exécuter sudossh commande et n'oubliez pas d'utiliser des chemins relatifs.

Si vous utilisez ssh-agent, vous n'avez qu'à entrer votre mot de passe sudo.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X