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/

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

相关推荐
是阿建吖!几秒前
【Linux | 网络】传输层(UDP和TCP)
linux·网络·udp·tcp
dessler22 分钟前
RabbitMQ-镜像队列(Mirrored Queues)
linux·运维·rabbitmq
瑾曦26 分钟前
Docker相关命令
linux
发抖吧小喵喵29 分钟前
rpm包直接安装新系统缺少依赖问题处理
linux·运维·服务器
码农101号1 小时前
Linux中Docker Swarm介绍和使用
linux·spring cloud·docker
Nazi61 小时前
dockerfile基础
linux·运维·docker·容器·云计算
跑不了的你1 小时前
Ubuntu 开启wifi 5G 热点
服务器·5g·ubuntu
所念皆为东辞1 小时前
elk部署加日志收集
linux·elk·elasticsearch·centos
TLucas2 小时前
Centos 7部署.NET 8网站项目
linux·nginx·postgresql·centos·.net
Doris_LMS7 小时前
在Linux下安装nginx(保姆级别)
linux·运维·nginx·centos