Korzystam ze stabilnej wersji Debiana i chcę ustanowić następujące środowisko dla użytkowników w mojej grupie „sftponly”:
- osadzony w więzieniu
- można przesyłać za pomocą SFTP
- może przesyłać z SCP
- nie można zalogować się interaktywnie za pomocą SSH
Z moich eksperymentów i badań wynika, że następująca zwrotka w sshd_config prowadzi mnie tam w 90%:
Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
To daje mi więziony SFTP i brak SSH, co jest dobre. Ale wyłącza również SCP, co jest mniej niż idealne, ponieważ sporo klientów to starsze, skrypty, które używają SCP zamiast SFTP (serwer, który zastępujemy, obsługuje oba protokoły), a ponieważ ci klienci nie są pod naszą kontrolą i łatwo zmodyfikowane, prawdopodobnie nie jest możliwe całkowite wyłączenie SCP.
Ma to sens, że ta konfiguracja wyłączyłaby SCP, ponieważ przychodzące połączenia SCP powodują, że sshd odradza proces `scp 'za pośrednictwem powłoki logowania użytkownika, tak jak ten użytkownik. Wydaje się, że to samo zwykle dotyczy SFTP, gdyby nie specjalny moduł obsługi „wewnętrznego sftp”.
Przypuszczam, że moje pytanie brzmi: czy istnieje sposób na uzyskanie takiego samego efektu jak „wewnętrzny-sftp”, ale w przypadku SCP, bez uciekania się do korzystania z narzędzi innych firm, takich jak scponly i rssh? Naprawdę fajną rzeczą w „Internal-sftp” jest to, że nie wymaga konfigurowania więzienia z plikami pomocniczymi lub radzenia sobie z potencjalnie możliwymi do wykorzystania plikami binarnymi setuid stron trzecich (w szczególności rssh ma historię exploitów).
Odpowiedzi:
Spójrz na rssh, który jest alternatywną powłoką, która pozwala na ograniczony dostęp do systemu.
Za pomocą pliku rssh.conf można skonfigurować, które polecenia mogą być używane dla poszczególnych użytkowników lub całego systemu
Alternatywnie możesz użyć scponly do robienia tego, co chcesz. Działa jak opakowanie pakietu ssh i umożliwia przesyłanie plików, ale nie dostęp do powłoki.
źródło
Czy musisz to zrobić przez ssh?
JEŚLI możesz spróbować ustawić ich powłokę na:
I upewnij się, że dodałeś powyższe do / etc / shells
Jeśli chcesz zrezygnować z korzystania z wbudowanych kont, możesz skonfigurować proftpd
Konfiguruję bezpieczny SFTP za pomocą proftpd. skompilowane proftpd tak:
./configure --prefix = / usr --sysconfdir = / etc --with-modules = mod_sftp
Można skorzystać z tego artykułu poniżej i kilku innych informacji na temat jego konfiguracji w Google:
http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html
źródło
Obawiam się, że nie ma nic równie łatwego lub niezawodnego z OpenSSH, ponieważ, jak zauważyłeś, jest wbudowany serwer SFTP, ale nie ma wbudowanego serwera SCP.
Ostrzeżenie: sugestia Vince'a Berka jest zła z wielu powodów:
... i tak dalej. Takie podejście jest po prostu zbyt kruche.
źródło
To narzędzie innej firmy, które nie wchodzi w zakres pytania, ale pomyślałem, że i tak zasługuje na wzmiankę.
Jailkit: https://olivier.sessink.nl/jailkit/
Posiada kolekcję narzędzi ułatwiających konfigurowanie więzów użytkownika - kopiowanie plików binarnych i bibliotek do więzienia oraz konfigurowanie rejestrowania z wnętrza więzienia do systemu operacyjnego. Użyłem go do budowania chroots tylko dla sftp / scp / rsync.
Jest również wyposażony w
jk_lsh
(jailkit limited shell), którego można używać poza więzieniem, aby ograniczyć polecenia, które użytkownik może uruchamiać, jeśli np. Chcesz zezwolić na scp / sftp / rsync tylko bez chroota.źródło
Oto sztuczka, jak wykonać tę stronę serwera. Ustaw powłokę użytkowników, powiedzmy, bash:
Teraz utwórz w swoim katalogu głównym plik „.bash_profile” z następującym wierszem:
Powoduje to, że sesje nieinteraktywne (takie jak „scp”) są kontynuowane. Jeśli jednak spróbują się zalogować „ssh”, wywoływane jest „wyjście”, a połączenie zostaje zamknięte.
Upewnij się, że nie mogą „sftp” nowego „.bash_profile” w swoich katalogach domowych!
Mam nadzieję, że to pomaga!
źródło