系统配置
配置 ftp 教程
1. 安装 vsftpd 软件包
- 执行以下命令安装
vsftpd
sudo apt-get update
sudo apt-get install vsftpd
- 执行
vsftpd -v查看版本,验证是否安装成功
2. 配置文件
vim /etc/vsftpd.conf
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
- 自定义配置项举例
当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
注意: 如果限制了用户不能切换其他目录,一定要在配置文件中新增 allow_writeable_chroot=YES,否则会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
3. 创建FTP用户
以下操作在 home目录下创建一个FTP主目录,然后创建一个普通用户
# 创建FTP用户主目录
sudo mkdir /home/uftp
# 添加FTP用户uftp,指定用户主目录和所用shell
# `-d` 选项指定用户的主目录,也就是用户登录后所在的默认目录。在这个例子中,`-d /home/uftp` 指定 `uftp` 用户的主目录为 `/home/uftp`。
# `-s` 选项指定用户的默认shell。Shell是一个命令行解释器,它允许用户与操作系统进行交互。在这个例子中,`-s /bin/bash` 指定 `uftp` 用户的默认shell为Bash。
sudo useradd -d /home/uftp -s /bin/bash uftp
# 设置密码
sudo passwd uftp
- 额外配置:创建一个不能登陆,仅能通过
ftp访问的用户,并给该用户指定一个已存在的文件目录
# 创建uftp用户,指定此用户的主目录。
# `-d` 选项用于指定用户的主目录;`-s` 选项用于指定用户的默认 shell。
# `/sbin/nologin` 是一个特殊的 shell,它不允许用户登录系统.
# 通常用于限制某些用户只能通过特定的服务(如FTP、SFTP等)进行远程访问,
# 而不能直接登录系统。
sudo useradd -d /data/liss -s /sbin/nologin uftp
# 设置密码
sudo passwd uftp
# 如果想要恢复为正常用户,可以执行以下命令:
sudo usermod -s /bin/bash uftp
**如果你创建的用户是只能通过ftp访问的用户,一定要删除 /etc/pam.d/vsftpd 配置文件,因为这个配置文件会导致使用用户名登录 ftp 失败**
4. 添加 vsftpd.chroot_list
编辑/etc/vsftpd.chroot_list文件,如果不存在则新创建一个,该文件用于存放方位FTP的用户
# 如果不存在会自动创建
sudo vim /etc/vsftpd.chroot_list
如果存在多个用户,则每个用户一行
5. 重启FTP服务使配置生效
sudo service vsftpd restart
使用ps -aux | grep vsftpd 查看服务是否启动
6. 测试连接效果
使用 FileZilla 连接成功
问题及解决方案
ftp上传文件报错:553 Could not create file
解决方案:blog.csdn.net/weixin_4353…
- 打开
vsftp.conf文件,添加如下配置
sudo gedit /etc/vsftpd.conf
allow_writeable_chroot=YES
- 更改
ftp文件夹权限
sudo chmod -R 777 /home/uftp