Thứ ba, 09/04/2013 | 00:00 GMT+7

Cách thiết lập ProFTPD với MySQL Backend trên Ubuntu 12.10

Bài viết này sẽ hướng dẫn bạn cài đặt kỹ ProFTPD trên Ubuntu với phần backend MySQL cho user và group .

Cảnh báo: FTP vốn không an toàn! Cân nhắc cấu hình ProFTPd để sử dụng SFTP , một giải pháp thay thế an toàn cho FTP được triển khai theo SSH.

Yêu cầu

Giả định bạn đã cài đặt và cấu hình MySQL và phpMyAdmin.

Nếu chưa, bạn có thể làm theo Cách cài đặt và bảo mật phpMyAdmin trên Ubuntu 12.04 .

Cài đặt ProFTPD với hỗ trợ MySQL

sudo apt-get install proftpd-basic proftpd-mod-mysql

Điều này sẽ cài đặt tất cả các gói cần thiết. Nếu cài đặt yêu cầu, hãy chọn chế độ độc lập.

Cấu hình database

Đi tới cài đặt phpMyAdmin của bạn và đăng nhập.

Chọn tab "Đặc quyền" và nhấp vào "Thêm user ".

 user

Đến đây bạn cần chọn tên user mong muốn, tôi đề xuất "ftpd" (không có dấu ngoặc kép) và tạo password cho user . Lưu trữ thông tin đó, ta cần nó sau này.

Trong phần " Database cho user ", hãy chọn "Tạo database có cùng tên và cấp tất cả các quyền ".

Điều này sẽ tạo một user và một database mà ProFTPD có thể sử dụng. Bây giờ ta cần điền vào database với một số bảng. Ở bên trái, bây giờ bạn sẽ thấy một database mới (có cùng tên với user , trong trường hợp là "ftpd") - hãy nhấp vào nó.

Bây giờ hãy nhấp vào tab SQL, dán phần sau và nhấp vào "Bắt đầu":

CREATE TABLE IF NOT EXISTS `ftpgroup` (
  `groupname` varchar(16) COLLATE utf8_general_ci NOT NULL,
  `gid` smallint(6) NOT NULL DEFAULT '5500',
  `members` varchar(16) COLLATE utf8_general_ci NOT NULL,
  KEY `groupname` (`groupname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP group table';

CREATE TABLE IF NOT EXISTS `ftpuser` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `userid` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `passwd` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `uid` smallint(6) NOT NULL DEFAULT '5500',
  `gid` smallint(6) NOT NULL DEFAULT '5500',
  `homedir` varchar(255) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `shell` varchar(16) COLLATE utf8_general_ci NOT NULL DEFAULT '/sbin/nologin',
  `count` int(11) NOT NULL DEFAULT '0',
  `accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP user table';

Điều này sẽ tạo ra các bảng ta cần.

Tạo user

Nhấp vào bảng "ftpuser" ở cột bên trái, sau đó nhấp vào tab "Chèn".

Điều này cho phép bạn chèn một user . Điền userid (là tên user mà user sẽ đăng nhập vào FTP) và homedir (nhà của user FTP - phải có trên hệ thống).

Mật khẩu trong trường password phải được mã hóa, để thực hiện , bạn có thể sử dụng đoạn mã này (trên shell server ) để tạo chuỗi password mà bạn có thể paste vào trường password :

/bin/echo "{md5}"`/bin/echo -n "password" | openssl dgst -binary -md5 | openssl enc -base64`

Tất nhiên thay thế "mật khẩu" bằng password mong muốn của bạn / user .

Ở đây bạn có thể thấy một số trường khác tự giải thích và thường được sử dụng sau này (số lần đăng nhập, lần đăng nhập mới nhất ...).

Ở đó, bạn đã có database chính xác, bây giờ ta chỉ cần cấu hình ProFTPD để sử dụng nó.

Cấu hình ProFTPD

Trước tiên hãy chỉnh sửa file cấu hình ProFTPD:

sudo nano /etc/proftpd/proftpd.conf

Thay đổi lệnh ServerName thành tên server mong muốn của bạn.
Nếu bạn muốn bỏ tù user vào folder chính của họ (để họ chỉ có thể xem folder chính của họ), hãy thêm:
DefaultRoot ~

Để thêm cấu hình SQL và tắt xác thực shell , hãy thêm ở cuối cấu hình:

Include /etc/proftpd/sql.conf

RequireValidShell         off

Bây giờ hãy chỉnh sửa file cấu hình sql:

sudo nano /etc/proftpd/sql.conf

Vì vậy, nó sẽ giống như thế này (tôi khuyên bạn nên xóa mọi thứ có trong file ngay bây giờ):

SQLBackend        mysql

#Passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            OpenSSL Crypt
SQLAuthenticate         users groups


# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  mysql_database@localhost mysql_user mysql_password


# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID        500

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

SqlLogFile /var/log/proftpd/sql.log

Tất nhiên bạn cần thay thế "mysql_database", "mysql_user" và "mysql_password" bằng các giá trị chính xác mà bạn chọn / tạo trước đó trong hướng dẫn. Nếu bạn tuân theo các quy ước đặt tên được đề xuất, dòng sẽ trông giống như sau:

SQLConnectInfo  ftpd@localhost ftpd password

Để bật các module MySQL trong ProFTPD, hãy chỉnh sửa:

sudo nano /etc/proftpd/modules.conf

Và bỏ ghi chú (hoặc chỉ cần thêm) hai dòng:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Bây giờ ta cần khởi động lại ProFTPD:

sudo service proftpd restart

Kiểm tra nó

Như vậy, bạn có thể sử dụng ứng dụng FTP yêu thích của bạn (chẳng hạn như FileZilla) để kết nối với server với user mẫu mà bạn đã thêm trước đó.

Các vấn đề chung

  • User không thể đăng nhập - Luôn kiểm tra xem bạn đã dán đúng dòng password user đã tạo chưa
  • User không thể ghi vào folder chính - Bạn nên đặt các quyền chính xác trên folder chính:
    • Các quyền phải được đặt thành các trường uid và hướng dẫn mà bạn đã điền khi thêm user
    • Ví dụ: sử dụng các giá trị mặc định:
      sudo chown 5500:5500 /path/to/home/directory/

Xử lý sự cố

Bạn có thể xem các file log của chính ProFTPD:

tail -f /var/log/proftpd/proftpd.log

Và phần SQL của ProFTPD:

tail -f /var/log/proftpd/sql.log

Tags:

Các tin trước

Cách thiết lập ProFTPD trên CentOS 6 2012-06-19