Jak dodać użytkownika ssh, który ma uprawnienia tylko do dostępu do określonego folderu?

17

Jak dodać użytkownika ssh, który ma uprawnienia tylko do dostępu do określonego folderu?

useradd -d /var/www/xyz.com.tr/musteri  -s /bin/bash -g sshd musteri

Utworzyłem użytkownika o nazwie musteri. Ustawiłem jego folder domowy i grupę. Chcę więc zintegrować musteriużytkowników z „/var/www/xyz.com.tr/musteri”. Nie chcę, żeby miał dostęp do innego folderu.

Wiolonczela
źródło
Czy chcesz, aby użytkownik miał pełny dostęp do powłoki, czy tylko protokoły kopiowania plików, takie jak sftp i rsync?
Gilles 'SO - przestań być zły'
Jeśli to drugie, możesz przyjrzeć się scponlyjako powłoka, być może działająca w chroottrybie, aby ograniczyć jego dostęp do tego katalogu i nigdzie indziej.
Shadur
1
@Gilles - Chcę uzyskać dostęp przez sftp. Ale nie chcę, żeby miał dostęp do innego folderu.
Cell-o
1
@ Cell-o: Jeśli potrzebujesz tylko kilku protokołów przesyłania plików, a nie powłok, użyj chroot plus scponly lub rssh (Google scponly chrootlub rssh chrootpowinien doprowadzić cię do poradników).
Gilles 'SO - przestań być zły'
Co powiesz na korzystanie z list ACL?
fpmurphy

Odpowiedzi:

19

Wygląda na to, że chcesz, aby Twój müşteriler miał dostęp do przesyłania plików do folderu bez faktycznego udostępniania ich powłok. Jest to dobra rzecz, ponieważ jak zauważył binfalse , dawanie ludziom powłok z ograniczonym dostępem jest trudne, ponieważ powłoki muszą mieć dostęp do wszelkiego rodzaju rzeczy rozproszonych w systemie, aby się uruchomić.

Aby dać SFTP dostęp do określonego folderu, możesz zrobić coś takiego.

  1. Dodaj nową grupę do systemu, powiedz „sftponly”.
  2. Dodaj w systemie dowolnych użytkowników, którzy powinni mieć ograniczone prawa do tej grupy. Możesz również dać im ograniczone powłoki, takie jak / bin / true, ale nie jest to wymagane.
  3. Zmień plik konfiguracyjny ssh (Zwykle /etc/ssh/sshd_config) za pomocą tych linii
    Podsystem sftp internal-sftp

    Dopasuj grupę sftponly
        ChrootDirectory% h
        Zezwól TCPForwarding no
        X11 Spedycja nr
        ForceCommand wewnętrzna-sftp

Spowodowałoby to aktywację podsystemu sftp wewnątrz SSH i zmusiłoby członków tej grupy systemów do korzystania tylko z tego systemu podczas logowania. Chrootowałoby ich również do swoich katalogów domowych. Możesz zmienić to na podfolder ich domowych katalogów, dodając coś takiego ChrootDirectory %h/musteri_sftp, aby nie mogli zobaczyć reszty plików systemowych, ale logowali się bezpośrednio do specjalnego podfolderu swojego katalogu domowego.

Kolay gelsin.

Caleb
źródło
Öncelikle teşekkürler. ;) Jak już wspomniałeś, skonfigurowałem SFTP, ale mam problem z iptables. Oto moja zasada. -> RH-Firewall-1-INPUT -m stan - stan NOWY -m tcp -p tcp --port 21 -j AKCEPTUJ
Cell-o
1
Birşey değil. Choć FTP będzie korzystać z portu 21, SFTP jest ftp jak protokół, który biegnie przez kanał SSH, więc to będzie korzystać z portu SSH, który domyślnie jest 22.
Caleb
Zauważ, że powinieneś również zlokalizować i skomentować wszelkie wcześniej istniejące polecenia podsystemu (np. Podsystem sftp / usr / lib / openssh / sftp-server)
CnrL,
Rozwiązałem mój problem ORAZ nauczyłem się kilku przydatnych zwrotów po turecku! Premia!
eimajenthat
2

Moim zdaniem jest to bardzo trudne, jeśli nie niemożliwe. Gdy użytkownik łączy się przez SSH, przynajmniej potrzebuje powłoki, w twoim przypadku bash. Aby wykonać /bin/bash, potrzebuje uprawnień dostępu /bin. bashsam musi przeczytać niektóre rzeczy z /etc(np. /etc/bash.bashrc), więc użytkownik potrzebuje również dostępu do /etc. Zakładając, że użytkownik nie tylko chce kręcić się w tym katalogu, może chcieć przeczytać plik, ale na przykład, aby wykonać vim, potrzebuje również dostępu /usr/bin.
To tylko niewielka demonstracja, jest więcej zależności, np. Tak naprawdę nie wiem, co się stanie, jeśli użytkownik nie będzie miał dostępu do /tmp...

Powinieneś pomyśleć o swoim zamiarze. Czy chcesz tylko, aby ktoś miał dostęp do odczytu / zapisu do części twojego serwisu? Następnie możesz skonfigurować coś takiego jak FTP, aby wyeksportować określony katalog do tego użytkownika. Dzięki temu może czytać / zapisywać te pliki bez dostępu do SSH.
Kolejnym dobrym rozwiązaniem byłoby repozytorium. Na przykład skonfiguruj repozytorium GIT i pozwól użytkownikowi go sklonować. Może wprowadzić zmiany lokalnie i wysłać łatkę. Możesz zdecydować, czy zastosować tę poprawkę, czy też nie, wycofanie łat na błędy jest również bardzo łatwe.

binfalse
źródło
rbashjest przeznaczony do tego właśnie.
bahamat
To nazywa się ograniczoną powłoką . Ale ponieważ Cell-o chce tylko zezwalać na przesyłanie plików, nie jest to właściwe narzędzie.
Gilles 'SO - przestań być zły'