Jak mogę sudo przez sshfs?

35

Na moim lokalnym hoście alphamam katalog foomapowany przez sshfs na host bravow następujący sposób:

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

Jednak na hoście bravojest inny użytkownik, delta, który chcę sudo /bin/su, aby mógł pracować bravo:/home/delta. deltanie może być zalogowany przez ssh; z powodów, których nie mogę zmienić, sudo można przejść do delty tylko wtedy, gdy jesteś na komputerze.

Zwykle włączałbym ssh bravo, potem sudo do delty, ale zastanawiam się, czy jest jakiś sposób, żebym mógł to zrobić, gdy mam sir montowany do domu przez Charliego.

zbocze
źródło
2
Najlepszym rozwiązaniem tego problemu są uprawnienia do plików.
artifex,

Odpowiedzi:

36

Zależy to od systemu operacyjnego serwera, z którym się łączysz. Dla centOS 5 dodałeś do opcji montowania sshfs:

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

W przypadku Ubuntu 9.10 (myślę, że może to być 9.04, ale prawdopodobnie jest taki sam dla obu) lub Debian, który dodałbyś:

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

Aby znaleźć poprawną ścieżkę dla innych systemów z uruchomionym openSSH, uruchom

sudo grep Subsystem /etc/ssh/sshd_config

i poszukaj lokalizacji pliku binarnego sftp-server.

Może być konieczne skonfigurowanie sudo za pomocą NOPASS: {ścieżka do sftp-server} lub prewalidacja za pomocą ssh user@host sudo -v, aby sudomieć zaktualizowany znacznik czasu dla notty. W moim przypadku moje dwa polecenia to:

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"
Craisis
źródło
1
Dzięki, to bardzo fajna „sztuczka”. Ja po prostu dodaje się „-u <some_other_user>” do sudo dla mojej sytuacji
jor
1
Bardzo dobrze, działał bezbłędnie. Chodzi mi tylko o to, że w przykładzie jest / usr / bin / sudo, co wydaje się niepotrzebne.
xaralis
1
@Craisis Przepraszam, że przywołałem stary post, ale chcę ssh na serwerze CentOS 6.5 z podstawowym użytkownikiem, ale zamontuj folder, który ma dostęp tylko do konta root. Czy to byłoby poprawne 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 -vnie uszczęśliwia mojego sudo - chce tty, zanim pozwoli mi sudo. Myśli?
w00t
1
@eggo @Sebi @calandoa @xaralis Czy to polecenie działa również, jeśli chcę sudo jako root w debian 9? Bo jeśli 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"
użyję
3

Możesz użyć bindfs + sshfs, aby uzyskać dostęp do innych plików użytkownika (nawet root).

Najpierw montujesz swój „root” lub inny katalog pod swoim użytkownikiem za pomocą odwzorowanego identyfikatora użytkownika.

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

a następnie po prostu sshfs do katalogu.

sshfs USER@SERVER:tmproot TARGET

Ale ze względów bezpieczeństwa lepiej nie mapować całego katalogu głównego, /ale tylko potrzebną część. Na przykład: Możesz użyć tej metody do zamontowania dowolnego innego katalogu użytkownika, na przykład plików z / var / www do ~ / www i zmiany mapowania użytkownika root, abyś miał do niego pełny dostęp.

Jeśli potrzebujesz dostępu do zachowania identyfikatora użytkownika lub dostępu do wielu użytkowników, utworzę nowego użytkownika, na przykład „rootfs” o identyfikatorze UID = 0 i / bin / false i wykonam normalny sshfs.

kolorafa
źródło
0

Możesz spróbować (ale nie sądzę, żeby to zadziałało):

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

Nie rozumiem bardzo dobrze sshfs, więc możesz być w stanie uzyskać coś takiego do pracy, ale nie mogłem powiedzieć jak, i byłbym trochę zaskoczony.

Inną możliwością jest umieszczenie polecenia „sudo / bin / su bravo” w ~ / .ssh / rc, ale wpłynęłoby to na wszystkie twoje podłączenia fs (zakładając, że zadziałało, co również wątpię), a także na normalne użycie ssh .

Przepraszam za bycie debbie.

Slartibartfast
źródło
0

Na podstawie dedukcji uważam, że nie można tego osiągnąć za pomocą prostego polecenia.

Wynika to z tego, że sshfs wywołuje ssh bez przekazywania żadnej komendy, ale zamiast tego używa SFTP, który jest podsystemem SSH.

Z strony podręcznika sshfs :

Na komputerze zdalnym używany jest podsystem SFTP SSH.

Ponadto zmiana bieżącego użytkownika (lub „su” lub „sudo”) nie jest częścią protokołu SFTP, choć wydaje się, że jest to bardzo często wymagana funkcja.

Weboide
źródło
to nie jest niemożliwe. Rozwiązanie Craisis działa.
Jayen,
Oczywiście, że tak, ponieważ zastępuje polecenie uruchamiające podsystem i dodaje sudo. Dobre znalezienie, ale musisz skonfigurować sudo bez hasła (lub użyć znacznika czasu), co może obniżyć bezpieczeństwo. ale nie będę się kłócił, ponieważ OP naprawdę chciał to zrobić.
Weboide,
0

Prawdopodobnie najlepszym sposobem są uprawnienia do plików, jak proponuje @artifex.

Jak mówi @Weboide, nie jest to możliwe przez sshfs.

Ale myślę, że można stworzyć prosty skrypt, nazwijmy to sudossh, że zajmie swoimi $PWD, przekształcić go /home/delta/i uruchom polecenie przez sshi sudona komputerze zdalnym.

Coś takiego:

#!/usr/bin/env bash

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

Następnie możesz wykonać sudossh commandi pamiętać o użyciu ścieżek względnych.

Jeśli używasz ssh-agent, po prostu musisz wprowadzić sudohasło.

chmeee
źródło
0

Moje rozwiązanie jest cringingly brzydki (dzięki kilku warstw ciąg ucieczki), ale będzie to odczytać ścieżkę sftp-serverz /etc/ssh/sshd_configi wykonać go przez sudo. Co teraz, jeśli sshd_confignie znajduje się pod /etc/ssh? Może wyszukiwanie w sshpliku binarnym za pomocą stringsi grep?

#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"sudo \`sed -n '/Subsystem\\\\\\\\s\\\\+sftp\\\\\\\\s\\\\+/{s///;p}' /etc/ssh/sshd_config\`\"" "$@"
André von Kugland
źródło