Thứ Bảy, Tháng Sáu 15, 2024
Google search engine
HomelinuxftpPostgreSQL và Proftpd

PostgreSQL và Proftpd

PostgreSQL và Proftpd

Vì vậy, bạn muốn thiết lập một máy chủ ftp, bạn cần có chức năng nâng cao và bạn không biết phải chuyển ở đâu? Hãy thử proftpd.

Phần 1: Thiết lập proftpd với phần phụ trợ postgresql

Hướng dẫn này rất thích hợp, tôi sẽ chỉ đề cập đến proftpd và chỉ bao hàm để làm cho nó hoạt động với Postgres. Hiểu biết cơ bản về proftpd và Postgres được giả định. Hướng dẫn này sẽ giúp bạn thiết lập và chạy proftpd khá nhanh, và nó sử dụng cơ sở dữ liệu, nếu cơ sở dữ liệu đó có các trình kích hoạt, thì khả năng cấu hình này là vô tận.

Nhận Proftpd

Trước tiên, bạn sẽ cần proftpd, tôi sẽ sử dụng Dapper của Ubuntu; có một gói meta được chuẩn bị với sự cho phép của Francesco Paolo Lovergine có tên “proftpd-pgsql,” sẽ thiết lập một bản sao của proftpd được biên dịch với các mô-đun sau. Một lưu ý nhỏ, trong khi proftpd đi kèm với các mod, thì tệp conf là bản soạn thảo proftpd tiêu chuẩn. Tôi thực sự khuyên bạn nên xem tài liệu mod_sql, tài liệu này mặc dù sub-par vẫn hữu ích – các tài liệu trên trang proftpd đã rất cũ hãy sử dụng những tài liệu này để thay thế: Liên kết tới tài liệu. Ngoài ra, hãy mệt mỏi với phiên bản, proftpd hiện ở mức 1.3, mặc dù tôi sẽ sử dụng 1.2.10 – phiên bản được sử dụng trong Dapper

Các mod được biên dịch thành phiên bản proftpd này như sau

mod_core.c
mod_xfer.c
mod_auth_unix.c
mod_auth_file.c
mod_auth.c
mod_ls.c
mod_log.c
mod_site.c
mod_auth_pam.c
mod_quotatab.c
mod_sql.c
mod_sql_postgres.c
mod_quotatab_sql.c
mod_ratio.c
mod_tls.c
mod_rewrite.c
mod_radius.c
mod_wrap.c
mod_quotatab_file.c
mod_delay.c
mod_readme.c
mod_ifsession.c
mod_cap.c

Tiếp tục và ra lệnh để tải proftpd-pgsql:

apt-get install proftpd-pgsql

Thiết lập Quyền.

Đối với mục đích của tôi, (hãy nhớ rằng, tôi là trung tâm của vũ trụ) tất cả những gì tôi cần là cấu trúc một chiều, bởi vì các nhóm được lưu trữ ở một cấp độ khác chứ không phải các quyền unix. Vì vậy, tất cả các tệp phải có quyền tĩnh – tôi chỉ quan tâm đến chủ sở hữu và nhóm của chủ sở hữu. Kế hoạch của tôi là đặt người dùng proftpd mặc định, ftp, thuộc nhóm có tên phù hợp của riêng anh ấy mà tôi sẽ tạo – ‘ftp’. Sau đó, tôi sẽ đưa Postgres trở thành thành viên của nhóm này, hãy xem phần 2 để biết lý do. Tôi cần cả hai để trở thành thành viên của cùng một nhóm và tôi cần thư mục chroot proftpd là 775, để cả nhóm có thể thêm (di chuyển) tệp, tôi cũng tạo thư mục thuộc sở hữu của người dùng ‘ftp’, với nhóm ‘ftp ‘. Tôi đã hoàn thành điều này với tập lệnh sau.

groupadd ftp
usermod -G ftp ftp
usermod -G ftp, postgres postgres
chown ftp: ftp ./ftp_directory/
chmod 775 ./ftp_directory/

Thiết lập Postgres

Bây giờ, chúng ta sẽ chuẩn bị các bảng sql của chúng ta. Tôi thiết kế bằng cách sử dụng các lược đồ và đó là tiền tố của ‘ftp.’ trên các bảng là dành cho. Tôi đã đặt tất cả các bảng của mình vào một giản đồ ftp, có một thứ không có giá trị gì, tôi đã cực kỳ hạn chế quyền đối với dự án này, bởi vì tôi không chắc mod_sql an toàn như thế nào. Khi làm như vậy, tôi đã tạo một người dùng đặc biệt, có tên là proftp, cho proftpd trong cơ sở dữ liệu của tôi (mà nhiều ứng dụng sử dụng hơn proftpd), người dùng này bị hạn chế lựa chọn trên auth_table và chèn trên bảng file_log. Tôi * thực sự * đề nghị bạn áp dụng một số hình thức của chính sách này. Ít nhất thì điều này cũng ngăn chặn được một số mức độ tàn phá của các cuộc tấn công tiêm sql hoặc rò rỉ thông tin trong trường hợp mã mod_sql không an toàn như chúng ta vẫn nghĩ. Google nhanh chóng tiết lộ một vấn đề bảo mật trước đó với cơ sở mã mod_sql. Mỗi truy vấn mà mod_sql gửi đến db được bổ sung bằng mệnh đề “LIMIT 1” và với mod_delay cũng được định cấu hình theo mặc định, tôi thấy điều này đủ cho dự án này.

Tập lệnh sql init của tôi như sau.

ALTER USER proftp MẬT KHẨU KHÔNG ĐƯỢC CẤP CỨU 'dealermadeftp';
TẠO SCHEMA ftp;
CẤP QUYỀN SỬ DỤNG TRÊN SCHEMA ftp CHO proftp;

TẠO BẢNG ftp.users (
        pkid serial KEY CHÍNH,
        văn bản lưới sử dụng KHÔNG ĐẦY ĐỦ ĐỘC ĐÁO,
        văn bản mật khẩu,
        int uid,
        gid int,
        văn bản homedir,
        văn bản vỏ
);
CẤP CHỌN TRÊN ftp.users ĐỂ proftp;
CHÈN VÀO GIÁ TRỊ ftp.users (userid, passwd) ('ecarroll', 'adm1n');
CHÈN VÀO GIÁ TRỊ ftp.users (userid, passwd) ('jgallagher', 'adm1n');

TẠO BẢNG ftp.file_log (
        pkid serial KEY CHÍNH,
        văn bản userid THAM KHẢO ftp.users (userid),
        văn bản abs_path,
        tệp văn bản,
        văn bản dns,
        văn bản time_transaction,
        dấu thời gian ts_in với múi giờ KHÔNG ĐẦY ĐỦ DEFAULT CURRENT_TIMESTAMP
);
CẤP CHÈN TRÊN ftp.file_log VÀO proftp;
CẤP CẬP NHẬT TRÊN BẢNG ftp.file_log_pkid_seq CHO proftp;

Kết nối với cơ sở dữ liệu của bạn và chạy nó với:

i script_name

hoặc, bạn có thể sử dụng send ‘–file script_name’ tới psql như một đối số dòng lệnh

Những người trên cơ sở dữ liệu nhỏ hơn (sử dụng hướng dẫn này với mysql), bạn có thể muốn thay thế văn bản bằng varchar; nhưng, vì thiết kế Postgres không có lợi thế này.

Thiết lập proftpd

Phần này phức tạp và hơi thay đổi nếu bạn sử dụng 1.3 – một lần nữa hướng dẫn này dành cho 1.2.10.

Tôi đã thêm phần này vào conf boilerplate proftpd mặc định của mình, nằm tại /etc/proftpd.conf:

AuthOrder mod_sql.c
SQLAuthTypes Plaintext rỗng
SQLAuthenticate người dùng
SQLConnectInfo [email bảo vệ] proftp dealermadeftp

SQLDefaultUID 110 # THAY ĐỔI CHO NGƯỜI DÙNG FTP CỦA BẠN UID TÌM HIỂU TRONG / etc / passwd
SQLDefaultGID 1001 # THAY ĐỔI CHO NGƯỜI DÙNG FTP CỦA BẠN GID, TÌM HIỂU TRONG / etc / groups
SQLDefaultHomedir / home / ftp
RequestValidShell tắt

SQLUserInfo ftp.users userid passwd uid gid homedir shell

SQLNegativeCache tắt
SQLLogFile / var / log / proftpd-sql
SQLLog STOR newfile
SQLNamedQuery newfile FREEFORM "CHÈN VÀO ftp.file_log (userid, abs_path, file, dns, time_transaction) VALUES ('% U', '% f', '% J', '% V', '% T')"

#% U => userid
#% D => --Không có gì,
#% f => abs_path
#% J => tệp
#% h => dns_remote,% V => dns_local
#% a => remote_ip,% L => local_ip
#% t => giờ địa phương
#% T => transfer_time

* Các biến mẫu được nhận xét và chỉ để bạn tham khảo. Tóm tắt ngắn gọn về tâm sự như sau:

  1. Ở đây chúng tôi đặt AuthOrder, thành mod_sql.c, lần lượt cho phép mod_sql
  2. Tôi đã chọn sử dụng mật khẩu Văn bản rõ hoặc trong trường hợp tôi không chỉ định, hãy cho phép mật khẩu trống. (Sau này tôi sẽ triển khai một trình kích hoạt để SHA1 các mật khẩu trong cơ sở dữ liệu.)
  3. Sau đó, tôi đặt SQLAuthenticate cho người dùng, tôi đã chọn không sử dụng nhóm cho dự án này, Nếu bạn cần thêm thông tin nhóm, có thể tìm thấy thông tin trên các bảng đó tại: Trang web này dành cho tài liệu về nhóm
  4. SQLConnectInfo là dsn ở định dạng “mật khẩu người dùng [email được bảo vệ],”
  5. SQLDefaultUID, SQLDefaultGID, SQLDefaultHomedir, cấu hình mặc định, để phần lớn các cột của tôi thành NULL, tôi sẽ hiếm khi ghi đè điều này.
  6. RequestValidShell cũng được đặt thành tắt, nếu bạn đặt nó thành bật và cấp một trình bao không hợp lệ, bạn sẽ không xác thực được.
  7. SQLUserInfo tương ứng với các bảng Postgres, nó là một ánh xạ theo nghĩa đen, một lần nữa là “ftp.” chỉ định lược đồ cho bảng auth
  8. SQLNegativeCache, lỗi xác thực bộ đệm,
  9. SQLLogFile để ghi nhật ký chi tiết trong khi định cấu hình máy chủ của bạn. Tôi sẽ tắt khi tôi bắt đầu sản xuất
  10. SQLLog chỉ định hành động ftp mà bạn muốn ghi lại, bởi vì người dùng của tôi chỉ có thể tải lên, tôi chỉ ghi nhật ký STOR, định dạng là ‘ftpaction query_to_execute’
  11. SQLNamedQuery Kiểm tra cú pháp trong tài liệu trên tài liệu này để được giải thích rõ hơn, định dạng tôi sử dụng là ‘qryname FREEFORM custom_query_here’, tôi làm điều này phần lớn vì tôi muốn nắm bắt được nhiều biến mẫu của proftpd, có những cú pháp khác đơn giản hơn

Đó là nó. Nếu tất cả đều đúng kế hoạch, bạn nên chuẩn bị và làm việc. Bây giờ khi ai đó tải lên một tệp, đây sẽ là kết quả:

proftpd = # select * from ftp.file_log;
 pkid | userid | abs_path | tập tin | dns | time_transaction | ts_in 
------ + ---------- + ------------------------ + ------- -------- + ------- + ------------------ + -------------- -----------------
    1 | ecarroll | / home / ftp / foo / testfile | / foo / testfile | AMD64 | 0,000 | 2006-06-11 20: 49: 12.623375-05
(1 hàng)

Phần II: Ngoài ‘làm việc’

… Nhưng * làm việc * không bao giờ là đủ, phải không? Hãy tiếp tục trả lời câu hỏi sau được đăng trong câu hỏi thường gặp về cấu hình cho proftpd:
Tôi có thể xoay các tệp ra khỏi thư mục tải lên sau khi tải lên không?

Và câu trả lời, bạn chắc chắn có thể. Tôi sẽ thực hiện điều này thông qua một thủ tục được lưu trữ, theo cách đó các tệp được di chuyển đúng cách – nhanh chóng – mà không cần daemon.

Trước tiên, bạn sẽ cần cài đặt plperlu * un * đáng tin cậy trên hệ thống, điều này có thể được thực hiện với

apt-get install postgresql-plperl-8.1

Sau đó, bạn cần cài đặt plperlu trên cơ sở dữ liệu

createlang plperlu your_database_here

Tiếp theo, chúng ta cần tạo một trình kích hoạt tập lệnh perl nhanh, sẽ xuất hiện trên mỗi lần chèn vào bảng ftp_log của chúng ta

TẠO HOẶC THAY THẾ CHỨC NĂNG ftp_file () QUAY LẠI TRIGGER AS $$
        cảnh báo sử dụng;
        sử dụng Cwd;
        sử dụng File :: Basename;
        sử dụng File :: Spec;
        sử dụng Tệp :: Sao chép;
        di chuyển (
                $ _TD -> {new} {abs_path},
                Tệp :: Spec-> catfile ('/ home / ftp /', basename ($ _ TD -> {new} {file}))
        );
        trở về;
$$ LANGUAGE 'plperlu' VOLATILE;

TẠO TRIGGER ftp_file
        CHÈN TRƯỚC
        BẬT ftp.file_log
        CHO MỖI HÀNG
        THỰC HIỆN QUY TRÌNH ftp_file ()
;

Tập lệnh sql này có thể được cài đặt theo cách giống như tập lệnh trước đó, (tập lệnh được sử dụng để tạo bảng)

admin
adminhttps://khanhle.id.vn/
Mình là Khánh, ngành Mạng truyền thông cũng có thể làm web
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -
Google search engine

Most Popular

Recent Comments