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) và 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ó Là 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.