|
|
在我们的linuxsir里大多是php+mysql+proftpd来管理FTP服务器的,我参考http://debian.linuxsir.cn/main/?q=node/63
的文章写了个jsp+mysql+proftpd,还有好多问题,请大家帮我指出,谢谢
1 安装JDK ./jdk-1_5_0_07-nb-5_0-linux-ml.bin(注意:发生错误时看是不是没有安装相应的库文件如bc)
2 配制环境变量
JAVA_HOME=/opt/jdk1.5.0_07
export JAVA_HOME
PATH=$PATH JAVA_HOME/bin:/home/software/apache-tomcat-5.5.17/bin
export PATH
CLASSPATH=. JAVA_HOME/lib/dt.jar JAVA_HOME/lib/tools.ja:/home/software/apache-
tomcat-5.5.17/common/lib
export CLASSPATH
3 安装TOMCAT
我把TOMCAT直接解压到了/home/software/apache-tomcat-5.5.17
在MYSQL的官方网站下载mysql-connector-java-5.0.3.tar.gz,解压后,把mysql-connector-java-5.0.3-bin.jar移动到/home/software/apache-tomcat-5.5.17/common/lib下(没有mysql-connector-java-5.0.3-bin.jar文件会导致数据库驱动找不到)
4 安装mysql,proftpd-mysql
apt-get update
apt-get install mysql-client mysql-server //安装MySQL
apt-get install proftpd-mysql
5 为mysql设置初始密码
mysqladmin password "123456"
mysql -u root -p
create database ftpdb //建ftpdb 数据库
grant select, update on ftpdb.* to proftpd@"%" identified by 'password' //新增一个用户,用于存取ftpdb 数据库,用户名 proftpd,密码 password
use ftpdb //对 ftpdb 库操作
1.增加用户
还有增加用户的命令:
格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
mysql>grant select,insert,update,delete on *.* to admin@"%" Identified by "123456";
#ftpgroup的表结构
CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '5500',
`members` varchar(16) NOT NULL default '',
KEY `groupname` (`groupname`)
) TYPE=MyISAM;
#插入一条记录
INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');
#ftpuser的表结构
CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default '',
`passwd` varchar(32) NOT NULL default '',
`uid` smallint(6) NOT NULL default '5500',
`gid` smallint(6) NOT NULL default '5500',
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) 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`)
) TYPE=MyISAM ;
#插入一条记录
INSERT INTO ftpuser (userid, passwd, uid, gid, homedir, shell) VALUES
('ftpuser', 'ftppasswd', 5501, 5500, '/tony','/sbin/nologin'); //目录/tony应该存在
5.修改/etc/proftpd.conf
加入以下内容:
########################################
DefaultRoot ~
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users* groups*
SQLConnectInfo ftpdb@localhost proftpd password
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLMinID 500
SQLHomedirOnDemand 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
DeferWelcome on
RootLogin off
RequireValidShell off
6. 测试
/etc/init.d/proftpd stop
/etc/init.d/proftpd start //使用/etc/init.d/proftpd restart 似乎不能达到预期的效果
7.使用
用户名:ftpuser
密码:ftppasswd
测试
7 编写用户注册界面如下: (ftp_m.jsp)
<html>
<head>
<title>FTP用户申请</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form name="form1" method="post" action="ftp_mysql.jsp">
<div align="center">
用户名:<input type="text" name="username"></br>
密码:<input type="text" name="passwd"></br>
确认密码:<input type="text" name="repasswd"></br>
<input type="submit" name="Submit" value="Submit">
</div>
</form>
</body>
</html>
8 编写用户提交界面如下: (ftp_mysql.jsp)
<%@ page import="java.io.*" %>
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page language="java" import="java.sql.*"%>
<%
String ftp_user = request.getParameter("username");
String ftp_passwd= request.getParameter("passwd");
String ftp_repasswd= request.getParameter("repasswd");
String ftp_path = "/home/www/" + ftp_user;
String opmsg = Mkdir(ftp_path);
if (opmsg==null)
{
String mySqlDriver = "org.gjt.mm.mysql.Driver";
String url = "jdbc:mysql://localhost/ftpdb";
Connection conn;
Class.forName(mySqlDriver);
conn = DriverManager.getConnection( url,"admin","123456");
if(conn==null){
System.out.println("get Conn Error");
}
Statement stmt=conn.createStatement();
ResultSet rs=null;
String test_sql = "insert into ftpuser (userid, passwd, uid, gid, homedir, shell) values('"+ftp_user+"', '"+ftp_passwd+"', 5501, 5500, '"+ftp_path+"','/sbin/nologin')";
//rs = stmt.execute("insert into ftpuser values('','test','test','5501','5500','test','sbinnologin','','','')");
stmt.execute(test_sql);
out.println(ftp_user+"祝贺您,FTP申请成功!您的用户名是:"+ftp_user+"密码是:"+ftp_passwd);
}
else
{out.println(opmsg);}
%>
<%!
String Mkdir(String path) {
String msg=null;
java.io.File dir;
// 新建文件对象
dir =new java.io.File(path);
if (dir == null) {
msg = "错误原因:<BR>对不起,不能创建空目录!";
return msg;
}
if (dir.isFile()) {
msg = "错误原因:<BR>已有同名文件<B>" + dir.getAbsolutePath() + "</B>存在。";
return msg;
}
if (!dir.exists()) {
boolean result = dir.mkdirs();
if (result == false) {
msg = "错误原因:<BR>目录<b>" + dir.getAbsolutePath() + "</B>创建失败,原因不明!";
return msg;
}
// 如果成功创建目录,则无输出。
// msg ="成功创建目录: <B>" + dir.getAbsolutePath() + "</B>";
//
return msg;
}
else {
//msg = "错误原因:<BR>目录<b>" + dir.getAbsolutePath() + "</b>已存在。";
msg = "错误原因:<BR>目录<b>" + dir.getAbsolutePath() + "</b>已存在。";
}
return msg;
}
%>
把上述两个jsp文件存放到TOMCAT的/ROOT目录下,到此就算大功告成了,如/home/software/apache-tomcat-5.5.17/webapps/ROOT
对了,忘记启动TOMCAT了,
cd /home/software/apache-tomcat-5.5.17/bin
./startup.sh
或者直接输入startup.sh也能启动(在上文中我已经配好了环境变量了,)
最终测试:
http://localhost:8080/ftp_m.jsp
后面还有好多问题,还等大家共同解决
问题如下:
1 jsp在/home/www/下新建的目录是只读的,用户不能上传文件,要管理员chomd一下
2 没有Quotas来限定用户对硬盘的使用空间
3 同一个目录不能有两个以上的管理员如:
/home/www/test,test这个用户的FTP是能是test用户来管理,与现实不符
(我的TOMCAT装在了:/home/software/apache-tomcat-5.5.17/下) |
|