Question Comment puis-je sudo sur sshfs?


Sur mon hôte local alpha J'ai un annuaire foo qui est mappé via sshfs pour héberger 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 comme, pour que je puisse travailler dans bravo:/home/delta. delta ne peut pas être connecté via ssh; pour des raisons que je ne peux pas changer, vous ne pouvez vous déplacer que lorsque vous êtes sur la machine.

Normalement, je serais dans SSH bravo, puis sudo to delta, mais je me demande s’il est possible de le faire lorsque j’ai installé le répertoire personnel de charlie via ssh.


28
2017-07-07 22:27


origine


Cela peut être mieux résolu avec les autorisations de fichiers. - artifex


Réponses:


Cela varie 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, pourrait être 9.04, mais c'est probablement la même chose pour les deux) ou Debian, vous ajouteriez:

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

Pour trouver le chemin correct pour les autres systèmes exécutant openSSH, exécutez

sudo grep Subsystem /etc/ssh/sshd_config

et recherchez l'emplacement du fichier binaire sftp-server.

Vous devrez peut-être configurer sudo avec NOPASS: {chemin d'accès au serveur sftp} ou prévalidate avec ssh user@host sudo -v pour que sudo a 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"

30
2017-07-09 16:40



Merci, c'est un "truc" très soigné. Je viens d'ajouter un "-u <some_other_user>" au sudo pour ma situation - jor
Très bien, a fonctionné sans faille. Mon seul point est qu'il y a / usr / bin / sudo deux fois dans l'exemple, ce qui semble inutile. - xaralis
@ Craisis Désolé de faire apparaître votre ancien message, mais je souhaite utiliser ssh sur un serveur CentOS 6.5 avec un utilisateur de base, mais monter un dossier uniquement accessible à la racine. Serait-ce correct: 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 ne fait pas mon sudo heureux - il veut un tty avant de me laisser sudo. Pensées? - w00t
@ w00t Utilisation ssh -t host sudo -v se connecter avec un pseudo terminal. - Sebi


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, alors vous pourrez peut-être faire fonctionner quelque chose comme ça, mais je ne saurais dire comment, et je serais un peu surpris.

Une autre possibilité est de mettre la commande 'sudo / bin / su bravo' dans ~ / .ssh / rc, mais cela affecterait tous vos montages fs (en supposant que cela fonctionne, ce dont je doute également) ainsi que votre utilisation normale de ssh .

Désolé d'être un debbie downer.


0
2017-07-08 01:51





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

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

Du sshfs page de manuel:

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

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


0
2017-07-08 02:04



ce n'est pas impossible. La solution de Craisis fonctionne. - Jayen
Bien sûr que oui, puisqu'il remplace la commande qui démarre le sous-système et ajoute sudo. Bonne recherche, mais vous devez configurer sudo sans mot de passe (ou utiliser un horodatage), ce qui peut réduire la sécurité. mais je ne discuterai pas puisque OP voulait vraiment faire cela. - Weboide


Le meilleur moyen consiste probablement à utiliser les autorisations de fichiers, comme le propose @artifex.

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

Mais je suppose que vous pouvez créer un script simple, appelons-le sudossh cela prendra votre $PWD, le convertir en /home/delta/ et exécuter la commande à travers ssh et sudo sur la machine distante.

Quelque chose comme ça:

#!/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 command et rappelez-vous d'utiliser des chemins relatifs.

Si vous utilisez ssh-agent, il vous suffit de saisir votre sudo mot de passe.


0
2017-07-08 09:27





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

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

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

et ensuite simplement sshfs dans le répertoire.

sshfs USER@SERVER:tmproot TARGET

Mais pour des raisons de sécurité, il est préférable de ne pas cartographier la racine entière / mais seulement une partie dont vous avez besoin. Par exemple: Vous pouvez utiliser cette méthode pour monter tout autre répertoire utilisateur sur votre, par exemple, les fichiers de / var / www dans ~ / www et remapper la racine sur votre utilisateur afin d’y avoir un accès complet.

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


0
2017-09-12 12:19





Ma solution est grincheux moche (grâce à quelques couches de chaîne échappant), mais il va lire le chemin sftp-server de /etc/ssh/sshd_config et l'exécuter à travers sudo. Maintenant si sshd_config ne se trouve pas sous /etc/ssh? Peut-être chercher à l'intérieur ssh binaire avec strings et 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