在最小化安裝的 CentOS 6.5 x64 上,從零部署 Apache + MySQL + PHP (LAMP) 並編譯安裝支援 MySQL 驗證的 ProFTPD,實現 FTP 虛擬用戶存儲於資料庫,最後完成舊服務器數據遷移全流程。
yum install -y mysql mysql-server mysql-devel
/etc/init.d/mysqld start
/usr/bin/mysql_secure_installation
chkconfig --levels 235 mysqld on
yum install -y httpd
/etc/init.d/httpd start
# 若報 "Could not reliably determine the server's fully qualified domain name"
echo "ServerName localhost:80" >> /etc/httpd/conf/httpd.conf
chkconfig --levels 235 httpd on
yum install -y php php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
service httpd restart
# 驗證:echo '' > /var/www/html/info.php
wget https://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-1.el6.rf.x86_64.rpm
wget https://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt
rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpm
yum install -y gcc make
# 確認 MySQL 開發頭文件與庫路徑
whereis mysql # /usr/include/mysql, /usr/lib64/mysql
tar zxvf proftpd-1.3.5.tar.gz
cd proftpd-1.3.5
./configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \
--enable-nls \
--with-includes=/usr/include/mysql \
--with-libraries=/usr/lib64/mysql \
--prefix=/usr/local/proftpd
make && make install
編輯 /usr/local/proftpd/etc/proftpd.conf 關鍵段:
SQLBackend mysql
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users groups
SQLConnectInfo ftp@localhost proftpd your_password
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLMinID 500
CreateHome on
# 登入計數與修改時間更新
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
RootLogin off
RequireValidShell off
# 禁止特定用戶刪除文件
DenyUser rdd1,rdd2,rdd3,amd,fd,wsd,csd,std,asd,ftp
CREATE DATABASE ftp DEFAULT CHARACTER SET utf8mb4;
USE ftp;
CREATE TABLE ftpgroup (
groupname VARCHAR(16) NOT NULL,
gid SMALLINT(6) NOT NULL DEFAULT 5500,
members VARCHAR(16) NOT NULL,
PRIMARY KEY (groupname)
) ENGINE=InnoDB;
CREATE TABLE ftpuser (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(32) NOT NULL UNIQUE,
passwd VARCHAR(32) NOT NULL,
uid SMALLINT(6) NOT NULL DEFAULT 5500,
gid SMALLINT(6) NOT NULL DEFAULT 2001,
homedir VARCHAR(255) NOT NULL,
shell VARCHAR(16) NOT NULL DEFAULT '/sbin/nologin',
count INT 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'
) ENGINE=InnoDB;
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
# 複製舊 FTP 目錄 (保留屬性)
scp -prv /home/ftp root@new_server:/home/
# 必要時修正權限
chown -R ftpuser:ftpgroup /home/ftp
/usr/local/proftpd/sbin/proftpd
pgrep proftpd # 有 PID 即啟動成功
proftpd -nd6 # 前台調試模式查看錯誤
proftpd -l # 列出已編譯模組,確認 mod_sql_mysql 存在
# 備份全部庫 (含事件)
mysqldump -u root -p --events --ignore-table=mysql.events --all-databases > all.sql
# 恢復 (目標庫已建立並啟動)
mysql -u root -p < /home/all.sql
# 恢復後重啟 mysqld 生效
| 需求 | 命令 |
|---|---|
| 單庫含數據 | mysqldump -u user -p dbname > db.sql |
| 單庫僅結構 | mysqldump -u user -p -d dbname > db.sql |
| 單表含數據 | mysqldump -u user -p dbname table > table.sql |
| 單表僅結構 | mysqldump -u user -p -d dbname table > table.sql |
| 恢復 | mysql -u user -p dbname < dump.sql |
ProFTPD 必須編譯安裝以啟用 mod_sql_mysql;yum 直接安裝的版本通常不含 MySQL 模組。生產環境建議啟用 TLS (FTPS) 加密傳輸。