Cấu hình Quota trong ProFTPD

Quota – hạn ngạch – là giới hạn về số lượng tập tin, hoặc số lượng Byte dữ liệu mà người dùng được phép upload, download bên trong hệ thống ProFTPD.

Dung lượng lưu trữ trong hệ thống không phải là vô hạn, với những hệ thống FTP phục vụ cho hàng ngàn người dùng, nếu như không giới hạn dung lượng được phép lưu trữ (quota) với từng tài khoản người dùng thì chúng ta sẽ sớm phải đối mặt với tình trạng thiếu hụt không gian lưu trữ.

Phần lớn hệ thống Unix hỗ trợ quản lý hạn ngạch theo hệ điều hành  (OS) và hạn ngạch theo hệ thống tập tin (filesystem). Điều này có thuận lợi là trong suốt với các ứng dụng như ProFTPD, nghĩa là các ứng dụng không cần lo lắng về việc duy trì và thực thi hạn ngạch. Kernel hoặc filesystem sẽ xử lý việc đó. Một bất lợi đối với quản lý hạn ngạch theo OS là không phải  tất cả Unix kernel và filesystem đều như nhau. Nó cũng dựa trên từng người dùng có user ID của riêng họ. Trong trường hợp với Virtual Users trong ProFTPD, nhiều người dùng ảo có thể có cùng 1 user ID, điều này gây ra nhiều vấn đề cho hệ thống quản lý hạn ngạch truyền thống của Unix.

Mod_quotatab là module thực hiện việc quản lý hạn ngạch trong ProFTPD. Module này là 1 phần của ProFTPD và được áp dụng cho tất cả các kernel và filesystem của Unix hỗ trợ ProFTPD, và có khả năng xử lý với các virtual user.

1. Cài đặt ProFTPD 

ProFTPD 1.2.x1.3.x mặc định không được biên dịch với module mod_quotatab, nếu chúng ta cài đặt ProFTPD từ mã nguồn thì cần biên dịch ProFTPD với tùy chọn –with-modules=mod_quotatab:…, trong đó:

  • mod_quotatab_file => Quản lý hạn ngạch dựa trên tập tin.
  • mod_quotatab_ldap => Quản lý hạn ngạch dựa trên LDAP.
  • mod_quotatab_radius => Quản lý hạn ngạch dựa trên RADIUS.
  • mod_quotatab_sql => Quản lý hạn ngạch dựa trên SQL.

Vd:

–       Nếu chúng ta muốn quản lý hạn ngạch theo tập tin thì chúng ta biên dịch ProFTPD với tùy chọn sau:

# ./configure --with-modules=mod_quotatab:mod_quotatab_file

–       Trong trường hợp chúng ta muốn sử dụng tất cả các phương thức quản lý hạn ngạch ở trên, ta biên dịch ProFTPD như sau:

# ./configure --with-modules=mod_quotatab:mod_quotatab_file:mod_quotatab_ldap:mod_quotatab_radius:mod_quotatab_sql

Lưu ý: Nếu chúng ta cài đặt  từ Yum thì module mod_quotatab đã được biên dịch cùng với ProFTPD.

2. Cấu hình quota trong ProFTPD

2.1 Quản lý hạn ngạch theo tập tin

–       Cấu hình ProFTPD.

# vi /etc/proftpd.conf
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c

<IfModule mod_quotatab.c>
    QuotaEngine       on
    QuotaLog          /var/log/proftpd/quota.log
    QuotaOptions      ScanOnLogin
<IfModule mod_quotatab_file.c> # Using a file-based limit table QuotaLimitTable file:/usr/local/proftpd/ftpquota.limittab # Using a file-based tally table QuotaTallyTable file:/usr/local/proftpd/ftpquota.tallytab </IfModule> </IfModule>

–       Tạo các tập tin quản lý

# mkdir /usr/local/proftpd

# chown proftpd:proftpd /usr/local/proftpd
# ftpquota --create-table --type=limit --table-path=/usr/local/proftpd/ftpquota.limittab
# ftpquota --create-table --type=tally --table-path=/usr/local/proftpd/ftpquota.tallytab

–       Khởi động lại ProFTPD

# /etc/init.d/proftpd restart

–       Ở trên chúng ta vừa tạo 2 bảng là:

  • QuotaLimitTable (nằm trong tập tin ftpquota.limittab) => chứa thông tin về giới hạn số lượng tập tin hoặc số lượng byte được phép upload, download của các tài khoản.
  • QuotaTallyTable (nằm trong tập tin ftpquota.tallytab) => chứa thông tin về số lượng tập tin hoặc số lượng byte đã được upload, download của các tài khoản tính đến thời điểm hiện tại.

–       Tạo thông tin người dùng trong 2 bảng trên.

# ftpquota --add-record --type=limit --name=ftpuser --quota-type=user --table-path=/usr/local/proftpd/ftpquota.limittab
# ftpquota --add-record --type=tally --name=ftpuser --quota-type=user --table-path=/usr/local/proftpd/ftpquota.tallytab

–       Cấu hình giới hạn số lượng tập tin được phép upload, download  cho người dùng

# ftpquota --update-record --type=limit --name=ftpuser --quota-type=user --files-upload=100 --files-download=250  --table-path=/usr/local/proftpd/ftpquota.limittab
# ftpquota --show-record --type=limit --name=ftpuser quota-type=user --table-path=/usr/local/proftpd/ftpquota.limittab

-------------------------------------------
 Name: ftpuser
 Quota Type: User
 Per Session: False
 Limit Type: Hard
 Uploaded bytes: unlimited
 Downloaded bytes: unlimited
 Transferred bytes: unlimited
 Uploaded files: 100
 Downloaded files: 250
 Transferred files: unlimited

–       Cấu hình số lượng byte được phép upload, download của người dùng.

# ftpquota --update-record --type=limit --name=ftpuser --quota-type=user bytes-upload=0 --bytes-download=2 --units=Gb --table-path=/usr/local/proftpd/ftpquota.limittab
# ftpquota --show-record --type=limit --name=ftpuser --quota-type=user --table-path=/usr/local/proftpd/ftpquota.limittab
-------------------------------------------
 Name: ftpuser
 Quota Type: User
 Per Session: False
 Limit Type: Hard
 Uploaded bytes: unlimited
 Downloaded bytes: 2147483648.00
 Transferred bytes: unlimited
 Uploaded files: unlimited
 Downloaded files: unlimited
 Transferred files: unlimited

–       Xem thông tin thống kê download, upload của người dùng

# ftpquota --show-record --type=tally --name=ftpuser --quota-type=user --table-path=/usr/local/proftpd/ftpquota.tallytab
-------------------------------------------
 Name: ftpuser
 Quota Type: User
 Uploaded bytes: 0.00
 Downloaded bytes: 0.00
 Transferred bytes: 0.00
 Uploaded files: 5
 Downloaded files: 0
 Transferred files: 0

–       Xóa cấu hình người dùng

# ftpquota --delete-record --type=limit --name=ftpuser --quota-type=user --tab --table-path=/usr/local/proftpd/ftpquota.limittab
# ftpquota --delete-record --type=tally --name=ftpuser --quota-type=user --tab --table-path=/usr/local/proftpd/ftpquota.tallytab

 Lưu ý:

  • Các tùy chọn files-upload, files-download, bytes-upload, bytes-download nếu có giá trị là 0 nghĩa là không giới hạn. Trong trường hợp này, thông tin download, upload của người dùng sẽ không được cập nhật vào bảng QuotaTallyTable.
  • Nếu chúng ta muốn áp dụng các cấu hình trên cho group hoặc class trong ProFTPD, chỉ cần thay đổi giá trị tùy chọn –name=<tên group hoặc tên class> và tùy chọn –quota-type=group hoặc –quota-type=class trong các lệnh ở trên.