在ubuntu中配置vsftpd 多用户对应多目录,使用虚拟用户设置VSFTPD账户(无需数据库工具)

在ubuntu中配置vsftpd 多用户对应多目录,使用虚拟用户设置VSFTPD账户(无需数据库工具)

我想在我的服务器上安装FTP服务器,我在网上查资料后,发现VSFTPD是最安全的,所以我就开始安装使用它。 我测试过很多教程,但找不到任何全面详细的教程,所以决定写我自己的方法。在我的个人服务器上建立了VSFTPD服务,接下来跟着我的教程一步一步部署VSFTPD到我们的专用服务器。

安装VSFTPD概要

  • 安装vsftpd、PAM库 htpasswd
  • 编辑/etc/vsftpd.conf和/etc/pam.d/vsftpd文件
  • 创建自定义用户目录(例如:/var/www/)
  • 使用 chmod 和 chown 设置正确的权限和组目录
  • 创建拥有完全访问到服务器的管理员用户
  • 疑难解答

1. 安装vsftpd(Very Secure FTP Deamon:非常安全的FTP守护进程)和 libpam-pwdfile 、apache2-utils 工具可以创建虚拟用户

我想创建FTP用户,但不想添加本地UNIX用户(没有shell访问,没有主目录等)。一个PAM(Pluggable Authentication Modules将帮助您创建虚拟用户。
sudo apt-get install vsftpd libpam-pwdfile apache2-utils

2. 编辑vsftpd.conf

首先,你需要备份原始文件
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
然后创建一个新的 vsftpd.conf 文件
sudo vim /etc/vsftpd.conf
复制并粘贴以下行。该文件应该只包含这些行
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd

# reserve TCP ports 2121-2142 for passive FTP
pasv_min_port=2121
pasv_max_port=2142

3. 注册虚拟用户

注册使用htpasswd的用户。创建一个文件夹的vsftpd然后把配置文件在里面。
sudo mkdir /etc/vsftpd
然后
sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1
  • -c:如果文件不存在,将自动创建文件
  • -d:MD5 加密,你需要在Ubuntu 14.04中,该命令将提示输入密码。
如果你想以后添加新用户,使用以下命令:
sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

4. 配置PAM在/etc/pam.d/vsftpd

同样,你需要备份最初的文件
sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
并创建一个新的 vsftpd 文件
sudo vim /etc/pam.d/vsftpd
复制并粘贴这两行代码(这个文件中应该只包含这两行内容)。
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

5. 创建没有shell访问的本地用户

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
当用户连接到FTP服务器时,它们将被用于管理对应用户名字的权限目录。

6. 重新启动vsftpd

常见的方法是使用的init.d重启守护进程,如下:
sudo /etc/init.d/vsftpd restart
或使用 service 命令重启
sudo service vsftpd restart

7. 创建目录

根据配置的所有用户将被放置到这个文件夹:/var/www/user1 您需要特别权利创建它们:根文件夹不能写!
  • Folder / [root = /var/www/user1] => 555
    • Folder www [ /var/www/user1/www ] => 755
    • Folder docs [ /var/www/user1/docs ] => 755
注:在根目录下的用户**不能**创建文件或文件夹。
在vsftpd.conf中,我们有chroot_local_user = YES,使用户无法看到他的文件夹以外的任何东西。对他来说,服务器看起来是这样的: 登录FTP vsftpd的chroot环境 因此,只要运行这些命令:
mkdir /var/www/user1
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1
在 /var/www/user1 的文件夹已存在,或连接失败。 现在,你可以尝试用你的FTP客户端连接,它一定会成功!如果没有,你可以检查排除故障部分。

8. 创建管理员用户访问整个服务器

要创建一个管理员用户,我们需要注册htpasswd的新用户。 在这样做之前,我会建议您检查到该定义被某些用户在/etc/ftpusers文件中未允许使用FTP连接。我认为这只是为本地用户,而不是虚拟用户,但以防万一,不要选择包含在此文件的名称。说实话,vsftpd是够复杂!
sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin
创建 /etc/vsftpd.chroot_list 文件,并把上边用户和密码添加到这个文件(第一行用户名,第二行密码):
theadmin
you_password
现在,我们需要在 /etc/vsftpd.conf文件中添加一行,代码如下:
chroot_list_enable=YES
  加入这个命令后,意味着在/etc/vsftpd.chroot_list 里的用户,你不必创建一个像/var/www/theadmin的文件夹,用户将登录后应该显示/home/vsftpd为主目录。 重新启动服务器,你就大功告成了!

故障排除

下面是我遇到了一些错误。

500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

你的根目录是可写的,这是不允许的。检查第7部分查看更多信息,你需要创建一个555根,755子文件夹

500 OOPS: cannot change directory:/var/www/theadmin if the folder doesnt exist

在/var/www/$USER 文件夹不存在,用正确的权限(不可写)创建或添加用户进入/etc/vsftpd.chroot_list(见第8部分)。不要忘了重新启动服务器。

htpasswd: cannot create file /etc/vsftpd/ftpd.passwd

在/etc/vsftpd/ 文件夹已存在,htpasswd不会创建它。

vsftpd restart or stop error: “restart: Unknown instance”

这意味着你不能启动守护进程,即使你有/etc/init.d/vsftpd启动成功消息。它不会启动,因为你的配置是错误的。再次查看教程细节。

Error: Connection timed out after 20 seconds of inactivity

查看是否开启 21端口并开启 2121 - 2142 端口。 推荐阅读:mysql 5个常用操作,添加用户配置对应数据库,开启远程访问,修改密码