Chrootowane uprawnienia użytkownika do zapisu SFTP

10

Mam konfigurację tylko dla użytkowników sftp:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

W moim pliku secure.log pojawia się następujący komunikat:

fatal: bad ownership or modes for chroot directory

Ze słowem kluczowym match są pewne zabezpieczenia ... katalogi muszą być własnością root, a katalogi chmod 755 (drwxr-xr-x). Uniemożliwia to użytkownikowi uprawnienia do zapisu do folderów, jeśli jest to zapis tylko dla użytkownika root i ustawiony na ben, który nie jest możliwy do zapisu dla grup ze względu na bezpieczeństwo ssh.

Ktoś wie o dobrej pracy?

Adionditsak
źródło
Czy chrootużytkownicy ed mają swoje ChrootDirectory? Czy mogą uzyskać do niego dostęp?
John WH Smith

Odpowiedzi:

2

Mam takie same ustawienia na naszym serwerze. Używamy tej samej konfiguracji SSHD. Katalogi domowe użytkowników są root i wewnątrz nich znajdują się foldery documentsi public_htmlwłasnością odpowiednich użytkowników. Użytkownicy następnie logują się przy użyciu SFTP i zapisują w tych folderach (nie bezpośrednio w domu). Ponieważ SSH nie jest dla nich dozwolony, działa idealnie. Możesz dostosować, które katalogi będą tworzone dla nowych użytkowników w / etc / skel / (przynajmniej w openSUSE, nie znam się na innych dystrybucjach).

Inną możliwością może być ACL ( dokumentacja openSUSE ) - może dodać uprawnienia do zapisu dla danego użytkownika dla jego katalogu domowego.

Tilia
źródło
1
Dla mnie w Debian Jessie (8.10) ustawienie ACL w domu użytkownika nie działa. Gdy użytkownik próbuje zalogować się za pomocą SFTP, dostajepacket_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
Drew Chapin
7

Niedawno znaleźliśmy obejście, które wygląda następująco:

/ etc / ssh / sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

uprawnienia do katalogu:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

Teraz /homespełnia wymagania ChrootDirectoryi nie może być wymieniony przez ograniczonych użytkowników, ale sftponlyużytkownicy nie będą mogli się zalogować, jeśli ich katalogi domowe są skonfigurowane jak zwykle ( /home/$LOGNAME): w środowisku chroot ich katalogi domowe nie znajdują się w środku, /homeale bezpośrednio pod root ( /).

obejście 1

Ustaw domy użytkowników z ograniczonym dostępem do wyglądu pod chroot:

root@server:~ # usermod -d /username username

zastrzeżenie 1

Jeśli którykolwiek z nieograniczonych użytkowników lub jakiś skrypt administracyjny używa rozszerzenia tylda bash, tak jak ~usernamebędzie się rozwijało do /usernameteraz, to nie jest to, co należy rozumieć.

Również administrator tworzący sftponlyużytkowników musi pamiętać o używaniu domu innego niż domyślny. Rozwiązany za pomocą skryptu. Z których administrator musi pamiętać.

obejście 2

Jest to alternatywa dla poprzedniej, którą wykorzystaliśmy:

root@server:~ # ln -s . /home/home

To jest utworzenie dowiązania symbolicznego /homedo własnego katalogu. Teraz pod chroot /home/usernamewskazuje na ten sam katalog, co bez chroot. Dla ograniczonego użytkownika zalogowanego za pomocą sftp wyglądałoby to jak /username. Ten katalog jest zapisywalny dla jego właściciela (ograniczony użytkownik). Użytkownik z ograniczonym dostępem nie może wymienić swoich katalogów macierzystych ani domowych żadnego z rodzeństwa według nazwy.

Jedyną wyjątkową cechą sftponlyużytkownika jest jego udział w sftponlygrupie. Okazało się, że łatwiej sobie z tym poradzić niż obejście 1.

zastrzeżenia 2

  1. Nie możesz mieć użytkownika o nazwie „home” z katalogiem domowym /home/home
  2. Musisz uważać na skrypty przechodzące przez /homehierarchię i podążające za dowiązaniami symbolicznymi.
artm
źródło
Cześć artm lub inni czytelnicy, wiem, że to stary post, ale czy mógłbyś mi pomóc w zrozumieniu obejścia 2? Mam użytkownika (ftpuser), który musi zostać uwięziony w swoim katalogu domowym (/ home / ftpuser /), mogę to osiągnąć, ale / home / ftpuser musi mieć oczywiście 755. Potrzebuję ftpuser, aby móc tworzyć pliki i foldery w ich katalogu domowym. jakie dowiązanie symboliczne muszę utworzyć i jaką wartość powinien mieć mój katalog ChrootDirectory?
Rażący
4

Musisz stworzyć strukturę w katalogu domowym użytkownika, na przykład katalogi wejściowe i wyjściowe. Te katalogi powinny być własnością użytkownika i tam będzie mógł umieszczać i pobierać pliki.

YoMismo
źródło
0

Powinieneś utworzyć następującą strukturę katalogów:

/ home / user

/ home / user / home / user <- prawdziwy katalog, do którego użytkownik będzie miał dostęp

Opcjonalnie:

/home/user/.ssh/authorized_keys <- jeśli chcesz uwierzytelnić się za pomocą klucza publicznego

Fernando Ulisses dos Santos
źródło
0

W odniesieniu do sekcji „uprawnienia do katalogu” w odpowiedzi od @artm (którą właśnie przetestowałem) .. Znalazłem:

root@server:~ # chmod 111 /home <- Does not work

Nie pozwala, aby połączenie sftp działało na Ubuntu, wykonując tylko uprawnienia do wszystkiego, tj. 111.

Znalazłem to:

root@server:~ # chmod 555 /home

Działa z połączeniem z sftp z uprawnieniami do odczytu i wykonywania, tj. 555. Nie jestem pewien, czy debian vs. inne smaki są różne, ale to działa na moich instalacjach Ubuntu.

Willm
źródło
0

Tworząc użytkownika, musisz ustawić własność za pomocą chownkażdego katalogu dla każdego użytkownika.

Na przykład:

sudo chown usertest:groupsftp /home/rootsftp/usertest
Miguel Dueñas
źródło