Zezwolić na SFTP, ale zabronić SSH?

94

Zaczynam bardzo małą firmę hostingową dla kilku przyjaciół i małych klientów, nic wielkiego.

Chcę dać moim „klientom” prawo do zarządzania swoimi plikami na serwerze. Nienawidzę FTP, ponieważ nie jest bezpieczny i moim zdaniem jest przestarzały.

Chciałbym więc zezwolić moim użytkownikom na łączenie się za pośrednictwem SFTP, ale nie pozwalać im na łączenie się przez SSH. (Wiem, wiem, SFTP używa SSH). Ale zastanawiałem się, czy to możliwe?

Nie musiałbym więc instalować usługi FTP na serwerze i wszystko byłoby świetnie!

Tommy B.
źródło

Odpowiedzi:

121

Począwszy od wersji 4.9 OpenSSH (niedostępne w Centos 5.x, ale funkcja ChrootDirectory została przeniesiona) ma internal-sftppodsystem:

Subsystem sftp internal-sftp

A następnie zablokuj inne zastosowania:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Dodaj użytkowników do sftponlygrupy. Musisz zmienić katalog domowy użytkownika na z /powodu chroot i /home/userpowinien być własnością root. Ustawiłbym również /bin/falsejako powłokę użytkownika.

Rob Wouters
źródło
Łał! Super-niesamowite! Przetestuję to i wrócę tutaj, aby potwierdzić. Wielkie dzięki!
Tommy B.
+1 za rzecz ChrootDirectory!
Kyle Hodgson
1
Po wykonaniu tej czynności mój użytkownik sftponly nie może uzyskać dostępu przez ssh i jest w stanie połączyć się przez sftp. Jednak w ogóle nie widzi żadnego pliku! Pomimo tych plików mają uprawnienia dla tego użytkownika. :-(
Emilio Nicolás
3
Jeśli chcesz to zrobić i znaleźć wpis w swoim sshd_config z już istniejącym „/ usr / lib / openssh / sftp-server”, sprawdź tutaj: serverfault.com/questions/660160/… - wewnętrzny-sftp jest „nowszy , lepiej i łatwiej ”
Xosofox,
19

Istnieje skorupa scponly, co to robi. Może też chrootować .

Kamień
źródło
Byłoby to świetne, jeśli potrzebujesz zarówno użytkowników SFTP, jak i SSH. Po prostu zastępujesz powłokę w / etc / passwd dla tych, którzy ograniczają się tylko do SFTP.
Dragos
4

Kasa rssh, która jest fałszywą powłoką, która pozwala sftp, ale zaprzecza ssh

Więcej o RSSH

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

Możesz skonfigurować rssh, aby zezwalał / odmawiał innym zachowaniom, takim jak sft, scp itp.

Chris
źródło
Miły. Jest to najprostszy sposób konfiguracji bez dotykania sshd_config. Wystarczy zmienić powłokę w pliku passwd i gotowe.
Tomofumi,
2

Możesz zmodyfikować / etc / passwd i dać temu użytkownikowi fałszywą powłokę, aby nie mógł używać ssh.

Jcisio
źródło
11
Testowałeś to?
splattne
8
Kiedy próbuję ustawić powłokę na działanie /bin/falsebez ssh lub sftp
Brad Mace
2
/ bin / false oznacza, że ​​nie zezwala się na jakiekolwiek logowanie, co nie jest tutaj właściwym podejściem. Akceptowaną odpowiedzią Roba Woutersa jest sposób, w jaki należy ograniczyć użytkowników tylko do SFTP, a nie przez zmianę powłoki. Jeśli chciałbyś zmienić shell @ Stone, odpowiedź byłaby dobrym pomysłem.
jwbensley
1
więc JAKIEJ powłoki należy użyć, zakładając, że / bin / bash jest niedopuszczalny i / bin / false lub / sbin / nologin odmawiają dostępu?
Putnik,
1

Używam metody określania powłoki użytkownika jako / bin / false, jak wspomniano. Musisz jednak upewnić się, że / bin / shell znajduje się w / etc / shells. Potem działa ssh = no ftp = ok.

Używam również vsftpd i dodaję ten
chroot_local_user = YES do /etc/vsftpd/vsftpd.conf, aby ftp-ers nie widział daty innej niż ich własna.

Zaletą tych prostych zmian jest brak irytującej konfiguracji ssh config dla każdego użytkownika.

denpick
źródło
1

Nie zapomnij znaleźć linii UsePAM yesi skomentować:

#UsePAM yes

Bez wyłączenia tej opcji serwer SSH ulegnie awarii podczas ponownego ładowania / ponownego uruchamiania. Ponieważ nie potrzebujesz wymyślnych funkcji PAM, w porządku.

Hudson Santos
źródło
0

Konfiguracja ssh włączyć tylko SFTP dla wybranych użytkowników, jest to dobry pomysł i działa prawidłowo, pod warunkiem, że zainstalować albo scponlyalbo rssh.

rsshdziała dobrze, chyba że musisz skonfigurować więzienie, w tym przypadku postaraj się postępować zgodnie z instrukcjami dostarczonymi przez instrukcje CHROOT jest szalony, co prowadzi do „kopiowania” dużych części plików wykonywalnych systemu i biblioteki tuż pod „więzieniem każdego użytkownika”, w tym rsshsamej powłoki. Jest to metoda marnująca przestrzeń.

scponly wymaga głębokiego zrozumienia konfiguracji, co prowadzi do stale występującego problemu odrzucania loginu w przypadku konfiguracji więzienia.

Najprostszym sposobem, aby umożliwić funkcjonalność „ftp” z prawidłowo działającym więzieniem, wsparcie SSL / TLS dla bezpiecznych transakcji i logowania, jest użycie „starego, ale działającego” VSFTPD, który instaluje się szybko i czysto i oferuje wszystkie możliwości konfiguracji w razie potrzeby i, na koniec ale nie mniej ważne: to działa!

Maurizio.

Maurizio
źródło
0

Niestety wszystkie odpowiedzi są bardzo mylące: wykonaj następujące czynności:

  1. Najpierw utwórz sftp użytkownika i grupę sftp

  2. Utwórz osobny katalog jako root dla plików SFTP: sudo mkdir -p /home/sftpdir

  3. Mieć przetestowany plik sshd_config, który ze względów bezpieczeństwa zezwala na SSH przez port 22, ale także SFTP na losowym porcie
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Uruchom ponownie i sprawdź status usługi sshd

    usługa sudo sshd restart

    stan usługi sshd

  2. Utwórz plik Shell. Dodaj wykonanie, aby wyświetlić komunikat powiadomienia

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "To konto jest ograniczone tylko do dostępu SFTP."' | sudo tee -a / bin / sftponly

  3. Nadaj uprawnienia do wykonywania i dołącz do pliku muszli

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. w końcu przetestuj i nie powinieneś być w stanie się połączyć.

  5. Szablon do użycia klienta SFTP z kluczem SSH i podstawową szczegółowością:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

Andres Leon Rangel
źródło