You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alpine容器中搭建vsftpd执行操作时出现500 OOPS: child died错误求助

解决Alpine容器中vsftpd 500 OOPS: child died 错误

这个错误通常由PAM配置缺失、用户Shell无效或目录权限问题导致,以下是针对性的解决步骤:

1. 补全PAM认证配置

Alpine的vsftpd依赖PAM处理用户登录,但默认没有创建对应的PAM规则文件。在Dockerfile中添加:

RUN echo "auth required pam_unix.so shadow" > /etc/pam.d/vsftpd
RUN echo "account required pam_unix.so" >> /etc/pam.d/vsftpd

2. 为FTP用户设置有效登录Shell

adduser -D创建的用户默认Shell是/bin/false,vsftpd无法基于该Shell创建子进程执行文件操作。修改用户创建命令:

RUN adduser -D -s /bin/sh tofaha

3. 修正用户主目录权限

即使启用了allow_writeable_chroot=YES,主目录权限仍需符合vsftpd的安全要求(不能全局可写),添加权限修正命令:

RUN chmod 755 /home/tofaha

4. 查看日志定位剩余问题

如果上述操作后仍报错,直接前台运行容器查看实时日志:

docker run -p 21:21 --name ftp-cont my-ftp

或进入容器查看日志文件:

docker exec -it ftp-cont sh
cat /var/log/vsftpd.log

日志会明确子进程崩溃的具体原因,比如配置冲突、资源不足等。

修正后的完整Dockerfile

FROM alpine:3.19

RUN apk upgrade && apk update
RUN apk add lftp vsftpd

RUN adduser -D -s /bin/sh tofaha 
RUN echo tofaha:1337 | chpasswd 

RUN echo "auth required pam_unix.so shadow" > /etc/pam.d/vsftpd
RUN echo "account required pam_unix.so" >> /etc/pam.d/vsftpd

RUN chmod 755 /home/tofaha

RUN \
        echo "listen=YES" > /etc/vsftpd/vsftpd.conf; \
        echo "local_enable=YES" >> /etc/vsftpd/vsftpd.conf; \
        echo "write_enable=YES" >> /etc/vsftpd/vsftpd.conf; \
        echo "anonymous_enable=NO" >> /etc/vsftpd/vsftpd.conf; \
        echo "chroot_local_user=YES" >> /etc/vsftpd/vsftpd.conf; \
        echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf;

CMD vsftpd /etc/vsftpd/vsftpd.conf

EXPOSE 21

内容的提问来源于stack exchange,提问作者Holy semicolon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:53:15