先决条件,确保你已经配置好了存储库。
-
安装vsftpd
为了方便实验,我已经切换到了root用户。
root@local:~# apt-get install vsftpd
-
修改配置
配置文件在 /etc/vsftpd.confroot@local:~# grep -vE '^#|^$' /etc/vsftpd.conf listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_list_enable=YES chroot_local_user=NO chroot_list_file=/etc/vsftpd.chroot_list secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO pasv_enable=YES pasv_min_port=10000 pasv_max_port=10100
listen=NO
: 禁用 vsftpd 的独立监听模式,意思就是托管给与 xinetd 或其他服务管理器,设置为YES代表独立运行,但是如果设置为YES就不会监听端,即使设置了端口号也不会监听。listen_ipv6=YES
: 监听IPV6 地址anonymous_enable=NO:
禁止匿名用户访问local_enable=YES:
允许本地用户访问write_enable=YES:
允许本地用户上传文件local_umask=022:
设置文件默认权限,表示用户上传的文件将有 644 权限(755 对于目录)dirmessage_enable=YES:
启用目录消息功能,如果设置为 YES,用户进入目录时会显示 .message 文件的内容,文件在家目录下默认不存在需要自己创建。use_localtime=YES:
使用本地时间显示文件时间。xferlog_enable=YES:
如果设置为 YES,FTP 会话的日志将被记录到 /var/log/xferlog 文件中。connect_from_port_20=YES:
如果设置为 YES,FTP 会话将使用端口 20 进行数据传输。chroot_list_enable=YES:
启用 chroot 列表功能。如果设置为 YES,vsftpd 将使用 /etc/vsftpd.chroot_list 文件来管理哪些用户被限制在自己的主目录中,如果设置为NO /etc/vsftpd.chroot_list 那么/etc/vsftpd.chroot_list 文件中的用户将不会被限制。chroot_local_user=NO:
禁用对所有本地用户的 chroot 限制,如果设置为 NO,只有在 /etc/vsftpd.chroot_list 文件中列出的用户才会被限制在自己的主目录中。chroot_list_file=/etc/vsftpd.chroot_list:
vsftpd 将使用此文件来管理哪些用户被限制在自己的主目录中,此文件需要自己创建。secure_chroot_dir=/var/run/vsftpd/empty:
指定安全的 chroot 目录,此目录用于确保 chroot 环境的安全性。pam_service_name=vsftpd:
指定 PAM 服务名称,vsftpd 将使用此名称来查找 PAM 配置文件。rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem:
指定 RSA 证书文件的路径,此文件用于 SSL/TLS 加密(公钥加密)rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key:
指定 RSA 私钥文件的路径,此文件用于 SSL/TLS 加密(私钥解密)ssl_enable=NO:
禁用 SSL/TLS 加密,如果设置为 NO,FTP 会话将不使用 SSL/TLS 加密.pasv_enable=YES:
启用被动模式连接,如果设置为 YES,FTP 会话将支持被动模式连接。pasv_min_port=10000 和 pasv_max_port=10100:
设置被动模式连接的端口范围。
2.1. 由于启用了chroot_list_enable功能,所以需要创建 /etc/vsftpd.chroot_list 文件。
root@local:~# touch /etc/vsftpd.chroot_list
chroot_list_enable=YES # 启用禁固目录功能,设置为YES表示/etc/vsftpd.chroot_list文件用的用户将会被限制在自己的家目录,设置为NO表示所有的用户会被限制在家目录,但是排除/etc/vsftpd.chroot_list中的用户
chroot_local_user=NO # 禁用对所有本地用户的 chroot 限制,如果设置为 NO,只有在 /etc/vsftpd.chroot_list 文件中列出的用户才会被限制在自己的主目录中,设置为YES表示只有/etc/vsftpd.chroot_list 文件中的用户不会被限制。
chroot_list_file=/etc/vsftpd.chroot_list
2.2. 设置完后重启vsftpd使用客户端连接测试。
如上报错是因为从 vsftpd 3.0.0 版本开始,如果用户被禁锢(chroot)在其家目录中,且家目录具有写权限,vsftpd 会拒绝运行,以防止潜在的安全风险。 意思就是说需要把家目录的 写权限给去掉,但是如果去掉的就无法在家目录下创建文件,也无法上传。处理方法有两种
a. 方法一、 修改配置文件允许家目录保持可写状态,修改完需要重启vsftpd
allow_writeable_chroot=YES
成功登录,并且可以正常创建文件。
b. 方法二、去掉家目录的 写权限,在家目录下创建一个子目录,确保子目录具有写权限。
如果配置了allow_writeable_chroot=YES参数需要注释掉,并重启ftp
root@local:~# chmod -w /home/ftpuser
root@local:~# ll -d /home/ftpuser
dr-xr-xr-x 2 ftpuser ftpuser 4096 Feb 14 09:56 /home/ftpuser/
root@local:~# mkdir /home/ftpuser/uploads
root@local:~# chown ftpuser:ftpuser /home/ftpuser/uploads/
root@local:~# ll -d /home/ftpuser/uploads
drwxr-xr-x 2 ftpuser ftpuser 4096 Feb 14 09:58 /home/ftpuser/uploads/
可以看出正常登录,进来并且可以创建文件。