手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:proftpd

hostname被清除后导致proftpd无法启动的故障

由于需要上传一个文件到服务器,所以才发现ftp服务居然没有启动。

到线上进行检查:

XML/HTML代码
  1. root@(none):~# ps aux|grep proftpd  
  2. root     31447  0.0  0.0   9288  2004 pts/0    S+   17:11   0:00 grep proftpd  
  3. root@(none):~# /etc/init.d/proftpd start  
  4. [....] Starting ftp server: proftpd_none_ proftpd[31473]: warning: unable to determine IP address of '_none_'  
  5. _none_ proftpd[31473]: error: no valid servers configured  
  6. _none_ proftpd[31473]: Fatal: error processing configuration file '/etc/proftpd/proftpd.conf'  
  7.  failed!  

咦,启动失败,这个_none_是什么意思?难道就是那个hostname没有设定的原因?

于是:hostname neatstudio.com ,然后重新退出ssh并登录,再启动ftp就OK了。

上文中的root@(none),我也不知道这个hostname是被哪个程序给清除了。不过也确实才知道,原来hostname不设置还会导致proftpd无法启动!汗

 

Tags: hostname, proftpd

proftpd 问答

Frequently Asked Questions
Question: Why do I see the following when my proftpd starts up?

  getaddrinfo 'hostname' error: No address associated with hostname   warning: unable to determine IP address of 'hostname' 

Answer: This error is ProFTPD's way of reporting that it was unsuccessful in resolving hostname to an IP address. Fixing this is a matter of configuring DNS for that hostname: properly set up an IP address for that DNS name in your DNS server, use a DNS name that has an IP address, or (as a quick fix/last resort) add that DNS name to your /etc/hosts file. The proper solution depends largely on the circumstances.

Question: If proftpd resolves any DNS names to IP addresses when it starts up, and I am using dynamic IP addresses which change after my proftpd has started, will proftpd see my new IP addresses?
Question: Unfortunately not. ProFTPD has no easy way of handling dynamic IP addresses by itself. One way of dealing with this situation is to restart proftpd periodically, which will force it to re-parse its configuration and thus re-resolve all IP addresses.

Question: What if I do not want proftpd to use DNS to resolve the hostname to an IP address because I am in an environment where there is no DNS at all?
Answer: In ProFTPD 1.3.3rc1, support for a new -S command-line option was added. This option can be used to specify the IP address of the host machine. By default, proftpd attempts to resolve the host IP address by using DNS resolution of the hostname. However, in cases where DNS is not configured for the host machine, this approach does not work.

To specify the desired IP address, use -S when starting proftpd, e.g.:

  /usr/local/sbin/proftpd -S 1.2.3.4 ... 

And if you want proftpd to listen on all interfaces, you can specify a wildcard socket using an IP address of 0.0.0.0:

/usr/local/sbin/proftpd -S 0.0.0.0 ...

Note that will also mean that, in your proftpd.conf, any <VirtualHost> sections will need to use IP addresses, not DNS names.

Tags: proftpd

aliyun 安装 ftp(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代码
  1. DefaultRoot ~  
  2. Include /etc/proftpd/sql.conf  
  3. RequireValidShell off  

4、添加一个组,和一个用户:

XML/HTML代码
  1. groupadd -g 2001 ftpgroup  
  2. useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser  

5、去mysql里增加一个用户,如proftpd/proftpdpass,建一个数据库,如:proftpd
6、插入表结构:

SQL代码
  1. CREATE TABLE ftpgroup (  
  2.  groupname varchar(16) NOT NULL default '',  
  3.  gid smallint(6) NOT NULL default '2001',  
  4.  members varchar(16) NOT NULL default '',  
  5.  KEY groupname (groupname)  
  6.  ) ENGINE=MyISAM COMMENT='ProFTP group table';  
  7.   
  8. CREATE TABLE ftpuser (  
  9.  id int(10) unsigned NOT NULL auto_increment,  
  10.  userid varchar(32) NOT NULL default '',  
  11.  passwd varchar(32) NOT NULL default '',  
  12.  uid smallint(6) NOT NULL default '2001',  
  13.  gid smallint(6) NOT NULL default '2001',  
  14.  homedir varchar(255) NOT NULL default '',  
  15.  shell varchar(16) NOT NULL default '/sbin/nologin',  
  16.  count int(11) NOT NULL default '0',  
  17.  accessed datetime NOT NULL default '0000-00-00 00:00:00',  
  18.  modified datetime NOT NULL default '0000-00-00 00:00:00',  
  19.  PRIMARY KEY (id),  
  20.  UNIQUE KEY userid (userid)  
  21.  ) ENGINE=MyISAM COMMENT='ProFTP user table';  

7、修改/etc/proftpd/modules.conf,去掉两行注释:

XML/HTML代码
  1. LoadModule mod_sql.c  
  2. LoadModule mod_sql_mysql.c  

8、修改/etc/proftpd/sql.conf

 

 

XML/HTML代码
  1. SQLBackend mysql  
  2. SQLAuthTypes Crypt  
  3. #下面一行就是用户名密码  
  4. SQLConnectInfo 数据库@localhost 用户名 密码   
  5. SQLUserInfo ftpuser userid passwd uid gid homedir shell  
  6. SQLGroupInfo ftpgroup groupname gid members  
  7. # Update count every time user logs in  
  8. SQLLog PASS updatecount  
  9. SQLNamedQuery updatecount UPDATE "countcount=count+1, accessed=now() WHERE userid='%u'" ftpuser  
  10. SQLLog STOR,DELE modified  
  11. SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser  

9、插入用户:

XML/HTML代码
  1. INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');  
  2. 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代码
  1. 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  
  2. Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): Preparing to chroot to directory '~/'  
  3. 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  
  4. Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): error: unable to set default root directory  
  5. 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了。

这时候,终于一切正常了。折腾了好久。。。

 

 

 

 

 

 

 

Tags: aliyun, proftpd