由于需要上传一个文件到服务器,所以才发现ftp服务居然没有启动。
到线上进行检查:
XML/HTML代码
- root@(none):~# ps aux|grep proftpd
- root 31447 0.0 0.0 9288 2004 pts/0 S+ 17:11 0:00 grep proftpd
- root@(none):~# /etc/init.d/proftpd start
- [....] Starting ftp server: proftpd_none_ proftpd[31473]: warning: unable to determine IP address of '_none_'
- _none_ proftpd[31473]: error: no valid servers configured
- _none_ proftpd[31473]: Fatal: error processing configuration file '/etc/proftpd/proftpd.conf'
- failed!
咦,启动失败,这个_none_是什么意思?难道就是那个hostname没有设定的原因?
于是:hostname neatstudio.com ,然后重新退出ssh并登录,再启动ftp就OK了。
上文中的root@(none),我也不知道这个hostname是被哪个程序给清除了。不过也确实才知道,原来hostname不设置还会导致proftpd无法启动!汗
有了服务器,怎么着都得装个Ftp吧,否则,必须得让人用ssh连接来上传文件 ?
于是我找了proftpd,因为比较简单vsftpd太麻烦了。proftpd的教程很简单
1、先apt-get update,apt-get upgrade
2、apt-get install proftpd-basic proftpd-mod-mysql
3、修改 /etc/proftpd/proftpd.conf
因为原内容都注释了,所以直接在文件的最后加上:
XML/HTML代码
- DefaultRoot ~
- Include /etc/proftpd/sql.conf
- RequireValidShell off
4、添加一个组,和一个用户:
XML/HTML代码
- groupadd -g 2001 ftpgroup
- useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
5、去mysql里增加一个用户,如proftpd/proftpdpass,建一个数据库,如:proftpd
6、插入表结构:
SQL代码
- CREATE TABLE ftpgroup (
- groupname varchar(16) NOT NULL default '',
- gid smallint(6) NOT NULL default '2001',
- members varchar(16) NOT NULL default '',
- KEY groupname (groupname)
- ) ENGINE=MyISAM COMMENT='ProFTP group table';
-
- 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 '2001',
- gid smallint(6) NOT NULL default '2001',
- 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),
- UNIQUE KEY userid (userid)
- ) ENGINE=MyISAM COMMENT='ProFTP user table';
7、修改/etc/proftpd/modules.conf,去掉两行注释:
XML/HTML代码
- LoadModule mod_sql.c
- LoadModule mod_sql_mysql.c
8、修改/etc/proftpd/sql.conf
XML/HTML代码
- SQLBackend mysql
- SQLAuthTypes Crypt
- #下面一行就是用户名密码
- SQLConnectInfo 数据库@localhost 用户名 密码
- SQLUserInfo ftpuser userid passwd uid gid homedir shell
- SQLGroupInfo ftpgroup groupname gid members
- # Update count every time user logs in
- SQLLog PASS updatecount
- SQLNamedQuery updatecount UPDATE "countcount=count+1, accessed=now() WHERE userid='%u'" ftpuser
- SQLLog STOR,DELE modified
- SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
9、插入用户:
XML/HTML代码
- INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');
- INSERT INTO `ftpuser` ( `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`) VALUES ( 'username', ENCRYPT('password'), 2001, 2001, '/var/www/www.example.com/', '/sbin/nologin', 0);
10、重启proftpd:/etc/init.d/proftpd restart
上面这段其实是来自:http://www.sysadminworld.com/2011/install-proftpd-with-mysql-backend-on-debian-ubuntu/
--------EOF---
至此,上面的内容基本上就能够登录成功了,如果还是失败,建议先停掉proftpd,然后运行proftpd -nd6,查看错误信息,比如我就看到了这个:
XML/HTML代码
- Mar 09 00:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): notice: unable to use '~/' [resolved to '/server/wwwroot/htdocs/']: Permission denied
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): Preparing to chroot to directory '~/'
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): chroot to '~/' failed for user 'xxxxxx': Operation not permitted
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): error: unable to set default root directory
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): FTP session closed.
我靠,这个怎么办?
这时候我又请vampire帮忙了。他就帮我检查了一下,做了几个处理:
1、vim /etc/groups ,在www-data:x:33后面加了:www-data:x:33:ftpgroup ,表示权限跟着www-data,因为我们的ftp目录里的文件都是基于www-data的
2、修改/etc/proftpd/proftpd.conf,改其中的:user / group ,都改成www-data
3、还是/etc/proftpd/proftpd.conf ,改 Umask ,原来是Umask 022 022,去掉一个022
4、因为我的www-data是gid是33,所以刚才在数据库里插的gid统统换成33,而不是原来的2001,这时候再登录其实还是不正常。
5、最重要的一个,在刚才的sql.conf里面,加入:SQLMinID 33,这个玩意要参考:http://www.proftpd.org/docs/directives/linked/config_ref_SQLMinID.html,我晶,这个东西,居然在默认的sql.conf里是没有这一行的。果然还是vampire有经验。因为www-data的gid是33,所以sqlminid就是33了。
这时候,终于一切正常了。折腾了好久。。。