ubuntu 22.04 安装vsftpd服务

先决条件,确保你已经配置好了存储库。

  1. 安装vsftpd

    为了方便实验,我已经切换到了root用户。

    bash 复制代码
    root@local:~# apt-get install vsftpd
  2. 修改配置

    配置文件在 /etc/vsftpd.conf

    bash 复制代码
    root@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 文件。

bash 复制代码
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

bash 复制代码
allow_writeable_chroot=YES

成功登录,并且可以正常创建文件。

b. 方法二、去掉家目录的 写权限,在家目录下创建一个子目录,确保子目录具有写权限。

如果配置了allow_writeable_chroot=YES参数需要注释掉,并重启ftp

bash 复制代码
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/

可以看出正常登录,进来并且可以创建文件。

相关推荐
Christal_pyy14 分钟前
树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络
linux·网络·debian
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
Natsuagin3 小时前
轻松美化双系统启动界面与同步时间设置(Windows + Ubuntu)
linux·windows·ubuntu·grub
我们的五年4 小时前
【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
linux·网络·http
我们的五年6 小时前
【Linux网络】TCP/IP地址的有机结合(有能力VS100%???),IP地址的介绍
linux·运维·网络·tcp/ip
davenian6 小时前
< OS 有关 > Ubuntu 24 SSH 服务器更换端口 in jp/us VPSs
linux·ubuntu·ssh
诚信爱国敬业友善7 小时前
GUI编程(window系统→Linux系统)
linux·python·gui
sekaii7 小时前
ReDistribution plan细节
linux·服务器·数据库
YH_DevJourney7 小时前
Linux-C/C++《C/8、系统信息与系统资源》
linux·c语言·c++
威哥爱编程8 小时前
Linux驱动开发13个实用案例
linux