ubuntu搭建ftp服务器,并配置虚拟用户权限

安装并启动 FTP 服务

安装 VSFTPD

使用 apt-get 安装 [vsftpd]:

sudo apt-get install vsftpd -y

vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其官网介绍,它可能是 UNIX-like 系统下最安全和快速的 FTP 服务器软件。

启动 VSFTPD

安装完成后 VSFTPD 会自动启动,通过 netstat 命令可以看到系统已经[监听了 21 端口]:

sudo netstat -nltp | grep 21

如果没有启动,可以手动开启 VSFTPD 服务:

sudo systemctl start vsftpd.service

FTP 协议默认使用 21 端口作为服务端口

配置用户访问目录

新建用户主目录

sudo mkdir /home/uftp

执行完后,在这里 /home/uftp [?] 就能看到新建的文件夹 uftp 了。

创建登录欢迎文件 [?]:

sudo touch /home/uftp/welcome.txt

方便用户登录后可以看到欢迎信息,并且确定用户确实登录到了主目录上。

用户的主目录是用户通过 FTP 登录后看到的根目录

新建用户 uftp 并设置密码

创建一个用户 uftp [?]:

sudo useradd -d /home/uftp -s /bin/bash uftp

为用户 uftp 设置密码 [?]:

sudo passwd uftp

删除掉 pam.d 中 vsftpd,因为该配置文件会导致使用用户名登录 ftp 失败:

sudo rm /etc/pam.d/vsftpd

为了方便后面的实验步骤,不建议使用其它的用户名

请记住设置的密码以用于后续步骤

限制该用户仅能通过 FTP 访问

限制用户 uftp 只能通过 FTP 访问服务器,而不能直接登录服务器:

sudo usermod -s /sbin/nologin uftp

修改 vsftpd 配置

sudo chmod a+w /etc/vsftpd.conf

修改 /etc/vsftpd.conf 文件中的配置(直接将如下配置添加到配置文件最下方):

# 限制用户对主目录以外目录访问

chroot_local_user=YES

 

# 指定一个 userlist 存放允许访问 ftp 的用户列表

userlist_deny=NO

userlist_enable=YES

 

# 记录允许访问 ftp 用户列表

userlist_file=/etc/vsftpd.user_list

 

# 不配置可能导致莫名的530问题

seccomp_sandbox=NO

 

# 允许文件上传

write_enable=YES

 

# 使用utf8编码

utf8_filesystem=YES

新建文件 /etc/vsftpd.user_list,用于存放允许访问 ftp 的用户:

sudo touch /etc/vsftpd.user_list

sudo chmod a+w /etc/vsftpd.user_list

修改 /etc/vsftpd.user_list ,加入刚刚创建的用户:

示例代码:/etc/vsftpd.user_list

uftp

设置访问权限

设置主目录访问权限(只读):

sudo chmod a-w /home/uftp

新建公共目录,并设置权限(读写):

sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public

重启vsftpd 服务:

sudo systemctl restart vsftpd.service

访问 FTP 服务

FTP 服务已安装并配置完成,下面我们来使用该 FTP 服务

访问 FTP 服务

根据您个人的工作环境,选择一种方式来访问已经搭建的 FTP 服务

通过 FTP 客户端工具访问

FTP 客户端工具众多,下面推荐两个常用的:

FileZilla - 跨平台的 FTP 客户端,支持 Windows 和 Mac

WinSCP - Windows 下的 FTP 和 SFTP 连接客户端

下载和安装 FTP 客户端后,使用下面的凭据进行连接即可:

[主机]:

<您的 CVM IP 地址>

用户:

uftp

输入密码后,如果能够正常连接,那么大功告成,您可以开始使用属于您自己的 FTP 服务器了!

接下来,请上传任意一张图片到您的 FTP 服务器上的 uftp 的 public 目录下,然后,就可以在/home/uftp/public 中看到了。

通过 Windows 资源管理器访问

Windows 用户可以复制下面的[链接]到资源管理器的地址栏访问:

ftp://uftp:你的密码@<您的 CVM IP 地址>

如果您申请了域名,可以将Ip 地址替换为对应的域名作为访问凭据

如果您申请了域名,可以将链接中的 Ip 地址替换为对应的域名访问 FTP 服务

大功告成

恭喜!您已经成功完成了搭建 FTP 服务器的实验任务。

 

阿里云被动模式配置

如果vsftp是部署在阿里云上,无法在windows资源管理器上打开,这是阿里云的网络环境引起的。这里需要理解下ftp的被动模式,被动模式下,客户端请求ftp服务器后,ftp服务器告诉客户端获取数据的地址和端口,但是阿里云服务上的网卡都是内网地址。参考:https://blog.csdn.net/ridicuturing/article/details/80308053

所以完成上面的部署后,我们需要再修改,最后配置内容:

#以下三项要修改,关闭ipv6,指定外网IP,未测试配置之后内网是否可以说访问

listen=YES

listen_ipv6=NO

pasv_address=47.52.234.212

anonymous_enable=NO

local_enable=YES

dirmessage_enable=YES

use_localtime=YES

xferlog_enable=YES

 

#配置被动模式端口

pasv_enable=YES

pasv_min_port=9000

pasv_max_port=9045

 

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

chroot_local_user=YES

userlist_deny=NO

userlist_enable=YES

userlist_file=/etc/vsftpd.user_list

seccomp_sandbox=NO

write_enable=YES

utf8_filesystem=YES

 

ps: pasv_address 此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。

pasv_min_port=port number

pasv_max_port=port number

设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。显示阿里云服务是不可能让它随意安排端口,必需指定使用我为它开放的端口如9000~9045

 

配置虚拟用户

在通过以上配置,客户端可以登录uftp账号连接ftp,但是这种账号是使用了系统账号,这是一种并不安全的方案,虽然我们禁了uftp通过ssh2连接系统。更安全的做法是配置虚拟ftp用户,这里虚拟ftp用户可以是基于文件,也可以基于数据库,这里介绍基于文件的虚拟用户,基于数据的虚拟用户配置参考:https://blog.csdn.net/qq_18863573/article/details/52296554 

https://blog.csdn.net/u010257920/article/details/52435250

1.创建一个文本文件,将用户名密码逐行填写到里面,如:

sudo mkdir /etc/vsftp

cd /etc/vsftp

sudo touch loguser.txt

sudo vim loguser.txt

将用户名、密码一行一行地填写,比如创建两个用户名和密码相同的teacher和student,那么,loguser.txt的内容是:

teacher

teacher

student

student

 

2.根据loguser.txt文件创建虚拟用户数据库:

sudo apt-get install db-util

sudo db_load -T -t hash -f loguser.txt /etc/vsftp/vsftpd_login.db

 

3.赋予虚拟用户数据库文件合适的权限:

sudo chmod 600 vsftpd_login.db

 

4.创建新的vsftpd认证配置文件:

sudo touch /etc/pam.d/vsftpd.vu

sudo vim /etc/pam.d/vsftpd.vu

配置刚才生成的数据库文件

auth sufficient pam_userdb.so db=/etc/vsftp/vsftpd_login

account sufficient pam_userdb.so db=/etc/vsftp/vsftpd_login

 

5.修改vsftpd配置文件,内容如下(可以将原来的备份,就只配置如下的配置,注意pasv_address对应云服务器外网IP):

listen=YES

listen_ipv6=NO

pasv_address=47.52.234.212

anonymous_enable=YES

local_enable=YES

dirmessage_enable=YES

use_localtime=YES

xferlog_enable=YES

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

pasv_enable=YES

pasv_min_port=9000

pasv_max_port=9045

secure_chroot_dir=/var/run/vsftpd

pam_service_name=vsftpd.vu

chroot_local_user=YES

# 不配置可能导致莫名的530问题

seccomp_sandbox=NO

write_enable=YES

utf8_filesystem=YES

allow_writeable_chroot=YES

 

guest_enable=YES

guest_username=uftp

user_config_dir=/etc/vsftp/vsftpd_user_conf

#新建的目录 权限是755,文件的权限是 644

umask = 022

anon_umask=022

banner_file=/home/uftp/welcome.txt

 

6.创建虚拟用户配置目录,并为用户teacher,student创建配置文件:

sudo touch teacher

sudo touch student

指定teacher工作目录并配置可写权限,teacher配置:

local_root=/home/uftp/teacher

anon_world_readable_only=NO

write_enable=YES

anon_mkdir_write_enable=YES

anon_upload_enable=YES

anon_other_write_enable=YES

指定student与teacher用户相同工作目录,但只有读的权限,student配置:

local_root=/home/uftp/teacher

anon_world_readable_only=NO

 

7.创建teacher和students的工作目录,并修改目录所属用户和用户组:

sudo mkdir /home/uftp/teacher

sudo chown uftp:uftp /home/uftp/teacher

 

8.重启vsftud:

sudo mkdir /home/uftp/teacher

sudo chown uftp:uftp /home/uftp/teacher

 

大功告成!

 

你可能感兴趣的:(运维)