LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 862|回复: 0

debian+jsp+mysql+proftpd FTP的用户注册系统

[复制链接]
发表于 2006-8-18 17:31:07 | 显示全部楼层 |阅读模式
在我们的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=$PATHJAVA_HOME/bin:/home/software/apache-tomcat-5.5.17/bin
                                                                       
                                                                       
                                        export PATH
                                                                       
                                        CLASSPATH=.JAVA_HOME/lib/dt.jarJAVA_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/下)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表