#自从手机root后安装Linux Deploy开始安装了Debian9开始准备鼓捣ftp服务器(vsftpd)。linux
apt install vsftpd服务器
#以后整整一个月百度而来的猛如虎的各类操做各类坑,网络
#且不说修改vsftpd.conf的各类参数,socket
#下载源码修改编译,安装gdb调试,经过网络教程禁用子进程改变uid gid的函数,修改源码的secuil.c文件等等,函数
#用FileZilla链接时候永远都是500 oops socketoop
#死的心都有了。就差下载源码从新编译内核了,可是我是新手,这么高深的动做怎么会?且不说手机上能说改就改linux内核?老大您就饶了我吧!ui
#以后,一个命令(strace)拯救了我,把我从gdb的苦海和vsftpd.dbg官方调试包中拖上岸。我此次成功解决问题全赖此命令。spa
#新手都能好好琢磨出来strace -v -f -s 2048 -p [vsftpd服务的pid],一点一点分析出了问题的眉目。在这里,这个命令我就不赘述,网上详解不少。我如今着重说解决方案:很短,就几步而已调试
nano /etc/passwd教程
#找到nobody用户把65534:65534改为65534:3003而后存盘,就完事了。记得把
nano /etc/ftpusers
#里面的“#root”注释掉才能使用root用户,而后为了方便上传删写文件
nano /etc/vsftpd.conf
#里面最后加一行“write_enable=YES”,可是删写文件仍然老是被拒绝。即便重启也无效。我后来按照百度教程,还不得不在/root下建立了一个目录pub目录改属性
chmod 777 /root/pub
#才成功的能开始使用上传和删除操做,而后即便把pub删了,重启等等,均可以正常删写服务器内容了。仿佛只要在vsftpd.conf里写write_enable=YES一行就完事,可是一开始确实是被拒的。不知为何。
#在此次探究中,我发现nobody用户才是vsftpd发生500 oops socket的关键之所在,而并非以前网上部分教程所提到的vsftpd没有子进程建立权限,事实上根据下面的调试命令,我发现vsftpd是彻底具有子进程建立权限的,而建立出的nobody用户子进程却不具有网络使用权限,因此我才想到了修改nobody的所属组,而后就完美解决了。
#这个命令就是发现上面缘由的关键strace -v -f -s 2048 -p [vsftpd服务的pid],有兴趣鼓捣的能够试试。可是输出的内容很长,建议粘贴到word中查看。