Puncte:1

Autentificarea ftp împotriva mai multor baze de date (postgres).

drapel iq

Starea curenta

Dată este o gazdă cu câteva adrese IPv4 și acces HTTP și FTP pentru fiecare adresă; fiecare vhost are acces la o bază de date PostgreSQL. Autentificarea web și ftp se face față de baza de date respectivă; pentru proftpd folosesc această setare pentru fiecare adresă IP/vhost ($VALUES nu sunt variabile, dar ascund valori reale):

SQLConnectInfo $VHOST@localhost $SQLUSER $SQLPASS
Conectare SQLUserInfo Parola de conectare 33 33 "CONCAT('/var/www/$VHOST/upload/', id)" "'/bin/bash'"

Deci, practic, fiecare utilizator web are un cont ftp la aceeași gazdă cu aceleași acreditări; intern funcționează ca www-data.www-data și fiecare cont de pe fiecare vhost are un folder individual. Merge bine.

Sarcină și idee

Nu aveți nevoie de mai multe adrese IPv4 pentru vhost-uri suplimentare (și, de preferință, scăpați de majoritatea celor existente). Luați ca dat că clienții solicită acces ftp(e). și IPv4 pentru cel puțin următorii doi ani - altfel lucrurile ar fi ușoare.

Ftp nu are conceptul de vhosts, așa că cea mai bună abordare la care m-am putut gândi până acum este să folosesc nume de cont precum $VHOST.$LOGIN (ar trebui să fie acceptabilă pentru clienți). Apoi aș putea împărți numele de autentificare la punct, să folosesc prima parte ca nume de bază de date și a doua parte ca nume de autentificare. Nimic altceva nu ar trebui schimbat.

Problemă

Nu găsesc niciun program care să o susțină. Nici nu văd o modalitate de a integra o astfel de configurare în configurația proftpd și nici nu am găsit un alt daemon ftp mai flexibil.

Digresiune: Acolo este cum ar fi SQLNamedConnectInfo/SQLNamedQuery și pot obține formatul dorit al numelui de autentificare plus utilizarea unei baze de date specifice cu asta:

SQLNamedConnectInfo $VHOST postgres $VHOST@localhost $SQLUSER $SQLPASS
SQLNamedQuery $VHOST SELECT "Login, Password, 33, 33, CONCAT('/var/www/$VHOST.epaxios.com/upload/', id), '/bin/bash' FROM login WHERE Login=substr('% U', strpos('%U', '.')+1) AND substr('%U', 1, strpos('%U', '.')-1)='$VHOST'" $VHOST
SQLUserInfo personalizat:/$VHOST

Dar, din păcate, aceasta poate fi inclusă o singură dată (în secțiunea principală, există doar 1 adresă IP) - cu o astfel de abordare, ar trebui să iterez prin toate vhost-urile/bazele de date, totuși...

Următorul lucru la care m-am uitat a fost PAM - există pam_pgsql, dar nu există suport pentru diferite baze de date (în funcție de părțile numelui de utilizator sau nu).

Ultimul lucru la care m-am putut gândi a fost libnss.Există libnss-pgsql, dar din nou acceptă doar o singură conexiune la un tabel dedicat - desigur, cel mai tipic caz de utilizare, dar nu suficient pentru mine.

Există ceva la care nu m-am gândit? Sau o modalitate de a insera un script mic într-una dintre aceste soluții? La urma urmei, sunt la doar câteva operații cu șir distanță de obiectivul meu.

Castaglia avatar
drapel id
Clienții FTP mai noi acceptă comanda `HOST` (consultați [RFC 7151](https://datatracker.ietf.org/doc/html/rfc7151)), care implementează vhosting bazat pe nume pentru FTP. Pe lângă faptul că acceptă `HOST`, pentru FTPS, ProFTPD acceptă și [TLS SNI](https://en.wikipedia.org/wiki/Server_Name_Indication) pentru vhost-uri FTPS bazate pe nume.
drapel iq
@Castaglia, din păcate, este la fel de bun ca trecerea la IPv6: perfect, dar nu merge. Am schimbat mediul de testare și am contactat ~10 clienți cei mai conștienți din punct de vedere tehnic: Două reacții precum „uh?”, tăcere în caz contrar și nicio conexiune reușită încă. Daca nu gasesc o solutie care sa nu necesite modificari (tehnice) la client, nu am gasit deloc solutie :(
Castaglia avatar
drapel id
Înțeleg. O altă posibilitate ar putea fi utilizarea unui proxy precum [`pgpool`](https://www.pgpool.net/), unde proxy-ul mapează numele de utilizator al clientului la baza de date backend care urmează să fie utilizată?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.