Jak utworzyć użytkownika FTP z określonym / dir / access tylko w instalacji Centos / linux


44

Więc jestem na instalacji VPS - CentOS Linux. Mam vsFTPd na serwerze. Obecnie mam dostęp SFTP do serwera za pośrednictwem mojego użytkownika root, ale teraz próbuję utworzyć nowego użytkownika z dostępem FTP do określonego katalogu tylko na serwerze, wykonałem następujące czynności:

1. mkdir /var/www/mydomain.com
2. mkdir /var/www/mydomain.com/html
3. useradd <-username>
4. passwd <-username>
5. chown –R <-username> /var/www/mydomain.com
5. groupadd <-groupname>
6. gpasswd -a <-username> <-groupname>
7. chgrp -R <-groupname> /var/www/mydomain.com
8. chmod -R g+rw /var/www/mydomain.com

Mam problem z utworzeniem użytkownika, który miałby TYLKO dostęp /var/www/mydomain.com - zauważyłem, że użytkownik poprawnie loguje się do odpowiedniego folderu, jednak użytkownik może następnie przeglądać „powrót” do innych katalogów. Chcę, aby użytkownik został w określonym folderze i nie mógł „przeglądać” z powrotem .

Jakieś pomysły?

Znalazłem różne artykuły na temat chrootowania, ale po prostu nie wymyśliłem, aby użyć go w powyższych krokach.


digitalocean.com/community/tutorials/… Możesz to zrobić, aby rozwiązać problem
Jack

dla tych, którzy są na Ubuntu 18 tutaj jest konkretna wersja digitalocean.com/community/tutorials/…
Dung

Odpowiedzi:


39

To całkiem proste.

Musisz dodać następującą opcję do pliku vsftpd.conf

chroot_local_user=YES

Dokumentacja w pliku konfiguracyjnym jest zrozumiała:

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().

Oznacza to, że użytkownik będzie miał dostęp do folderu skonfigurowanego jako HOME użytkownika. Poniżej mam przykład wpisu hasła użytkownika:

upload_ftp:x:1001:1001::/var/www/sites/:/bin/bash

Ustaw katalog domowy użytkownika za pomocą następującego polecenia

usermod -d /var/www/my.domain.example/ exampleuser

Uwaga: W moim przykładzie ten użytkownik jest również prawidłowym użytkownikiem dla niektórych zaplanowanych zadań w systemie Linux. Jeśli nie masz takiej potrzeby, zmień powłokę użytkownika na /sbin/nologinzamiast bash.


Cześć nwildner! Dziękuję bardzo za poświęcenie czasu na udzielenie mi odpowiedzi w tej sprawie. Więc w moim pliku vsftpd.conf dodałem następujący wiersz „chroot_local_user = YES” - wtedy, jak rozumiem, muszę dodać wiersz podobny do tego, który wyświetlasz mojemu użytkownikowi? Muszę przyznać, że nie jestem do końca pewien, co tam napisać na podanym przykładzie. „1001” itd. co to jest? Załóżmy, że mój użytkownik nazywa się: „im_a_linux_noob”, a katalog dla tego użytkownika to: „/var/www/mydomain.com” - jak by to wyglądało?
user1231561,

I czy byłbym w stanie to zrobić bez żadnych dodatkowych czynności, które zrobiłem w swoim poście? Więc zrobienie 1-8, a następnie dodanie tego, co opisujesz, powinno załatwić sprawę?
user1231561,

Cześć. Powyższy przykład jest tylko linią (oczywiście zmodyfikowaną) /etc/passwdpliku, która reprezentuje użytkownika o nazwie upload_ftp, 1001: 1001 to jego identyfikator użytkownika i identyfikator grupy, / var / www / sites to katalog domowy użytkownika (i parametr, który vsftpd czyta z) i / bin / bash, powłoka. Prawdopodobnie czego brakuje w Twoim przypadku jest to katalog domowy dla użytkownika, a to może być rozwiązany za pomocą następującego polecenia: usermod -d /var/www/mydomain.com <username>. Pozdrawiam :)

3
Tak bardzo dziękuję. Jeden problem jednak. Działa poprawnie logowanie przez normalny FTP, jednak kiedy loguję się jako SFTP - to mogę ponownie przeglądać - jakieś pomysły?
user1231561,

1
Z pewnością dlatego, że sftp jest obsługiwany przez serwer ssh, a nie przez serwer ftp. W „surowy” sposób: SFTP = SSH + FTP; FTPS = FTP + SSL. Jest tutaj wątek na temat sftp, a ja zacytuję go, aby powielić temat aviod, ok? ;) unix.stackexchange.com/a/64541/34720

6

Po zmianie konfiguracji na uwzględnienie chroot_local_user=YES

Możesz zmienić powłokę użytkownika na, aby w /usr/sbin/nologinprzypadku wycieku hasła zminimalizować ryzyko (ustaw także katalog domowy). Powłoka musi również znajdować się na liście, w /etc/shellsprzeciwnym razie uwierzytelnianie zakończy się niepowodzeniem.

usermod -d /var/www/my.domain.example -s / usr / sbin / nologin exampleuser

-d, --home HOME_DIR Nowy katalog logowania użytkownika. Jeśli podano opcję -m, zawartość bieżącego katalogu domowego zostanie przeniesiona do nowego katalogu domowego, który jest tworzony, jeśli jeszcze nie istnieje.

-s, --shell SHELL Nazwa nowej powłoki logowania użytkownika. Ustawienie tego pola na puste powoduje, że system wybiera domyślną powłokę logowania.

https://security.appspot.com/vsftpd/FAQ.txt


4

Oto kroki, aby skonfigurować użytkownika i pozwolić mu na dostęp tylko przez FTP (tj. Bez SSH), a także ograniczyć dostęp do określonego katalogu (użytkownika domowego) w proftpd :

  1. Dodaj nowego użytkownika: adduser newusername

  2. Ustaw hasło: passwd newusername

  3. Zmień katalog domowy użytkownika z domyślnego na nowy folder:

    usermod -d /target/directory username

  4. Edytuj shellsplik: vi /etc/shellsi dodaj /dev/nullna końcu

  5. Zmodyfikuj newusernamewpis w passwdpliku: vi /etc/passwddodaj /./przed, newusernameaby wpis wyglądał tak:

    newusername:x:502:502::/home/ftp/./newusernamehomedirectory/:/dev/null

    Szczegóły kroków 4 i 5 tutaj:

  6. Edytuj /etc/proftpd/proftpd.confplik i odkomentuj linięDefaultRoot ~



-4

Uruchom to polecenie:

useradd -d ftp_user:chown 711 /etc/init.d/

2
Zastanów się nad rozszerzeniem swojego postu, aby mieć przynajmniej przydatne wyjaśnienia lub dokumentację.
HalosGhost

To okropna odpowiedź. Zasadniczo dajesz użytkownikowi ftp pełny dostęp do katalogu /etc/init.d/ - całkowite szaleństwo. 711 wyjaśnione - permissions-calculator.org/decode/0711
Tisch
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.