ftp服务器搭建详细步骤
ftp服务器搭建详细步骤
我上周刚给公司内部搭了个FTP服务器,搭建用的详细还是台淘汰的旧电脑,装的步骤是Ubuntu Server 22.04。别被“服务器”三个字吓着,搭建本质上就是详细装个vsftpd软件,改几行配置,步骤然后开个防火墙端口的搭建事。整个过程半小时内能搞定,详细但坑也不少,步骤我踩过的搭建你最好绕开走。
先装软件。详细SSH登录到机器上,步骤执行sudo apt update && sudo apt install vsftpd -y。搭建装完别急着启动,详细默认配置是步骤只允许匿名访问,根目录在/srv/ftp,这显然不够用。你要做的是先备份原配置:sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak,然后编辑/etc/vsftpd.conf。
配置这块儿,我直接说关键行。找到anonymous_enable=YES改成NO,这是关掉匿名登录。接着把local_enable=YES前面的注释去掉,允许本地用户登录。write_enable=YES也得开,不然上传文件会报550错误。还有chroot_local_user=YES,这行很重要——它把用户锁在自己的home目录里,防止有人登录后跑到系统其他目录乱逛。我一开始没开这个,测试时发现自己能cd到/etc,吓出一身冷汗。
保存配置后重启服务:sudo systemctl restart vsftpd。但这时候你用系统用户登录试试,八成会失败。为什么?因为vsftpd默认不允许系统shell是/bin/bash的用户登录,得把shell改成/sbin/nologin。我用的命令是sudo usermod -s /sbin/nologin ftpuser,这步不做,你连登录界面都见不着。
用户和目录得单独建。别直接用root当FTP账号,不安全。我创建了个专用用户:sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser,然后sudo passwd ftpuser设密码。注意-d参数指定了home目录,这个目录就是用户登录后看到的根目录。如果你想让这个目录能写文件,得调整权限:sudo chown ftpuser:ftpuser /home/ftpuser。这点容易漏,默认root创建的目录,ftpuser根本没权限写。
防火墙得放行21端口。Ubuntu默认开着ufw的话,执行sudo ufw allow 21/tcp。但FTP还有个麻烦事——主动模式和被动模式。主动模式用20端口,被动模式用随机高端口。客户端在防火墙后面的话,主动模式经常连不上。我在配置里加了三行解决被动模式:pasv_enable=YES、pasv_min_port=30000、pasv_max_port=30100,然后防火墙放行这段端口:sudo ufw allow 30000:30100/tcp。不这么做,FileZilla连接时会卡在“读取目录列表”那步,然后超时。
测试环节别省。我习惯用命令行测:ftp 192.168.1.100,输入用户名密码,能登录就算基本成功。然后试put和get命令传个小文件,验证读写权限。上传下载都正常的话,再用FileZilla从Windows机器连一次,确认被动模式工作。我那次测试时发现一个怪现象——命令行能传文件,但FileZilla报错。查了半天,是FileZilla默认用被动模式,而我当时没开pasv端口,开了之后立刻正常。
最后提醒一句:日志很重要。出问题时看/var/log/vsftpd.log,里面会写清楚拒绝原因。比如我遇到过“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”这个错误,就是因为chroot后home目录本身可写,vsftpd认为不安全。解决办法是chmod 555 /home/ftpuser,再建个子目录mkdir /home/ftpuser/files并赋予写权限,让用户只能往子目录里传东西。这坑我折腾了半小时才爬出来,你直接跳过吧。
