Ubuntu搭建vsftpd服务器

  • Post author:
  • Post category:其他


软件环境;ubuntu22,VMware15

本实验基于dns搭建好的ftp域名,使用客户端(Ubuntu)进行域名访问服务端服务器

节点 域名
dns ftp.hoyeong.com
ftp服务端 192.168.200.160
ftp客户端 192.168.200.101
root@huhy:~# host ftp.hoyeong.com
ftp.hoyeong.com has address 192.168.200.160
root@huhy:~#



服务端配置

安装ftp软件包

apt install -y vsftpd

备份配置文件好习惯

cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

配置文件参数详解

##########虚拟用户######一般匿名用户设置前两项即可######################################
anonymous_enable=YES    # 启用匿名访问,匿名用户使用的登陆名为ftp或anonymous,口令为空;匿名用户不能离开匿名用户家目录/var/ftp,且只能下载不能上传。
anon_root=/var/ftp  # 使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限。可以设置为755。
no_anon_password=YES/NO(NO)  # 若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。
ftp_username=ftp  # 定义匿名登入的使用者名称。默认值为ftp。
anon_umask=022          # 匿名用户上传文件的权限掩码
anon_upload_enable=YES  # 允许匿名上传文件
anon_world_readable_only=YES/NO(YES)# 如果设为YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在FTP服务器中打开阅读)。默认值为YES。
anon_mkdir_write_enable=YES  # 允许匿名创建目录
anon_other_write_enable=YES  # 开放其他写入权限,譬如删除或者重命名
anon_max_rate=0   # 限制最大上传速率,0表示不限制

#########本地用户##########################################################################
local_enable=YES  # 允许本地用户登录,本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自 己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的情况下进行上传/下载。
local_root=/home/username  # 当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
chroot_local_user=YES/NO(NO)  # 自己指定登录用户目录时,该项设置为NO。具体不知道为什么。
write_enable=YES/NO(YES)# 是否允许登陆用户有写权限。属于全局设置,默认值为YES。
local_umask=022  # 本地用户新增档案时的umask 值。默认值为077。
file_open_mode=0755  # 本地用户上传档案后的档案权限,与chmod 所使用的数值相同。默认值为0666。

#########欢迎语设置####################################################################
dirmessage_enable=YES/NO(YES)# 如果启动这个选项,那么使用者第一次进入一个目录时,会检查该目录下是否有.message这个档案,如果有,则会出现此档案的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。默认值为开启。
message_file=.message  # 设置目录消息文件,可将要显示的信息写入该文件。默认值为.message。
banner_file=/etc/vsftpd/banner  # 当使用者登入时,会显示此设定所在的档案内容,通常为欢迎话语或是说明。默认值为无。如果欢迎信息较多,则使用该配置项。
ftpd_banner=Welcome to BOB's FTP server # 这里用来定义欢迎话语的字符串,banner_file是档案的形式,而ftpd_banner 则是字符串的形式。预设为无。

###########控制用户是否允许切换到上级目录################################################
chroot_list_enable=YES/NO(NO) # 设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。
chroot_list_file=/etc/vsftpd.chroot_list  # 用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。
chroot_local_user=YES/NO(NO)#  用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。

#############控制用户访问#############################################################
userlist_file=/etc/vsftpd.user_list  # 控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行。
userlist_enable=YES/NO(NO)  # 是否启用vsftpd.user_list文件。
userlist_deny=YES/NO(YES)  # 决定vsftpd.user_list文件中的用户是否能够访问FTP服务器。若设置为YES,则vsftpd.user_list文件中的用户不允许访问FTP,若设置为NO,则只有vsftpd.user_list文件中的用户才能访问FTP。
# /etc/vsftpd/ftpusers文件专门用于定义不允许访问FTP服务器的用户列表

listen=YES  #是否以独立运行的方式监听服务
listen_address=192.168.4.1  #设置监听的 IP 地址
listen_port=21  #设置监听 FTP 服务的端口号
write_enable=YES  #是否启用写入权限(影响整个服务器)
download_enable=YES  #是否允许下载文件
userlist_enable=YES  #是否启用 user_list 列表文件
userlist_deny=YES  #是否禁用 user_list 中的用户
max_clients=0 #限制并发客户端连接数,就是最多允许多少用户同时登录
max_per_ip=0  #限制同一IP地址的并发连接数,就是一个IP最多同时下载几个文件

修改配置文件

vim /etc/vsftpd.conf
write_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

重启服务生效

systemctl restart vsftpd

配置完后即可实现远程访问,上传下载文件



客户端测试

客户端配置dns的IP地址为域名解析

root@slave1:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens33:
      dhcp4: no
      addresses: [192.168.200.101/24]
      gateway4: 192.168.200.2
      nameservers:
        addresses: [192.168.200.160,8.8.8.8]
  version: 2
root@slave1:~# host ftp.hoyeong.com
ftp.hoyeong.com has address 192.168.200.160
root@slave1:~#

服务端/opt/下提前创建hoyeong.txt下载测试文档

root@huhy:/opt# ls
hoyeong.txt
root@huhy:/opt#

客户端/opt/下创建hwiung.txt上传测试文档

root@slave1:~# touch /opt/hwiung.txt
root@slave1:~# ll /opt/
total 8
drwxr-xr-x  2 root root 4096 Nov 29 08:27 ./
drwxr-xr-x 19 root root 4096 Aug 29 14:42 ../
-rw-r--r--  1 root root    0 Nov 29 08:27 hwiung.txt
root@slave1:~#

测试访问,客户端使用 ftp+地址的格式访问,由于配置了域名所以使用ftp+域名访问

注:客户端进入ftp服务器时会以当前目录作为起始目录,也就是说你在客户端/opt/下使用ftp访问服务端时使用上传文件就会以当前目录作为起始,访问时会以服务端的用户来进行访问,我的服务端只有一个huhy用户

#ftp+地址/域名的格式访问
ftp ftp.hoyeong.com

#输入访问的用户名后回车输入密码
Name (ftp.hoyeong.com:root):huhy
密码

#此状态为访问成功,在此模式下可以正常使用cd、ls等简单命令
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

#进入到服务器端的/opt/目录使用get命令下载文件,后面不加路径默认下载在你进入ftp的目录下,本次实验时/opt/
ftp> cd /opt/
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||42970|)
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Nov 29 08:25 hoyeong.txt
226 Directory send OK.
ftp> get hoyeong.txt
local: hoyeong.txt remote: hoyeong.txt
229 Entering Extended Passive Mode (|||34340|)
150 Opening BINARY mode data connection for hoyeong.txt (0 bytes).
     0        0.00 KiB/s
226 Transfer complete.
ftp>

#上传自己客户端/opt/下的hwiung.txt文件到服务端,因为登录的huhy用户,所以需要cd到/home/huhy/下,然后上传,其他目录没有权限
ftp> cd /home/huhy
250 Directory successfully changed.
ftp> put hwiung.txt
local: hwiung.txt remote: hwiung.txt
229 Entering Extended Passive Mode (|||26556|)
150 Ok to send data.
     0        0.00 KiB/s
226 Transfer complete.
ftp>

#exit退出
ftp> exit
221 Goodbye.

验证上传的文件

ftp> exit
221 Goodbye.

验证下载的文件

root@slave1:/opt# ls
hoyeong.txt  hwiung.txt
root@slave1:/opt#



配置指定用户访问

如上测试,客户端可以自由访问etc、boot等目录,不安全,如下我们配置指定用户可以访问,且不能自由切换访问的目录

服务端下创建测试用户

root@huhy:~# useradd -m -s /bin/bash ftpuser1
root@huhy:~# useradd -m -s /bin/bash ftpuser2
root@huhy:~# passwd ftpuser1
New password:
Retype new password:
passwd: password updated successfully
root@huhy:~# passwd ftpuser2
New password:
Retype new password:
passwd: password updated successfully
root@huhy:~#

修改配置文件

vim /etc/vsftpd.conf
userlist_file=/etc/vsftpd.user_list

userlist_enable=YES

#配置问NO,则允许/etc/vsfptd.user_list的用户可以访问,反之不能
userlist_deny=NO
root@huhy:~# cat /etc/vsftpd.user_list
ftpuser1
ftpuser2

重启生效

systemctl restart vsftpd



测试

则只能被该/etc/vsftpd.user_list文件里面的用户访问,huhy用户拒绝访问

root@slave1:/opt# ftp ftp.hoyeong.com
Connected to ftp.hoyeong.com.
220 (vsFTPd 3.0.5)
Name (ftp.hoyeong.com:root): huhy
530 Permission denied.
ftp: Login failed
ftp> user ftpuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>



配置用户不能切换目录

修改配置文件

vim /etc/vsftpd.conf
chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list

allow_writeable_chroot=YES
root@huhy:~# cat /etc/vsftpd.chroot_list
ftpuser1

重启生效

systemctl restart vsftpd



测试

ftpuser1用户可以自由切换目录

root@slave1:/opt# ftp ftp.hoyeong.com
Connected to ftp.hoyeong.com.
220 (vsFTPd 3.0.5)
Name (ftp.hoyeong.com:root): ftpuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /opt
250 Directory successfully changed.
ftp>

ftpuser2用户不能自由切换目录

root@slave1:/opt# ftp ftp.hoyeong.com
Connected to ftp.hoyeong.com.
220 (vsFTPd 3.0.5)
Name (ftp.hoyeong.com:root): ftpuser2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /opt
550 Failed to change directory.
ftp>



版权声明:本文为m0_56363537原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。