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
相关产品推荐
相关产品推荐

