一般的配置小文件可以用 psftp 来上传,而虚拟主机的文件数量多而且大,用 psftp 显然很不方便。这里我们来配置 vsftp 作为 FTP 服务器,并设置为虚拟用户登录,还设定某用户对于特定的虚拟主机目录,来管理虚拟主机的内容。
参考资料:
http://centosforserver.blogspot.com/2010/02/virtual-hosting-with-vsftpd-and-mysql.html
http://blog.csdn.net/wl3115/archive/2010/06/19/5680059.aspx
http://www.howtoforge.com/virtual-hosting-with-vsftpd-and-mysql-on-debian-lenny
http://www.noobgrinder.com/index.php?option=com_content&view=article&id=2:provisioning-a-lamp-server-appliance-for-virtual-hosting&catid=1:security&Itemid=9
1. 安装 vsfptd 和 pam-mysql
yum install vsftpd pam_mysql
要说明的是 pam-mysql 是从 EPEL repo 取得。如果还未配置 epel repo,则需先安装和配置 epel repo.
2. 建立MySQL数据库和表 管理用户和密码
我们使用 phpmyadmin. 在浏览器打开 http://192.168.99.44/phpmyadmin 然后以 root 用户登录。
登录后,在页面的左上方有5个图标,中间的那个就是 Query Window,点这个图标:
一个小窗口就弹出来:
在这个窗口就可以输入(或粘贴) SQL 语句,然后点 GO 来执行这些语句。
(1)建数据库
把下面的SQL语句放到小窗口,然后按 GO:
CREATE DATABASE vsftpd;
GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'vsftpdpassword';
FLUSH PRIVILEGES;
这里所建立的数据库名是 vsftpd, 用户名 vsftpd 密码 vsftpdpassword
(2)建虚拟用户表
把下面的SQL语句放到小窗口,然后按 GO:
USE vsftpd;
CREATE TABLE accounts (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR(30) NOT NULL ,
pass VARCHAR(50) NOT NULL ,
UNIQUE (username)
) ENGINE = MYISAM ;
这里所建立的表名是 accounts, 有2列:username 和 pass
(3)插入一个虚拟用户
把下面的SQL语句放到小窗口,然后按 GO:
USE vsftpd;
INSERT INTO accounts (username, pass) VALUES('user1', md5('abc123'));
这里所插入的虚拟用户名是 user1, 密码 abc123
3. 配置 vsftpd
(1)建立一个系统用户用于管理 vsftpd
useradd -G users -s /sbin/nologin -d /home/vsftpd vsftpd
这里 添加一个用户vsftpd 属于 users 组,其指定目录是 /home/vsftpd
以后所添加的虚拟用户其用户目录缺省就存放于 /home/vsftpd 之下。
(2)修改 配置文件 vsftpd.conf
先备份:
cp -v /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-orig
然后删除它:
rm /etc/vsftpd/vsftpd.conf
在 Win XP 机器用 Notapad++,复制粘贴一下内容:
# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
# if you want to LOG vsftpd activity then uncomment this log_ftp_protocol
# log_ftp_protocol=YES
connect_from_port_20=YES
# uncomment xferlog_file and xferlog_std_format if you DIDN'T use the line above
# with log_ftp_protocol - it must be excluding each other
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
#xferlog_file=/var/log/xferlog
#
# xferlog_std_format Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
# xferlog_std_format=YES
#
# You may change the default value for timing out an idle session (in seconds).
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection (in seconds).
#data_connection_timeout=120
#
# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES
# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
记得点击 EOL Conversion 选 Unix Format:
然后保存文件为 vsftpd.conf 放在桌面上。
打开 psftp 把 vsftpd.conf 上传到 /etc/vsftpd
(3)建立单个用户配置目录 user_config_dir
mkdir /etc/vsftpd/vsftpd_user_conf
以后某个虚拟用户如果不采用缺省配置的话,其个别配置文件仅存放于这个目录。配置文件的文件名 与 虚拟用户的用户名 一样。
(4)配置 PAM-MySQL
PAM-MySQL 用于从 MySQL 取得虚拟用户的用户名和密码。
先备份:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd-orig
删除配置文件:
rm /etc/pam.d/vsftpd
用 Notepad++ 建立一个新文件,贴上 一下内容:
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_mysql.so user=vsftpd passwd=vsftpdpassword host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3
account required pam_mysql.so user=vsftpd passwd=vsftpdpassword host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3
这里 passwd=vsftpdpassword 是建立数据库所设的密码,需要安装实际的密码来修改。
记得点击 Notepad++ 菜单 Edit -> EOL Conversion 选 Unix Format. 保存类型 Save as type 是 All file *.* (没有扩展名), 文件名为 vsftpd,存于桌面即可。
用 psftp 把文件 vsftpd 上传到 /etc/pam.d
(5)建立虚拟用户目录
# mkdir /home/vsftpd/user1
# chown vsftpd:users /home/vsftpd/user1
虚拟用户的目录放于 /home/vsftpd 之下,目录名与用户名一致。
(6)启用 vsftpd
基本配置已经完成。现在设定 vsftpd 在系统启动时启用:
# chkconfig --levels 235 vsftpd on
启用:
# /etc/init.d/vsftpd start
(7)测试
在 Win XP 机器,打开 Fizilla FTP Client, 输入 Centos 机器地址 192.168.99.44, 用户名 user1 密码 abc123, 点连接,即可登陆 vsftpd, 可上传文件和下载文件。
4. 一般使用
完成 vsftpd 配置后,以后添加虚拟用户,需要做2步工作:
(1)在数据库 添加一个记录:用户名和密码,推荐在 phpmyadmin 下操作,也可以直接在命令行操作。
例如, 添加用户 userX 密码为 xyz123 :
USE vsftpd;
INSERT INTO accounts (username, pass) VALUES('userX', md5('xyz123'));
(2)在 /home/vsftpd 建立一个虚拟用户目录:
mkdir /home/vsftpd/userX
chown vsftpd:users /home/vsftpd/userX
5. 虚拟用户管理虚拟主机目录
虚拟主机的目录一般会使用域名做目录名,或IP地址做目录名。我们这里尝试建立一个vsftpd 虚拟用户 对应 特定的 虚拟主机目录 (即 虚拟用户 的用户目录不再 /home/vsftpd 之下)。
需求:
(i) 虚拟用户 用户名 user2 密码 abc123
(ii) 虚拟主机的目录 /home/virtwww/192.168.99.7
步骤:
(1)在数据库添加一行用户记录:
USE vsftpd;
INSERT INTO accounts (username, pass) VALUES('user2', md5('abc123'));
(2)建立 单用户配置文件
单用户配置文件 (Per User Configuration File) 仅对单个用户有效,文件名与用户名同名,存放于 /etc/vsftpd/vsftpd_user_conf 下。
把一下内容复制粘贴到 Notepad++ 里:
dirlist_enable=YES
download_enable=YES
# full path to the directory where 'user2' will have access, change to your needs
local_root=/home/virtwww/192.168.99.7
write_enable=YES
这里 假定虚拟用户 user2 登陆后定位于 /home/virtwww/192.168.99.7 目录。
记得点击 Notepad++ 菜单 Edit -> EOL Conversion 选 Unix Format. 保存类型 Save as type 是 All file *.* (没有扩展名), 文件名为 user2,存于桌面即可。
用 psftp 把 user2 文件上传到 /etc/vsftpd/vsftpd_user_conf
(3)设定虚拟主机目录和访问权限
我们在前面已经建立了 /home/virtwww/192.168.99.7 目录了。如果没有,就先建立这个目录:
# mkdir /home/virtwww/192.168.99.7
设定访问权限:
# chmod 775 /home/virtwww/192.168.99.7
# chown vsftpd:users /home/virtwww/192.168.99.7
全部设置完成。现在可以用 FileZilla FTP Client 登陆, 用户名 user2 密码 abc123, 登陆后就是 /home/virtwww/192.168.99.7 目录。往这个虚拟主机目录上传网页文件和图片,然后在浏览器就可以访问这些页面和图片。
[附注:]
(1)FTP服务器虚拟用户配置的资料很多,一般以 proftpd, vsftpd 和 pureftpd 为主。我安装网上的 vsftpd 教程,一次就安装成功。
其实 我试过按照以下的资料设置 proftpd :
http://www.campworld.net/thewiki/pmwiki.php/LinuxServersCentOS/Cent5VirtWebServer
安装过程挺顺利的,完成后可登录,可自动建立虚拟用户目录,但去不能上传文件,甚至不能列表。
(2)其他的 vsftpd 配置资料,各有特色,值得参考:
http://ubuntuforums.org/showthread.php?t=518293
http://www.cyberciti.biz/tips/centos-redhat-vsftpd-ftp-with-virtual-users.html
http://howto.gumph.org/content/setup-virtual-users-and-directories-in-vsftpd/
(3)用脚本建立虚拟用户目录的资料:
http://feixiang123.blog.51cto.com/285543/75839
http://www.productionmonkeys.net/guides/ftp-server/vsftpd
http://ft23.pmenier.net/docext/vsftpd/vsftpd.txt
http://www.debiantutorials.com/installing-vsftpd-with-mysql-backend/
Little Script to create user automatic….
#!/usr/bin/perl
# Script to Add New Virtual FTP Users & Create a FTP Dir
# # Version 0.1 – Thomas Stewart Buchanan – 15/02/2010
use strict;
use warnings;
use DBI;
# MYSQL VARIABLES
my $database = “DBI:mysql:vsftpd”;
my $tablename = “accounts”;
my $user = “vsftpd”;
my $pw = “ftpuserpass”;
# GATHER USER DETAILS
print “Enter the name of the new FTP user:\n”;
chomp(my $inUser = );
print “Please now enter a password for user $inUser:\n”;
chomp(my $inPw = );
print “Thankyou \n”;
# PERL MYSQL CONNECT
my $dbh = DBI->connect($database, $user, $pw) || die “Could not connect to database: $DBI::errstr”;
# MYSQL QUERY TO INSERT User
my $queryInsertUser = $dbh->do(”INSERT INTO $tablename (username, pass) VALUES(’$inUser’, PASSWORD(’$inPw’))”);
# DISCONNECTS FROM DATABASE
$dbh->disconnect || warn “Disconnection failed: $DBI::errstr”;
# CREATES USER DIR
mkdir (”/home/vsftpd/$inUser”) || print $!;
# Sets ownership of the ftp dirs
my $chown = system(”chown -R vsftpd:nogroup /home/vsftpd”);
exit;
先收录了,以后慢慢学习。
:-