Ograniczanie użytkownika SSH / SCP / SFTP do katalogu

36

Czy istnieje prosty sposób na ograniczenie użytkownika SCP / SFTP do katalogu? Wszystkie metody, na które natknąłem się, wymagają ode mnie skonfigurowania więzienia chroot poprzez skopiowanie plików binarnych, ale nie uważam, że powinno to być konieczne.

phunehehe
źródło

Odpowiedzi:

29

SSH Obsługuje natywnie chrootowanie użytkownika SFTP. Musisz tylko dostarczyć

ChrootDirectory

W pliku konfiguracyjnym sshd zrestartuj sshd.

Jeśli tylko używasz sftp, nie musisz nic więcej robić. Niestety nie działa to dla scp. Aby uzyskać interaktywną powłokę, musisz skopiować pliki binarne i / dev węzły do ​​chroot.

Przykładowa konfiguracja tylko dla jednego użytkownika testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Kilka rzeczy, o których należy pamiętać, ze strony podręcznika sshd_config:

    Wszystkie składniki nazwy ścieżki muszą być katalogami będącymi własnością administratora, a nie katalogami
    zapisywalny przez dowolnego innego użytkownika lub grupę. Po chroot, sshd (8) zmienia
    katalog roboczy do katalogu domowego użytkownika.

Wyszukaj ChrootDirectory w man sshd_config, aby uzyskać więcej informacji.

Gabe.
źródło
2
Zauważ, że część, która zaczyna się od „Dopasuj test użytkownika”, musi znajdować się na KONIEC pliku, ponieważ będzie zawierać wiersze konfiguracji tylko wtedy, gdy użytkownik jest „testser” od tego momentu.
Magnus
1
Czy możliwe jest także Chroot tylko dla protokołu SFTP, ale nadal pozwala na normalne połączenia SCP?
lanoxx
1
Na moim komputerze Ubuntu 14.04 konieczna była także zmiana Subsystem sftp /usr/lib/openssh/sftp-serverlinii naSubsystem sftp internal-sftp -f AUTH -l VERBOSE
częściowo
@Magnus lub do innej Matchsekcji.
roaima,
12

Chroot to dość prosta metoda. Ponieważ system operacyjny ma już tę funkcję bezpieczeństwa, autorzy demonów zwykle nie próbują jej ponownie wdrożyć.

Rssh zawiera przewodnik na temat zakładania więzienia chroot. Jest w CHROOTpliku w dystrybucji źródłowej. Krótko mówiąc, musisz mieć:

  • Kilka binarne, kopiowane z korzenia: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • Biblioteki ( {/usr,}/lib/lib*.so.[0-9]), których używają, również zostały skopiowane
  • A /etc/passwd(całkiem możliwe, że nie kopia, ale pochodząca od wzorca)
  • Kilka urządzeń: /dev/null, /dev/tty, a także /dev/loggniazdo do logowania (a trzeba powiedzieć demona syslog nasłuchuje na tym gnieździe)

Dodatkowa wskazówka, której nie ma w dokumentacji rssh: Jeśli potrzebujesz dostępu do niektórych plików w więzieniu chroot, możesz użyć bindfs lub Linuxa, mount --bindaby stworzyć dodatkowe hierarchie katalogów spoza więzienia. bindfspozwala przemontowanemu katalogowi mieć bardziej restrykcyjne uprawnienia, na przykład tylko do odczytu. ( mount --bindnie, chyba że zastosujesz łatkę do jądra; Debian zawarł tę łatkę od czasu wydania East Lenny, ale większość innych dystrybucji nie miała tego w 2011 roku.)

Gilles „SO- przestań być zły”
źródło
7

Możesz spojrzeć na scponly (lub ostatnio rssh ); jest to w zasadzie powłoka logowania, której można użyć tylko do uruchomienia scp lub podsystemu sftpd. W scponlycwariancie wykonuje chroot przed aktywacją danego podsystemu.

Shadur
źródło
scponly wydaje się przestarzały, przynajmniej w Ubuntu
tobixen