需求:乌班图22.04安装配置ftp,然后配置一个用户,用户名deviceftp密码aaaa,并且设置端口为60021,并且限制在/app/deviceftp目录下,不允许匿名登录
在Ubuntu 22.04上安装和配置FTP服务器的步骤如下:
安装FTP服务器:
sudo apt-get install vsftpd
配置FTP服务器:
sudo nano /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
user_sub_token=$USER
和 local_root=/app/$USER
添加FTP用户:
sudo adduser deviceftp
aaaaa
)。/app/deviceftp
:sudo usermod -d /app/deviceftp deviceftp
创建并设置目录:
sudo mkdir -p /app/deviceftp
sudo chown deviceftp:deviceftp /app/deviceftp
更改FTP端口:
sudo nano /etc/vsftpd.conf
listen_port=60021
重启FTP服务:
sudo systemctl restart vsftpd
配置防火墙(如果需要):
sudo ufw allow 60021/tcp
sudo ufw enable
(如果尚未启用)测试FTP连接:
请注意,FTP协议本身不是加密的,因此可能不适合传输敏感数据。如果需要安全传输,考虑使用SFTP或FTPS。
要通过命令行测试FTP服务器连接,你可以使用ftp
或lftp
命令。这里是如何使用它们的步骤:
ftp
命令安装 ftp 客户端(如果尚未安装):
sudo apt-get install ftp
连接到FTP服务器:
ftp -p [服务器IP] 60021
来连接服务器。deviceftp
和 aaaaa
)。测试命令:
ls
, put
, get
等来测试。ls
查看远程目录列表。退出FTP:
bye
或 quit
来退出FTP会话。lftp
命令lftp
是一个更强大的FTP客户端,支持FTP、FTPS和SFTP。
安装 lftp 客户端(如果尚未安装):
sudo apt-get install lftp
连接到FTP服务器:
lftp -u deviceftp -p 60021 [服务器IP]
来连接服务器。aaaaa
)。测试命令:
lftp
命令行中,同样可以使用如ls
、put
、get
等命令来测试服务器。退出lftp:
exit
退出。请确保你使用的是服务器的正确IP地址。如果你在本地机器上测试,这通常是127.0.0.1
或localhost
。如果服务器位于你的本地网络之外,请确保使用正确的外部IP地址,并且所需端口在任何网络防火墙和路由器上都已开放。
错误信息 “500 OOPS: vsftpd: refusing to run with writable root inside chroot()” 表明 vsftpd 配置中有一个安全限制。在启用了 chroot
隔离的情况下,vsftpd 不允许用户的根目录是可写的。这是为了增加服务器的安全性。
要解决这个问题,你有两个选择:
这个选项涉及改变/app/deviceftp
目录的权限,使其变为不可写。
更改目录权限:
执行以下命令使根目录变为只读:
sudo chmod a-w /app/deviceftp
创建一个子目录供上传和下载:
你可能还需要在/app/deviceftp
下创建一个子目录,以便deviceftp
用户可以上传和下载文件:
sudo mkdir /app/deviceftp/upload
sudo chown deviceftp:deviceftp /app/deviceftp/upload
如果你确实需要让根目录是可写的,可以通过在vsftpd配置中添加一个设置来允许这种行为。
编辑 vsftpd 配置文件:
sudo nano /etc/vsftpd.conf
添加或取消注释配置:
在配置文件中添加以下行:
allow_writeable_chroot=YES
重启 vsftpd:
保存文件并重启 vsftpd 服务:
sudo systemctl restart vsftpd
完成这些步骤后,再次尝试使用 lftp
连接并执行 ls
命令,看看问题是否得到解决。记住,选项 2 降低了安全性,因此如果你的FTP服务器不是面向公网或安全性要求不高,可以考虑使用这个选项。如果安全性很重要,则建议使用选项 1。