CentOS 5.5 安装记录 - (6) vsftpd 及虚拟用户

一般的配置小文件可以用 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,点这个图标:

CentOS 5.5 安装记录 - (6) vsftpd 及虚拟用户_第1张图片
一个小窗口就弹出来:

CentOS 5.5 安装记录 - (6) vsftpd 及虚拟用户_第2张图片
在这个窗口就可以输入(或粘贴) 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:

CentOS 5.5 安装记录 - (6) vsftpd 及虚拟用户_第3张图片

然后保存文件为 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;


先收录了,以后慢慢学习。

:-

你可能感兴趣的:(html,sql,mysql,centos,server,配置管理)