自 14.04 起,vsftpd 安装在虚拟服务器上无法运行

自 14.04 起,vsftpd 安装在虚拟服务器上无法运行

自 12.04 以来,我安装 vsftpd 时使用的流程不再有效。重新启动服务时出现错误stop: Unknown instance。我相信这意味着配置错误,但我无法追踪问题所在。我在虚拟服务器上遇到了这个问题。

此外,运行sudo vsftpd结果500 OOPS: munmap如@Beltran 所述。


  1. 获取root权限

    sudo -s
    
  2. 安装 vsftpd 和 libpam-pwdfile

    apt-get install vsftpd libpam-pwdfile
    
  3. 编辑 vsftpd.conf

    mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
    vim /etc/vsftpd.conf
    

    复制并粘贴以下行。

    allow_writeable_chroot=YES
    anonymous_enable=NO
    chroot_list_enable=YES
    chroot_local_user=YES
    guest_enable=YES
    guest_username=vsftpd
    hide_ids=YES
    listen=YES
    local_enable=YES
    local_umask=022
    local_root=/var/clients/$USER
    nopriv_user=vsftpd
    pasv_address=127.0.0.1
    pasv_enable=YES
    pasv_min_port=65000
    pasv_max_port=65100
    port_enable=YES
    user_sub_token=$USER
    seccomp_sandbox=NO
    virtual_use_local_privs=YES
    write_enable=YES
    
  4. 注册虚拟管理员

    apt-get install apache2-utils
    mkdir /etc/vsftpd
    htpasswd -cd /etc/vsftpd/ftpd.passwd admin
    vim /etc/vsftpd.chroot_list
    

    为管理员用户添加 1 行

    admin
    
  5. 配置 PAM

    mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
    vim /etc/pam.d/vsftpd
    

    复制并粘贴这两行。

    auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
    account required pam_permit.so
    
  6. 创建没有 shell 访问权限的本地用户

    useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
    
  7. 创建根目录并授予本地用户适当的访问权限。

    mkdir /var/clients
    chmod -R 755 /var/clients
    chown -R vsftpd:nogroup /var/clients
    
  8. 注册被监禁的虚拟用户(最初我跳过了这一步)

    htpasswd -d /etc/vsftpd/ftpd.passwd {user_name}
    mkdir /var/clients/{user_name}
    
  9. 重启服务

    service vsftpd restart
    

答案1

Ubuntu 14.04 使用用户会话在 12.04 中不存在,因此service正在查看用户会话,而不是系统会话,并且您的用户未运行 vstfpd(root 正在运行)。因此,您需要指定--system何时使用service来启动、停止或检查服务的状态。

vsftpd 是 upstart 的软链接,因此您无法以非特权用户身份运行它,您需要以 root 身份启动或停止或检查此类进程的状态。

做一个ls -l on /etc/init.d/vsftpd揭示:

lrwxrwxrwx 1 root root 21 May 16  2013 /etc/init.d/vsftpd -> /lib/init/upstart-job*

它与 类似cronresolvconf还有其他几个,它们都是 upstart 作业,需要以 root 身份启动或停止。

Upstart 是一个基于事件的 /sbin/init 守护进程的替代品,它负责在启动期间启动任务和服务,在关机期间停止它们,并在系统运行时监督它们。

这些服务通常在启动时启动。有关 upstart 的更多信息,请参见此处:

如果您想要了解更多,请参阅 upstart 的手册页!

长话短说,要启动、停止、检查状态,您需要成为 root。您可以按如下方式执行此操作:

sudo service vsftpd {start|stop|status|restart}

并输入您的密码或使用:

service vsftpd {start|stop|status|restart} --system

答案2

在您的软件源中启用 trusty-proposed 并重新安装 vsftpd。我正在检查这是否符合要求。

如果您不希望启用源中建议的 vsftpd 源,则可以在此页面找到构建版本。https://launchpad.net/ubuntu/trusty/+source/vsftpd/3.0.2-1ubuntu2.14.04.1

答案3

如果你在 AWS EC2 实例上遇到此问题,则应尝试使用以下方法创建实例HVM 虚拟化而不是半虚拟化。

如果您仍然需要半虚拟实例,则无法确定何时会修复该错误,因为它是 Xen 内核中的一个错误,该内核用于运行 AWS 的虚拟化。

以下是更详细地解决此问题的错误线程: https://bugs.launchpad.net/ubuntu/+source/vsftpd/+bug/1313450

答案4

这在 Ubuntu 14.04 上对我有用。如果用户被关在/var/www/html/kofi_site目录中,则只需运行:

sudo chmod ugo-w /var/www/html/kofi_site

相关内容