Kiedy pisaliśmy jak połączyć się z serwerem (Linux) za pomocą protokołu SSH/SCP, tak by móc swobodnie przesyłać pliki, bez potrzeby instalowania serwera FTP, co nie tylko jest wygodniejsze – te same konta, ale i dużo bezpieczniejsze…

Dziś postaram się rozwinąć temat użytkowników, tak byśmy mogli udzielić dostępu do plików innym użytkownikom, ale bez otwierania przed nimi dostępu do shella (wiersza poleceń).

Serwer SSH/SCP jako serwer SFTP

Teoretycznie nic nie stoi na przeszkodzie, by przy standardowych ustawieniach SSH dodać nowego użytkownika, i niezbędne dane (login i hasło) przekazać koledze/znajomemu, który np. za pośrednictwem WinSCP będzie mógł połączyć się z naszym serwerem i przeglądać pliki… naszego serwera.

Ale sprawdzi się to tylko wtedy, gdy takiej osobie ufamy, gdyż ma ona dostęp do wszystkich plików na serwerze (oczywiście z ograniczeniami wynikającymi z parametrów konta), jak i może się połączyć z naszym serwerem po SSH.

Również w przypadku mniej zaawansowanych osób zazwyczaj nie potrzebujemy – a wręcz przeciwnie – wyświetlać całego drzewa plików serwera, by nie wprowadzać niepotrzebnego zamętu…

Całość pokażę na przykładzie systemu Debian i Raspberry Pi, ale z ew. lekkimi modyfikacjami powinno to działać również w innych systemach.

Grupa użytkownik z ograniczeniami

Dlatego utworzymy nową grupę użytkowników (np. sftp), która będzie miała pewne ograniczenia:

  • Dostęp tylko do zdefiniowanego katalogu, widzianego jako katalog główny (/)
  • Możliwość zapisywania plików do zdefiniowanego katalogu w swoim katalogu domowym
  • Brak dostępu do shella (powłoki, wiersza poleceń)

Na początek tworzymy nową grupę – w naszym wypadku będzie to grupa „sftp”:

sudo groupadd sftp

Nastepnie tworzymy nowego użytkownika, który w naszym przypadku nazywa się „webinsider”, a jego katalog domowy to „/sftp/webinsider”:

sudo useradd -g sftp -d /sftp/webinsider -s /dev/null webinsider

Na koniec jeszcze ustawiamy hasło:

sudo passwd webinsider

Możemy też zmodyfikować/dostosować już istniejącego użytkownika:

sudo usermod -g sftp -d /sftp/użytkownik -s /dev/null użytkownik

I nasz użytkownik (prawie gotowy)

Shell bez shella, czyli powłoka bez powłoki

Jak już wspomniałem – nasz użytkownik nie będzie mógł korzystać z shella, dlatego za pomocą tego fragmentu podstawiliśmy mu nieistniejący:

-s /dev/null webinsider

Może być jeszcze konieczne dodanie naszego fikcyjnego shella do listy dostępnych w systemie powłok:

sudo nano etc/shells

I gdzieś na końcu dodajemy linijkę:

/dev/null

Konfiguracja serwera SSH

Teraz musimy jeszcze zmodyfikować parametry serwera SSH, i w tym celu edytujemy plik konfiguracyjny:

sudo nano /etc/ssh/sshd_config

Znajdujemy linijkę:

Subsystem sftp /usr/lib/openssh/sftp-server

I zmieniamy ją na:

Subsystem sftp internal-sftp

Teraz jeszcze na końcu dodajemy:

Match Group sftp
ChrootDirectory /sftp/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp

I możemy zrestartować serwer SSH:

sudo /etc/init.d/ssh restart

Katalogi i uprawnienia (do nich)

W naszej przykładowej konfiguracji wszystkie pliki będą przechowywane w katalogu /sftp, w którym każdy użytkownik będzie miał swój indywidualny katalog, w którym znajdzie również katalog „uploads” do wgrywania plików.

Dlatego teraz utworzymy te katalogi:

sudo mkdir /sftp/
sudo mkdir /sftp/webinsider/
sudo mkdir /sftp/webinsider/uploads

I nadamy odpowiednie uprawnienia:

sudo chown -R root:root /sftp/
sudo chown -R webinsider:sftp /sftp/webinsider/uploads

Tutaj od razu małe wyjaśnienie, dlaczego stosujemy podkatalog „uploads”, a nie bezpośrednio katalog z nazwą użytkownika – ma to związek z ograniczeniami wynikającymi z bezpieczeństwa, które w tym przypadku są nam narzucane „odgórnie” i nie ma co z nimi kombinować, bo skończy się to błędem logowania danego użytkownika.

Stąd:

  • Właścicielem katalogu /sftp/ jest użytkownik „root”
  • Użytkownik „webinsider” ma dostęp „do doczytu” do katalogu /sftp/webinsider, który jest jego katalogiem domowym
  • Użytkownik „webinsider” w swoim katalogu domowym ma katalog „uploads” (oczywiście jego nazwa może być dowolna), do którego może zapisywać pliki

A na „prawie sam koniec” na jednym ekranie szybkie dodawanie kolejnego użytkownika:

linux_scp-jako-sftp_nowy-uzytkownik01

Łączymy się

Gdy wszystko gotowe – można przystąpić do konfiguracji połączenia.

Wszystkie parametry będą identyczne jak przy połączeniu SCP/SSH (adres serwera, port), z tym, że jako typ połączenia wybieramy „SFTP” i oczywiście wpisujemy poprawną nazwę użytkownika i hasło :-)

W przypadku próby połączenia po SSH (np. PuTTY) nasz użytkownik po autoryzacji utraci połączenie.

Oczywiście przed przekazaniem danych dostępowych nowemu użytkownikowi warto samodzielnie sprawdzić, czy wszystko działa tak, jak sobie założyliśmy.

A jak już dany użytkownik nie będzie potrzebny, warto go zablokować lub skasować, o czym przeczytasz na tej stronie…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk