สถานะปัจจุบัน
กำหนดเป็นโฮสต์ที่มีที่อยู่ IPv4 สองแห่งและการเข้าถึง HTTP & FTP สำหรับแต่ละที่อยู่ แต่ละ vhost สามารถเข้าถึงฐานข้อมูล PostgreSQL ได้ การรับรองความถูกต้องของเว็บและ ftp ทำกับฐานข้อมูลที่เกี่ยวข้อง สำหรับ proftpd ฉันใช้การตั้งค่านี้สำหรับแต่ละที่อยู่ IP/vhost ($VALUES ไม่มีตัวแปร แต่ซ่อนค่าจริง):
SQLConnectInfo $VHOST@localhost $SQLUSER $SQLPASS
เข้าสู่ระบบ SQLUserInfo รหัสผ่านเข้าสู่ระบบ 33 33 "CONCAT('/var/www/$VHOST/upload/', id)" "'/bin/bash'"
โดยพื้นฐานแล้วผู้ใช้เว็บทุกคนมีบัญชี ftp ที่โฮสต์เดียวกันพร้อมข้อมูลรับรองเดียวกัน ภายในพวกเขาทำงานเป็น www-data.www-data และแต่ละบัญชีในแต่ละ vhost จะมีโฟลเดอร์แยกต่างหาก ทำงานได้ดี
งาน & ไอเดีย
ไม่ต้องการที่อยู่ IPv4 เพิ่มเติมสำหรับ vhosts เพิ่มเติม (และควรกำจัดที่อยู่ส่วนใหญ่ที่มีอยู่) รับตามที่ลูกค้าต้องการการเข้าถึง ftp และ IPv4 อย่างน้อยอีกสองสามปีข้างหน้า มิฉะนั้น สิ่งต่างๆ จะเป็นเรื่องง่าย
Ftp ไม่มีแนวคิดของ vhosts ดังนั้นวิธีที่ดีที่สุดที่ฉันคิดได้คือการใช้ชื่อบัญชีเช่น $VHOST.$LOGIN (ควรเป็นที่ยอมรับสำหรับลูกค้า) ฉันสามารถแยกชื่อล็อกอินที่จุด ใช้ส่วนแรกเป็นชื่อฐานข้อมูล และส่วนที่สองเป็นชื่อล็อกอิน ไม่มีอะไรจะต้องเปลี่ยนแปลงอีก
ปัญหา
ฉันไม่พบซอฟต์แวร์ใด ๆ ที่รองรับ ฉันไม่เห็นวิธีรวมการตั้งค่าดังกล่าวเข้ากับการกำหนดค่า proftpd และไม่พบ ftp daemon ตัวอื่นที่ยืดหยุ่นกว่า
การพูดนอกเรื่อง: ที่นั่น เป็น สิ่งต่าง ๆ เช่น SQLNamedConnectInfo / SQLNamedQuery และฉันสามารถรับรูปแบบชื่อล็อกอินที่ต้องการรวมถึงการใช้ฐานข้อมูลเฉพาะด้วย:
SQLNamedConnectInfo $VHOST postgres $VHOST@localhost $SQLUSER $SQLPASS
SQLNamedQuery $VHOST SELECT "เข้าสู่ระบบ, รหัสผ่าน, 33, 33, CONCAT('/var/www/$VHOST.epaxios.com/upload/', id), '/bin/bash' จากการเข้าสู่ระบบ WHERE Login=substr('% U', strpos('%U', '.')+1) AND substr('%U', 1, strpos('%U', '.')-1)='$VHOST'" $VHOST
SQLUserInfo กำหนดเอง:/$VHOST
แต่น่าเสียดายที่สิ่งนี้สามารถรวมได้เพียงครั้งเดียว (ในส่วนหลัก มีที่อยู่ IP เพียง 1 รายการ) - ด้วยวิธีการดังกล่าว ฉันจำเป็นต้องทำซ้ำผ่าน vhosts/databases ทั้งหมด อย่างไรก็ตาม...
สิ่งต่อไปที่ฉันดูคือ PAM - มี pam_pgsql แต่ไม่มีสิ่งใดรองรับฐานข้อมูลที่แตกต่างกัน (ไม่ว่าจะขึ้นอยู่กับบางส่วนของชื่อผู้ใช้หรือไม่)
สิ่งสุดท้ายที่ฉันคิดได้คือ libnssมี libnss-pgsql แต่อีกครั้งรองรับการเชื่อมต่อเดียวไปยังตารางเฉพาะ - แน่นอนว่าเป็นกรณีการใช้งานทั่วไปที่สุด แต่ไม่เพียงพอสำหรับฉัน
มีอะไรที่ฉันยังไม่ได้คิด? หรือวิธีการแทรกสคริปต์ขนาดเล็กลงในหนึ่งในโซลูชันเหล่านี้ ท้ายที่สุด ฉันอยู่ห่างจากเป้าหมายเพียงไม่กี่ขั้นตอน