Cấu hình Directory và Limit trong ProFTPD

Trong bài viết này, chúng ta sẽ tìm hiểu qua việc cấu hình Directory và Limit trong ProFTPD. Trong đó, Directory chứa các tùy chọn cấu hình cho thư mục chứa dữ liệu của ProFTPD, trong khi đó Limit chứa các cấu hình liên quan đến việc phân quyền của người dùng trên các thư mục trên.

1. <Directory>

Chúng ta sử dụng khai báo <Directory> khi cần áp dụng 1 hoặc nhiều cấu hình cho 1 thư mục cụ thể trong ProFTPD. Các cấu hình này thường là các cấu hình liên quan đến việc phân quyền trên thư mục và nội dung bên trong nó.

<Directory /path/to/dir>
     ...
</Directory>

Trong đó:

Đường dẫn của thư mục phải là đường dẫn tuyệt đối. Trong trường hợp tên thư mục có khoảng trắng thì đường dẫn thư mục phải nằm trong dấu ngoặc kép ” “

<Directory "/path/to/My Directory">
    ...
</Directory>

Mọi cấu hình trên thư mục sẽ được áp dụng trên thư mục đó và toàn bộ nội dung của thư mục đó.

Ngoài ra khi chúng ta sử dụng hậu tố /* trong đường dẫn thư mục, chúng ta cần lưu ý như sau:

<Directory /path/to/dir>

=> Áp dụng cấu hình lên thư mục và toàn bộ nội dung bên trong nó.

<Directory /path/to/dir/*>

=> Áp dụng cấu hình lên nội dung của thư mục, không áp dụng lên thư mục.

 2. <Limit>

Khai báo <Limit> được dùng để quản lý quyền được phép sử dụng các lệnh FTP của các tài khoản người dùng trong ProFTPD. Ví dụ như cấu hình cho phép 1 tài khoản người dùng được quyền ghi trong thư mục này nhưng lại không có quyền ghi trong thư mục khác …

Độ ưu tiên

Có 3 loại tham số với độ ưu tiên khác nhau trong khai báo <Limit> là: các lệnh FTP, các nhóm lệnh FTP, và từ khóa ALL.

Chúng ta có thể tham khảo danh sách các lệnh FTP được hỗ trợ trong ProFTPD cũng như công dụng của chúng tại đây.

Các nhóm lệnh FTP gồm:

  • ALL: Bao gồm tất cả các lệnh FTP, ngoại trừ lệnh LOGIN
  • DIRS: Bao gồm các lệnh sau: CDUP, CWD, LIST, MDTM, MLSD, MLST, NLST, PWD, RNFR, STAT, XCUP, XCWD, XPWD
  • LOGIN
  • READ: Bao gồm các lệnh: RETR, SIZE
  • WRITE: Bao gồm các lệnh: APPE, DELE, MKD, RMD, RNTO, STOR, STOU, XMKD, XRMD

Trong đó, khai báo <Limit> sử dụng lệnh FTP có độ ưu tiên cao nhất, tiếp theo là <Limit> sử dụng nhóm lệnh FTP, cuối cùng là từ khóa ALL. Cụ thể như sau:

<Directory /path/to/dir>
     ## Cho phép đọc nội dung file trong thư mục /path/to/dir
     <Limit RETR>
         AllowAll
     </Limit>

     ## Không cho phép đọc nội dung file trong thư mục /path/to/dir
     <Limit READ>
         DenyAll
     </Limit>
</Directory>

Trong ví dụ trên, chúng ta có 2 khai báo <Limit> bên trong thư mục /path/to/dir với 2 công dụng trái ngược nhau:

  • <Limit RETR> => Sử dụng lệnh FTP (RETR), cho phép đọc nội dung tập tin bên trong thư mục.
  • <Limit READ> => Sử dụng nhóm lệnh FTP (READ), không cho phép đọc nội dung bên trong thư mục.

Do lệnh FTP có độ ưu tiên cao hơn, nên ProFTPD sẽ áp dụng cấu hình <Limit RETR>, tức là cho phép đọc nội dung tập tin bên trong thư mục /path/to/dir

Sự thừa kế

Khai báo <Limit> xuất hiện nhiều nhất bên trong khai báo <Directory> trong tập tin cấu hình proftpd.conf. Điều này có nghĩa là, cũng giống như cấu hình <Directory>, <Limit> sẽ được kế thừa bởi tất cả thư mục con xuất hiện trong đường dẫn của khai báo <Directory>, trừ khi được ghi đè 1 cách tường minh bởi 1 khai báo <Limit> “gần hơn”, ví dụ:

<Directory /path/to/dir>
    <Limit ALL>
        DenyAll
    </Limit>
    <Directory /path/to/dir/subdir1>
        <Limit READ>
           AllowAll
        </Limit>
    </Directory>
    <Directory /path/to/dir/subdir2>
        <Limit WRITE>
            AllowAll
        </Limit>
    </Directory>
</Directory>

Khai báo tài khoản

Việc tiếp theo chúng ta cần làm là khai báo ra tài khoản mà cấu hình <Limit> sẽ được áp dụng. Chúng ta sử dụng khai báo AllowUser để khai báo tài khoản được phép sử dụng lệnh FTP và khai báo DenyUser để khai báo tài khoản không được phép sử dụng lệnh FTP.

AllowUser bob
AllowUser dave
AllowUser wendy

hoặc có thể khai báo như sau:

AllowUser bob, dave, wendy

Tương tự với khai báo DenyUser

Ngoài ra chúng ta có thể sử dụng khai báo AllowGroup, DenyGroup để khai báo nhóm tài khoản. Tuy nhiên hạn chế của việc khai báo này là các tài khoản trong hệ thống không được thuộc nhiều nhóm khác nhau.

Nếu muốn cấu hình cho phép hoặc không cho phép tất cả tài khoản người dùng trong hệ thống, sử dụng các khai báo AllowAll hoặc DenyAll.

Trong trường hợp muốn cho phép hoặc không cho phép truy cập từ 1 hoặc nhiều địa chỉ IP, ta sử dụng khai báo:

Allow from 192.168.0.0/16

hoặc

Deny from 192.168.0.0/16

Sử dụng Order

  • Order Allow, Deny => Mặc định cho phép truy cập, trừ khi bị từ chối bởi khai báo Deny

vd:

Order Allow, Deny
DenyUser bob
  • Order Deny, Allow => Mặc định từ chối truy cập, trừ khi được cho phép bởi khai báo Allow

vd:

Order Deny, Allow
AllowUser bob

Lưu ý:

–     Không được cấu hình 2 khai báo <Limit LOGIN> trong cùng 1 Virtual Host như sau:

<VirtualHost 1.2.3.4>
    ...
    <Limit LOGIN>
        Order allow, deny
        Allow from 192.168.0.0/16
        DenyAll
    </Limit>
    ...
    <Limit LOGIN>
        Order deny, allow
        Deny from 192.168.0.0/16
    </Limit>
    ...
</VirtualHost>

Chỉ được có 1 khai báo <Limit LOGIN> trong mỗi Virtual Host.

–     Không được khai báo <Limit LOGIN> bên trong <Directory> như sau:

<Directory /path/to/dir>
    <Limit LOGIN>
        DenyUser foo
    </Limit>
</Directory>

vì FTP client đăng nhập vào server, không đăng nhập vào thư mục.