在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

Linux上的FTP server软件挺多的,很多都是优秀的而且免费或开源的,比如ProFTPd, pureFTPD或vsftpd等等。这些FTP server都很成熟,而且稳定,但也许是因为成熟,很多都很久不更新了,比如pureFTPD或vsftpd都有几年没有新版本发布了。不过ProFTPd这个软件却一直在更新。所以它就成为了我今天要在Ubuntu vps服务器是安装FTP Server的首选了。

安装ProFTPd Server

ProFTPd虽然很强大,但却很容易安装和配置。Ubuntu官方程序库中提供了ProFTPD FTP server安装包,直接使用APT工具就可以轻松下载和安装。

首选,我们更新APT package repository cache,使用下面的命令:

图0:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

然后,安装 ProFTPd :

$ apt install proftpd-basic

图1:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

此时,输入y,然后回车继续。

图2:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

这样,ProFTPd 就安装完成了。

图3:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

ProFTPd在Ubuntu上安装完成后,配置文件会存放在/etc/proftpd目录下。主配置文件叫做proftpd.conf,其它配置文件是通过在proftpd.conf里include引入。

图4:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

ProFTPd服务的名称就叫做proftpd。每次当我们更改了ProFTPd配置文件后,都需要重启proftpd服务。

重启proftpd服务,可以使用下面的命令:

$ systemctl restart proftpd

运行重启命令后,通过下面的命令来检查proftpd服务是否正确的运行了:

$ systemctl status proftpd

图5:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

可以看到,proftpd服务运行正常。

测试ProFTPD服务

ProFTPD服务安装完成后,你不需要对它进行配置,缺省的配置就可以很好的使用。我们可以使用Ubuntu系统里现有的用户登录FTP Server。

图6:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

添加FTP专用用户

虽然现有的Ubuntu用户可以当做FTP用户,但新建FTP专用用户是有必要的。我们要做的就是在Ubuntu系统里新建用户。

我们用下面的命令新建一个ftp2用户:

$ useradd -m ftp2

图7:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

现在给新建的ftp2用户设置密码:

$ passwd ftp2

图8:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

现在,输入密码,回车。

图9:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

再次输入密码,回车。

图10:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

这样,密码就设置好了。

ftp2用户可以登录FTP服务了。

图11:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

禁止FTP用户通过SSH访问系统

出于安全考虑,我们通常不希望FTP专用用户通过SSH登录我们的服务器。可是,我们系统里新建的用户都是可以使用SSH登录系统的,如下图:

图12:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

为了禁止他们使用SSH,我们需要将他们默认的登录shell替换成/bin/false

首先,使用文本编辑器打开配置文件/etc/shells,命令如下:

$ ne /etc/shells

图13:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

现在,将一行/bin/false添加到文件的末尾。

图14:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

下面,把用户ftp2的login shell修改成/bin/false,命令如下:

$ usermod -s /bin/false ftp2

图15:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

这样一来,用户ftp2就被禁止通过SSH登录了。

图16:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

但FTP登录仍然可以。

限制FTP用户只能看到自己的HOME目录

默认情况下,FTP用户可以浏览系统根目录。虽然只有浏览没有修改的权限,但将系统根目录暴露给FTP用户毕竟不是一个好的安全策略。这时,chroot jail就派上用场了。这上ProFTPd内置的一个功能特征,缺省状态是没有开启的。

要开启chroot jail,就需要修改/etc/proftpd/proftpd.conf这个配置文件,命令如下:

$ nano /etc/proftpd/proftpd.conf

图17:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

如下图,在里面找到这样一行:

图18:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

把行首的#删除掉,改成下图的模样,保存文件。

图19:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

修改了配置文件后要重启proftpd服务:

$ systemctl restart proftpd

图20:在Ubuntu 18.04 LTS上安装FTP Server及添加FTP虚拟用户

现在,FTP用户就只能看到自己的home目录了。

创建FTP虚拟用户

很多时候我们的FTP服务器是为WEB服务器服务的。比如系统里有Apache,我们使用FTP向WEB目录上传文件。这个时候,我们希望上传的文件的所有者应该是Apache的www-data。这个时候FTP虚拟用户的作用就显现出了。

什么是虚拟用户?很简单,它是没有出现在系统/etc/passwd文件里的用户。这个/etc/passwd就是一个文本文件,里面存放了可以登录系统的所有用户的信息,包括它们的唯一ID和组ID。而虚拟用户定义在其它文件里,或数据库、ldap服务器里。

很神奇的是,虚拟用户可以拥有和系统现有用户相同的UID和GID,也就可以拥有相同UID用户同样的权限。此时,需要在proftpd.conf里开启DefaultRoot ~配置来限制它们只能访问自己的目录。

ftpasswd

创建和管理proftpd虚拟用户,我们需要使用ftpasswd这个工具,它能把虚拟用户的信息存放到/etc/proftpd/ftpd.passwd/etc/proftpd/ftpd.group文件里。这两个文件对应的是ProFTPD配置文件里AuthUserFileAuthGroupFile这两个配置项。

假设我们创建一个拥有和www-data用户相同UID的FTP虚拟用户,先找到它的 UID 值:

~]$ cat /etc/passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

可以看到,www-data的UID是33,组id GID也是33。

创建user1user2两个虚拟用户:

~]$ ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=user1 --uid=33 --gid=33 --home=/var/www/html/user1 --shell=/bin/false             
ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: creating passwd entry for user user1

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.


Password: 
Re-type password: 

ftpasswd: entry created
~]$ ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=user2 --uid=33 --gid=33 --home=/var/www/html/user2 --shell=/bin/false
ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: creating passwd entry for user user2

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.


Password: 
Re-type password: 

ftpasswd: entry created

创建的过程中有提示让我们把RequireValidShell off这个配置项打开。这个配置项可以在/etc/proftpd/proftpd.conf配置文件里找到。

下面创建组文件:

~]$ ftpasswd --group --name=www-data --file=/etc/proftpd/ftpd.group --gid=33 --member user1,user2
ftpasswd: using alternate file: /etc/proftpd/ftpd.group
ftpasswd: updating group entry for group www-data
ftpasswd: entry updated

我们来看看这两个文件里都有什么内容:

~]$ cat ftpd.passwd 
user1:$1$elbFOuqM$Z0FfP9GhwMLIZza4m27ie.:33:33::/var/www/html/user1:/bin/false
user2:$1$RQfV4FlC$dOVVecDeUlSpKkvwUz4dow:33:33::/var/www/html/user2:/bin/false
~]$ cat /etc/proftpd/ftpd.group 
www-data:x:33:user1,user2

ftpasswd工具的其它用法

密码是加密的,修改密码还是要通过ftpasswd工具:

~]$ ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --change-password

ftpasswd锁住、解锁用户

~]$ ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test2 --lock
~]$ ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test2 --unlock

ftpasswd删除用户

~]$ ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --delete-user

有了虚拟用户信息后,我们需要在/etc/proftpd/proftpd.conf配置文件做相应的关联,添加下面的配置信息:

DefaultRoot ~
  RequireValidShell off
  AuthUserFile /etc/proftpd/ftpd.passwd
  AuthGroupFile /etc/proftpd/ftpd.group
  AuthOrder mod_auth_file.c

重启proftpd后台服务

~] systemctl restart proftpd.service

遇到530 Login incorrect问题

如果你在使用的ftp client登录时遇到,530 Login incorrect错误,无法登录ftp服务。可以打开服务器上的/var/log/proftpd/proftpd.log日志文件,也许会看到user not found的信息。这个时候,有可能你忘了在配置文件里添加AuthOrder mod_auth_file.c这行信息了。

阅读余下内容
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注


京ICP备12002735号