一、详细问题:
我在用ftp IP 地址登录FTP服务器时,系统提示我输入用户名和密码,可是仍然提示:500 OOPS: child died.
Connection closed by remote host.
服务器端是用的vsftp,开始以为是SELinux导致的问题,确认了一下SELinux已经关闭,百度了一圈,没结果。各种方法都不行。
从字面意思上理解好像是登陆用户的uid有问题,查了一下好像也没发下什么问题。
后来转到国外一个网站,找到了线索:是因为用户最多可开启的程序数受到了限制,不够用导致的。
用ulimit -u一查,只有1024,然后执行ulimit -u 10240
确认生效后重启vsftp,再连接,可以正常登陆。
感觉有点奇怪,服务器部署的时候应该对这些参数做了调优的,怎么现在会变为默认的1024?
继续检查了下其他限制,有问题的做了一下调整并写到文件里面去,以免以后重启失效,命令如下:
echo -ne ”
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
” >>/etc/security/limits.conf
echo -ne ”
ulimit -HSn 65535
ulimit -u 30720
ulimit -n 65535
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
” >>/etc/profile
ulimit相关说明:
ulimit -a 显示目前资源限制的设定。
ulimit -c 设定core文件的最大值,单位为区块。
ulimit -d 程序数据节区的最大值,单位为KB。
ulimit -f shell所能建立的最大文件,单位为区块。
ulimit -H 设定资源的硬性限制,也就是管理员所设下的限制。
ulimit -m 指定可使用内存的上限,单位为KB。
ulimit -n 指定同一时间最多可开启的文件数。
ulimit -p 指定管道缓冲区的大小,单位512字节。
ulimit -s 指定堆叠的上限,单位为KB。
ulimit -S 设定资源的弹性限制。
ulimit -t 指定CPU使用时间的上限,单位为秒。
ulimit -u 用户最多可开启的程序数目。
ulimit -v 指定可使用的虚拟内存上限,单位为KB。
二、解决办法:
1、 查看 SELinux 的状态: sestatus -b | grep ftp
2、 在出现的结果中可以看到
ftp_home_dir off
tftpd_disable_trans off
之类。我们现在只要把其中之一设置为on就可以啦。
3、 setsebool -P ftpd_disable_trans on 或者 setsebool -P ftp_home_dir on
4、 重启vsftpd: service vsftpd restart
问题解决