Điểm:1

Xác thực ftp dựa trên nhiều cơ sở dữ liệu (postgres)

lá cờ iq

Tình trạng hiện tại

Given là một máy chủ có một vài địa chỉ IPv4 và quyền truy cập HTTP & FTP cho mỗi địa chỉ; mỗi vhost có quyền truy cập vào cơ sở dữ liệu PostgreSQL. Xác thực web và ftp được thực hiện đối với cơ sở dữ liệu tương ứng; đối với proftpd, tôi sử dụng thiết lập này cho từng Địa chỉ IP/vhost ($VALUES không phải là biến nhưng ẩn giá trị thực):

SQLConnectInfo $VHOST@localhost $SQLUSER $SQLPASS
Đăng nhập SQLUserInfo Mật khẩu đăng nhập 33 33 "CONCAT('/var/www/$VHOST/upload/', id)" "'/bin/bash'"

Vì vậy, về cơ bản, mọi người dùng web đều có tài khoản ftp trên cùng một máy chủ với cùng thông tin đăng nhập; bên trong chúng hoạt động như www-data.www-data và mỗi tài khoản trên mỗi vhost có một thư mục riêng. Hoạt động tốt.

Nhiệm vụ & Ý tưởng

Không cần thêm địa chỉ IPv4 cho các vhost bổ sung (và tốt nhất là loại bỏ hầu hết các địa chỉ hiện có). Giả sử rằng khách hàng yêu cầu quyền truy cập ftp(s) IPv4 trong ít nhất vài năm tới - nếu không mọi thứ sẽ dễ dàng.

Ftp không có khái niệm về vhost, vì vậy cách tiếp cận tốt nhất mà tôi có thể nghĩ ra cho đến nay là sử dụng các tên tài khoản như $VHOST.$LOGIN (khách hàng có thể chấp nhận được). Sau đó, tôi có thể tách tên đăng nhập ở dấu chấm, sử dụng phần đầu tiên làm tên cơ sở dữ liệu và phần thứ hai làm tên đăng nhập. Không có gì khác sẽ cần phải được thay đổi.

Vấn đề

Tôi không thể tìm thấy bất kỳ phần mềm hỗ trợ nó. Tôi cũng không thấy cách nào để tích hợp một thiết lập như vậy vào cấu hình proftpd và tôi cũng không tìm thấy một trình nền ftp nào khác linh hoạt hơn.

Lạc đề: Có chẳng hạn như SQLNamedConnectInfo/SQLNamedQuery và tôi có thể nhận được định dạng mong muốn của tên đăng nhập cộng với việc sử dụng cơ sở dữ liệu cụ thể với điều đó:

SQLNamedConnectInfo $VHOST postgres $VHOST@localhost $SQLUSER $SQLPASS
SQLNamedQuery $VHOST CHỌN "Đăng nhập, Mật khẩu, 33, 33, CONCAT('/var/www/$VHOST.epaxios.com/upload/', id), '/bin/bash' TỪ đăng nhập TẠI ĐÂU Login=substr('% U', strpos('%U', '.')+1) AND substr('%U', 1, strpos('%U', '.')-1)='$VHOST'" $VHOST
SQLUserInfo tùy chỉnh:/$VHOST

Nhưng thật không may, điều này chỉ có thể được đưa vào một lần (trong phần chính, chỉ có 1 Địa chỉ IP) - với cách tiếp cận như vậy, tôi cần phải lặp lại tất cả các vhost/cơ sở dữ liệu tuy nhiên...

Điều tiếp theo tôi đã xem xét là PAM - có pam_pgsql, nhưng không có thứ gọi là hỗ trợ các cơ sở dữ liệu khác nhau (dù có phụ thuộc vào các phần của tên người dùng hay không).

Điều cuối cùng tôi có thể nghĩ đến là libnss.Có libnss-pgsql, nhưng một lần nữa, nó chỉ hỗ trợ một kết nối duy nhất đến một bảng chuyên dụng - tất nhiên là trường hợp sử dụng điển hình nhất, nhưng không đủ đối với tôi.

Có điều gì tôi chưa nghĩ đến không? Hoặc một số cách để chèn một tập lệnh nhỏ vào một trong những giải pháp này? Rốt cuộc, tôi chỉ còn cách mục tiêu của mình một vài thao tác chuỗi.

Castaglia avatar
lá cờ id
Các máy khách FTP mới hơn hỗ trợ lệnh `HOST` (xem [RFC 7151](https://datatracker.ietf.org/doc/html/rfc7151)), lệnh này triển khai vhosting dựa trên tên cho FTP. Ngoài việc hỗ trợ `HOST`, cho FTPS, ProFTPD còn hỗ trợ [TLS SNI](https://en.wikipedia.org/wiki/Server_Name_Indication) cho vhost FTPS dựa trên tên.
lá cờ iq
@Castaglia thật đáng buồn, điều này cũng tốt như việc chuyển sang IPv6: hoàn hảo, nhưng sẽ không hoạt động. Tôi đã thay đổi môi trường thử nghiệm và liên hệ với khoảng 10 khách hàng am hiểu kỹ thuật nhất: Hai phản ứng như "uh?", im lặng và chưa có một kết nối thành công nào. Nếu tôi không tìm thấy giải pháp nào không yêu cầu bất kỳ thay đổi (kỹ thuật) nào ở máy khách, thì tôi hoàn toàn không tìm thấy giải pháp nào :(
Castaglia avatar
lá cờ id
Tôi hiểu. Một khả năng khác có thể là sử dụng proxy như [`pgpool`](https://www.pgpool.net/), trong đó proxy ánh xạ tên người dùng của khách hàng tới cơ sở dữ liệu phụ trợ sẽ được sử dụng?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.