ftp实战

ftp

vsftpd

vsftpd是非常安全的FTP守护程序服务器,要在 ubuntu上安装FTP服务器,无需下载任何内容,这是因为FTP服务器软件包随附于默认的 Ubuntu 存储库。我们将使用的软件包名为 vsftpd,可以使用 apt 命令进行访问。

1.更新和升级存储库 update and upgrade repositories

在开始在ubuntu上安装FTP服务器之前,我们需要使用 apt 软件包管理服务更新默认存储库。

为此,你需要在 ubuntu 系统上打开终端并输入以下内容:

sudo apt update && sudo apt upgrade

这些命令使用系统的最新可用存储库更新 ubuntu 存储库。确保了系统上安装FTP服务器时我们将获得最新版本的 vsftpd 软件包。

2.安装 vsftpd 软件包(Installing the vsftpd package)

我们将使用 apt 软件包管理服务在 ubuntu上安装FTP服务器,我们在终端中输入以下内容,可能会提示你输入用户密码以继续。

sudo apt install vsftpd -y

3. 验证我们的安装(Verifying our installing)

在ubuntu 上安装FTP服务器后,我们可以通过询问终端 vsftpd 服务的状态来验证这一点,我们在终端中输入

sudo systemctl status vsftpd

在 ubuntu 上配置 FTP 服务器

在 ubuntu 上安装 FTP 服务器时,需要对其进行配置才能使用。

1. 创建默认配置的备份(create a backup of the Default configuration)

在进行任何自定义配置之前,建议做法是创建默认 vsftpd 配置文件的副本作为备份,以防我们想重置配置。可以使用 cp 命令完成此操作

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_backup

2. 添加自定义配置(add custom configuration)

现在我们有了备份,我们可以开始自定义 vsftpd 配置文件了,让我们使用 vim 编辑器打开配置文件,你需要使用此命令

sudo vim /etc/vsftpd.conf
anymous_enable=NO
ocal_enable=YES
write_enable=YES
chroot_local_user=YES
user_sub_token=$USER    
local_root=/home/$USER/ftp
pasv_min_port=30000 
pasv_max_port=31000

配置文件 vsftpd.conf 各种功能都是在修改配置文件参数

配置文件参数详解 自己的电脑 不同的操作系统可能会有大同小异的差异

anonymous_enable=YES	# 是否允许匿名用户登录
local_enable=YES	# 
Write_enable=YES 	# 允许写入
local_umask=022		# 本地的 umask 值 用户在上传文件时的文件权限控制参数,就叫 umask 值
dirmessage_enable=YES	# 是否为目录配置显示一些信息,显示每个目录下的配置文件,
xferlog_enable=YES	# 开启上传下载的记录日志。
xferlog_files=/var/log/xferlog 	# 记录日志的存放点,打开就会把文件上传下载的日志记录在这个路径当中
connect_from_port_20=YES	# 指定 FTP 它用20端口进行传输
listen=NO 将默认修改为 'listen=YES' 
# 把 FTP 在本地进行监听,监听在自己的本地 ipv4 地址,可以通过本地 127.0.0.1 进行访问
listen_ipv6=YES		# 让它支持 ipv6 地址
userlist_enable=YES # 打开这个参数,就可以通过用户列表进行权限控制	
# ftp 他有一个用户文件,在这个文件中,定义了一些用户权限相关


# 利用正则扩展过滤一下,配置文件中无用的信息,比如 '#' 开头,空行等
grep -Ev '^#|^$' /etc/vsftpd.conf

root@ubuntu-master:~# vim /etc/vsftpd.conf
root@ubuntu-master:~# grep -Ev '^#|^$' /etc/vsftpd.conf
listen=YES
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
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
root@ubuntu-master:~#



命令行参数说明:
'^#' 表示以 '#' 开头
'^$' 表示以 空行 
'-E' 表示扩展正则
'-v' 表示 过滤掉无用的信息,哪些无用的信息,比如 以'^#'开头的注释行,或者 '^$' 是空白行等

你还可以通过创建文件 "/etc/vsftpd.allowed_users" 并在此处添加用户名,来指定某些可以登录而拒绝不在列表中的用户的用户。设置完成后,可以将以下行添加到配置文件:

vim /etc/vsftpd.allowed_users

userlist_enable=YES
userlist_file-/etc/vsftps.allowed_uasers

3. 打开用于传入 FTP 请求的端口(open ports for incoming FTP requests)

现在我们已经成功在 ubuntu 安装 FTP 服务器并进行了一些配置。

现在该使用 ufw 命令更新防火墙设置了,以便我们的 FTP 服务器可以侦听端口 20 和 21,我们还将打开为被动 FTP 连接分配的端口范围30000至31000,在终端输入这些命令

sudo ufw allow 30000:31000/tcp
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
现在,端口20和21将用作FTP服务器的侦听端口,我们将使用以下命令检查 ufw 的状态,以便更新器规则
sudo ufw status

4. 重新启动 FTP 服务器(restart FTP Server)

最后,我们将使用 systemctl 重新启动 vsftpd 服务

sudo systemctl restart vsftpd   # 重启 vsftpd 服务
sudo systemctl enabled vsftpd   # 设置 vsftpd 服务开机自启

现在我们完成了在 ubuntu 上安装 FTP 服务器的任务,继续并连接到你的 FTP 服务器

尽管现在存在更新更快的协议,但 FTP 仍然与传统支持和具有高度特定要求的工作场所相关

请记住,默认情况下,FTP 是未加密的网络协议,这一点很重要。

因此,在没有适当的安全机制的情况下,不建议将协议用于安全第传输数据

设置 ftp相关目录 vsftpd 安装完毕后,/srv下会增加一个 ftp 目录,同时系统会增加一个名为 ftp 的用户组,查看命令

sudo cat /etc/shadow | grep ftp
​
root@ubuntu-master:~# sudo cat /etc/shadow | grep ftp
ftp:*:19839:0:99999:7:::
root@ubuntu-master:~#
​

创建目录

sudo mkdir /srv/ftp/download

sudo mkdir /srv/ftp/upload

sudo chmod 755 /srv/ftp/download

sudo chmod 777 /srv/ftp/upload


root@ubuntu-master:~# sudo mkdir /srv/ftp/download

sudo mkdir /srv/ftp/upload

sudo chmod 755 /srv/ftp/download

sudo chmod 777 /srv/ftp/upload


root@ubuntu-master:~# ls /srv/ftp/ -lh
total 8.0K
drwxr-xr-x 2 root root 4.0K Apr 29 00:51 download
drwxrwxrwx 2 root root 4.0K Apr 29 00:51 upload
root@ubuntu-master:~#


# 启动 vsftpd		systemctl restart vsftpd
root@ubuntu-master:~# systemctl restart vsftpd

# 查看启动情况
ps -ef | grep vsftpd


root@ubuntu-master:~# ps -ef | grep vsftpd
root        1839       1  0 00:54 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd.conf
root        1841    1630  0 00:56 pts/0    00:00:00 grep --color=auto vsftpd
root@ubuntu-master:~#
 
 说明服务器端 vsftpd 的最基本配置已完成,vsftpd 已开启

添加虚拟用户级目录指定

1. 虚拟用户的配置 第一行为用户名,第二行为用户密码,以此类推

gedit ftpusers.list

root@ubuntu-master:~# vim ftpusers.list
root@ubuntu-master:~# ls
1.7.5.tar.gz   index.html    istio-1.21.1-linux-amd64.tar.gz  snap           yueyang-cloud-main
ftpusers.list  istio-1.21.1  linkerd-1.7.5                    v0.8.0.tar.gz  yueyang-cloud-main.tar.gz
root@ubuntu-master:~# cat ftpusers.list
user1_name
user1_pwd
user2_name
user2_pwd
root@ubuntu-master:~#

2. 数据库工具安装

sudo apt install db-util -y

root@ubuntu-master:~# ls /srv/ftp/
root@ubuntu-master:~# sudo apt install db-util -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  db5.3-util
The following NEW packages will be installed:
  db-util db5.3-util
0 upgraded, 2 newly installed, 0 to remove and 5 not upgraded.
Need to get 68.2 kB of archives.

3. 生成 vsftpd 的认证文件

sudo db_load -T -t hash -f ftpusers.list /etc/vsftpd_login.db

sudo chmod 600 /etc/vsftpd_login.db

root@ubuntu-master:~# sudo db_load -T -t hash -f ftpusers.list /etc/vsftpd_login.db
root@ubuntu-master:~# sudo chmod 600 /etc/vsftpd_login.db
root@ubuntu-master:~#

4. 建立虚拟用户的 PAM 配置文件

sudo vim /etc/pam.d/vsftpd_virtual
# 加入以下内容:
auth required pam_userdb.so
db=/etc/vsftpd_login.db
account required pam_userdb.so
db=/etc/vsftpd_login.db

root@ubuntu-master:~# vim /etc/pam.d/vsftpd_virtual
root@ubuntu-master:~# cat /etc/pam.d/vsftpd_virtual
auth required pam_userdb.so
db=/etc/vsftpd_login
account required pam_userdb.so
db=/etc/vsftpd_login
root@ubuntu-master:~#

5. 建立虚拟用户访问的目录并设置权限:

新建一个系统用户 virtual,用户目录为 /home/ftp,用户登录终端设为 /bin/false (使之不能登录系统)

sudo mkdir -p /home/ftp/work
sudo useradd virtual -d /home/ftp -s /bin/false
sudo chown -R virtual.virtual /home/ftp

root@ubuntu-master:~# sudo mkdir -p /home/ftp/work
sudo useradd virtual -d /home/ftp -s /bin/false
sudo chown -R virtual.virtual /home/ftp
root@ubuntu-master:~# id virtual
uid=1002(virtual) gid=1002(virtual) groups=1002(virtual)
root@ubuntu-master:~#

# 创建一个系统用户和 虚拟用户做映射,且不需要家目录,禁止用户登录 shell
useradd -d /srv/ftpdir -s /sbin/nologin virtual 
useradd -d /home/ftp -s /sbin/nologin virtual

# 1. 过滤用户
grep 'virtual' /etc/passwd

root@ubuntu-master:~# grep 'virtual' /etc/passwd
virtual:x:1002:1002::/home/ftp:/bin/false
root@ubuntu-master:~#

# 2.  检查该用户的家目录  ll /home/ftp		
# 检查文件夹属性 ll -ld /home/ftp

root@ubuntu-master:~# ll /home/ftp
total 12
drwxr-xr-x 3 virtual virtual 4096 Apr 29 22:01 ./
drwxr-xr-x 4 root    root    4096 Apr 29 22:01 ../
drwxr-xr-x 2 virtual virtual 4096 Apr 29 22:01 work/
root@ubuntu-master:~#

root@ubuntu-master:~# ll -ld /home/ftp
drwxr-xr-x 3 virtual virtual 4096 Apr 29 22:01 /home/ftp/
root@ubuntu-master:~#

# 3. 更该文件夹权限
chmod -Rf 755 /home/ftp

# 4. 修改 virtual 用户 添加到 /etc/ftpusers 文件中,增大系统安全,该操作不会影响虚拟用户的操作
root@ubuntu-master:~# echo "virtual" >> /etc/ftpusers
root@ubuntu-master:~# cat /etc/ftpusers
# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
nobody
virtual
root@ubuntu-master:~#


需要修改 vsftpd 的配置文件,添加一个支持虚拟用户验证的 PAM 文件

PAM是一组安全机制的模块,认证文件路径在 /etc/pam.d/vsftpd

# 
root@ubuntu-master:~# ls /etc/pam.d/
chfn      chsh            common-auth      common-session                 cron   newusers  passwd    runuser    sshd  sudo    su-l      vsftpd
chpasswd  common-account  common-password  common-session-noninteractive  login  other     polkit-1  runuser-l  su    sudo-i  vmtoolsd  vsftpd_virtual
root@ubuntu-master:~# vim /etc/pam.d/vsftpd


root@ubuntu-master:~# cat /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth    required        pam_shells.so
auth required pam_userdb.so db=/etc/ftp_user
account required pam_userdb.so db=/etc/ftp_user
root@ubuntu-master:~#

最后来修改 vsftpd 的配置文件,加载支持虚拟用户模式

# 打开 vsftpd 配置文件 开启一些有关虚拟用户验证的参数 参数如下:
vim /etc/vsftpd/vsftpd.conf
root@ubuntu-master:~# vim /etc/vsftpd.conf
root@ubuntu-master:~# grep -Ev '^#|^$' /etc/vsftpd.conf
listen=YES
userlist_enable=YES
userlist_deny=YES
tcp_wrappers=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd	# 以它的方式去认证
guest_enable=YES
guest_username=virtual	# 指定虚拟用户账号
allow_writeable_chroot=YES	# 如果用户被限制只能在其家目录,允许用户可以对家目录写入数据
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
xferlog_std_format=YES
userlist_enable=YES
userlist_deny=YES
root@ubuntu-master:~#

6. 对不同虚拟用户设置不同权限

root@ubuntu-master:~# mkdir -p /etc/vsftpd/virtual_user_dir/
root@ubuntu-master:~# cd /etc/vsftpd/virtual_user_dir

# 1. 编辑 user1_name  针对该用户,允许它能够上传,新建,修改,查看,删除登录权限
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# vim user1_name
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# cat user1_name
anon_upload_enable=     YES		# 允许上传
anon_mkdir_write_enable=YES		# 允许新建文件夹
anon_other_write_enable=YES		# 允许修改文件夹

root@ubuntu-master:/etc/vsftpd/virtual_user_dir#
# 2. 编辑用户 user2_name 只读权限 就是将用户的相关权限关闭,如下
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# vim user2_name
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# cat user2_name
anon_upload_enable=NO		# 禁止上传
anon_mkdir_write_enable=NO		# 禁止新建文件夹
anon_other_write_enable=NO		# 禁止修改文件夹


root@ubuntu-master:/etc/vsftpd/virtual_user_dir# ls
user1_name  user2_name
root@ubuntu-master:/etc/vsftpd/virtual_user_dir#








--------------------------------------------------------

sudo mkdir /etc/vsftpd_user_conf
sudo gedit /etc/vsftpd_user_conf/user1_name

# 说明: 建立单独的配置文件,文件名就是用户名,加入以下内容
local_root=/home/ftp/work  # 这里虚拟用户目录根据实际情况修改
write_enable=YES 	# 具有写权限
virtual_use_local_privs=YES	# 虚拟用户和本地用户有相同的权限。

# 禁锢 FTP 用户在宿主目录
将需要禁锢的用户命令写入 "vsftpd.chroot_list" 文件
sudo gedit /etc/vsftpd.chroot_list
user1_name
user2_name

# 在 vsftpd.conf 中添加如下参数配置项:

1. 使能虚拟用户
guest_enable=YES
guest_username=virtual

2. 虚拟用户的配置
user_config_dir=/etc/vsftpd/vsftpd_user_conf

3.使能虚拟用户的根目录功能
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

4.使能根目录写权限
allow_writeable_chroot=YES


# 重新启动 vsftpd
systemctl restart vsftpd

# 查看是否启动成功
ps -ef | grep vsftpd

# 安装 ftp 软件
sudo apt install vsftpd -y

对于使用互联网的用户来说,首要目的就是获取资料,能够获取文件资料的方式有很多,其中一种就是文件传输,如今的互联网机器有各种型号,品牌,类型,如 dell,惠普,浪潮,IBM,也分为个人PC,工作站,服务器,大型机,超级计算机等,并且还分为 Windows,Linux,Unix,Mac等不同的操作系统。

为了能够在这么多样的机器之间传输文件,FTP(文件传输协议,File Transfer protocol) 诞生了。

vsftpd 配置文件

注意配置文件,不得用任何莫名其妙的空格!否则会重启失败

root@ubuntu-master:~# grep -vE '^#|^$' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES	# 是否开启匿名用户允许访问
local_enable=YES	# 是否允许本地用户登录 FTP
write_enable=YES	# 全局设置,是否容许写入,开启允许上传的权限
local_umask=022	# 本地用户上传文件的 umask
dirmessage_enable=YES	# 允许为目录配置显示信息,显示每个目录下面的 message_file 文件的内容
xferlog_enable=YES	# 开启日志功能,以及存放路径
xferlog_file=/var/log/vsftpd.log	# 日志路径
connect_from_port_20=YES	# 使用 20 端口进行连接
xferlog_std_format=YES	# 标准日志格式
listen=YES	# 绑定监听端口
listen_ipv6=YES	# 开启 ipv6
pam_service_name=vsftpd	# 设置 PAM 的名称
userlist_enable=YES	#设置用户已列表,允许或是禁止
tcp_wrappers=YES	# 控制主机访问,检查 /etc/hosts.allow hosts.deny的配置达到防火墙作用

vsftpd服务程序

vsftpd 允许用户三种认证的模式登录到 FTP 服务器。

  • 本地用户模式,基于 Linux 本地账号密码进行认证,配置简单,但是一旦被破解,服务器信息就很危险 安全隐患存在

  • 匿名用户模式,任何人无需密码直接登录 主要用于公共的数据展示

  • 虚拟用户模式,单独为FTP 创建用户数据库,基于口令验证账号信息,只适用于 FTP,不会影响其他用户信息,最为安全。

    对于 FTP 客户端,需要安装 FTP 命令工具,方可使用

    基于 centos 平台,直接 yum 安装 yum install vsftpd -y

    # 注意关闭防火墙规则 iptables -F

ftp文件传输协议介绍

FTP是一种在互联网中进行文件传输的协议,基于C/S模式(有一个服务端,有一个客户端),默认服务有两个端口号是20,21

一个是20端口,用于数据的传输端口,

一个是21端口,用于 FTP 服务端接收客户端发来的 FTP 命令与参数。

FTP 服务器按照 FTP 协议在互联网上提供文件存储,以便客户端能够快捷的访问数据。

FTP 客户端向服务端寻求资料

FTP 工作模式主要分为两种:

主动模式: FTP 服务器主动向客户端发起连接请求

被动模式:FTP 服务器在等待,等待客户端发来请求

###################安装fpt服务############################

FTP 是一种文件传输协议,那么在 linux 系统下,有一款工具实现 ftp协议,名为 vsftpd,非常安全的FTP守护进程服务。

对于 centos 系统平台,直接 yum 安装即可。

yum install vsftpd -y  # 默认的 yes 确认安装 阿里云的 yum 源配置号

############################################

学习修改 vsftpd 的配置文件 默认在

/etc/vsftpd.conf(ubuntu系统)

/etc/vsftpd/vsftpd.conf(centos系统)

在 linux 系统 默认安装的软件配置文件都在 /etc/目录下。

###############################

匿名用户登录模式

匿名用户是最不安全的方式,一般用于在公开展示一些不重要的信息,允许所有人可以查看的数据,ftp 匿名登录模式,一般打开在企业内网平台下,并且受防火墙规则控制,以保证 ftp 的基本安全性。

vsftpd 配置文件,默认就已经启动了匿名模式,修改配置文件为如下:

root@ubuntu-master:~# grep '^anon' /etc/vsftpd.conf
anonymous_enable=YES	# 允许匿名用户登录
anon_upload_enable=YES 	# 允许匿名用户上传文件夹
anon_mkdir_write_enable=YES		# 允许匿名用户登录后写入,创建文件夹
anon_other_write_enable=YES		# 允许匿名用户修改,删除文件夹等操作
root@ubuntu-master:~#

root@ubuntu-master:~# grep '^anon' /etc/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
root@ubuntu-master:~#
root@ubuntu-master:~#

ftp客户端

我们能够通过网络把数据进行交互,对于使用互联网的用户来说,它的首要目标就是获取资料。
能够获取文件资料的形式有很多种:
其中,最常见的就是文件的传输,也有人理解为我通过网站,获取资料居多的方式。

ftp客户端有多种形式,图形化,命令符

安装 ftp 客户端

ftp 命令客户端

1.ascii	# 设定以 ASCII 方式传递文件(缺省值)
2.bell	# 每完成一次文件传送,报警提示,
3.binary	# 设定以二进制方式传送,报警提示
4.bye	# 终止主机 FTP 进程,并退出 FTP 管理方式,
5.case	# 当为 ON 时,用 MDET 命令拷贝的文件名到本地机器中,全部转换为小写字母,
6.cd	# 同 Unix 的 CD命令,
7.cdup	# 返回上一级目录
8.chmod	# 改变远端主机的文件权限,
9.close	# 终止远端的 FTP 进程,返回到 FTP 命令状态,所有的宏定义都被删除,
10.delete	# 删除远端主机中的文件,
11.dir [remote-directory] [local-file]	# 列出当前远端主机目录中的文件,如果有本地文件,就将结果写至本地
12.get [remote-file] [local-file]	# 从远端主机中传递至本地主机中
13.help [command]	# 输出命令的解释
14.lcd	# 改变当前本地主机的工作目录,如果缺省,就转到当前用户的 HOME 目录,
15.ls [remote-directory] [local-file]	# 同 DIR
16.macdef	# 定义宏命令
17.mdelete [remote-files]	# 删除一批文件
18.mget [remote-files]	# 从远端主机接收一批文件至本地主机,
19.mkdir directory-name	# 在远端主机中建立目录
20.mput local-file	# 将本地主机中一批文件送至远端主机,
21.open host [port]	# 重新建立一个新的连接
22.prompt	# 交互提示模式
23.put local-file [local-file]	# 将本地一个文件传送至远端主机中,
24.pwd	# 列出当前远端主机目录
25.quit	# 同 BYE
26.recv remote-file [local-file]	# 同 GET
27.rename [from] [to]	# 改变远端主机中的文件名
28.rmdir directory-name # 删除远端主机中的目录。
root@ubuntu-master:~# grep '^anon' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES	# 允许匿名访问
anon_upload_enable=YES	# 允许匿名用户上传
anon_mkdir_write_enable=YES	# 允许匿名用户创建目录
anon_other_write_enable=YES	# 允许匿名用户修改目录

重启服务,且加载开机自启

root@ubuntu-master:~# systemctl restart vsftpd # 重启服务
root@ubuntu-master:~# systemctl enable vsftpd # 开启自启

root@ubuntu-master:~# systemctl restart vsftpd
root@ubuntu-master:~# systemctl enable vsftpd
Synchronizing state of vsftpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable vsftpd
root@ubuntu-master:~#

root@ubuntu-master:~# vim /etc/vsftpd.conf
root@ubuntu-master:~# systemctl restart vsftpd
root@ubuntu-master:~# systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-04-28 02:10:31 UTC; 20s ago
    Process: 1766 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
   Main PID: 1767 (vsftpd)
      Tasks: 1 (limit: 4515)
     Memory: 860.0K
        CPU: 4ms
     CGroup: /system.slice/vsftpd.service
             └─1767 /usr/sbin/vsftpd /etc/vsftpd.conf

Apr 28 02:10:31 ubuntu-master systemd[1]: Starting vsftpd FTP server...
Apr 28 02:10:31 ubuntu-master systemd[1]: Started vsftpd FTP server.
root@ubuntu-master:~#

root@ubuntu-master:~# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:21       0.0.0.0:*           LISTEN      1767/vsftpd
tcp        0      0 0.0.0.0:22       0.0.0.0:*           LISTEN      930/sshd: /usr/sbin
tcp        0      0 127.0.0.53:53    0.0.0.0:*           LISTEN      853/systemd-resolve
tcp        0      0 127.0.0.1:6010   0.0.0.0:*           LISTEN      1517/sshd: root@pts
tcp        0      0 127.0.0.1:53     0.0.0.0:*           LISTEN      975/dnsmasq
tcp        0      0 127.0.0.1:39721  0.0.0.0:*           LISTEN      891/containerd
tcp6       0      0 :::22            :::*                LISTEN      930/sshd: /usr/sbin
tcp6       0      0 ::1:6010         :::*                LISTEN      1517/sshd: root@pts
udp        0      0 127.0.0.1:53     0.0.0.0:*                       975/dnsmasq
udp        0      0 127.0.0.53:53    0.0.0.0:*                       853/systemd-resolve
udp        0      0 192.168.222.128:68  0.0.0.0:*                    851/systemd-network
root@ubuntu-master:~#

此时可以使用 ftp 命令连接到 FTP 服务器了。

在启动了 vsftpd 服务后,使用 ftp 客户端命令进行操作

1. 使用 匿名用户 进行增删改查

C:\Users\Administrator>ftp 172.18.22.128	# 指定 FTP 服务端的地址
连接到 172.18.22.128。
500 OOPS: cannot read user list file:/etc/vsftpd.user_list
远程主机关闭连接。

root@ubuntu-master:~# vim /etc/vsftpd.user_list
root@ubuntu-master:~# cat /etc/vsftpd.user_list
Administrator
root@ubuntu-master:~#



C:\Users\Administrator>ftp 172.18.22.128
连接到 172.18.22.128。
220 (vsFTPd 3.0.5)
200 Always in UTF8 mode.
用户(172.18.22.128:(none)): anonymous	# 输入匿名用户的账号
331 Please specify the password.
密码:		# 默认匿名用户密码为空,直接回车即可登录 ftp 服务器
230 Login successful.
ftp>

# 登录 FTP 后无法写入数据怎么办?
ftp> mkdir chaoge
550 Create directory operation failed.
ftp>

# 登录 FTP 后,默认进入的文件夹路径在 /var/ftp 目录下
1.进入该 ftp 目录后,修改文件夹的权限相关
cd /var/ftp
root@ubuntu-master:/var/ftp# chown -Rf ftp.ftp pub

2. 检查 pub 文件夹的权限

3.如果想要修改 ftp 目录下的资料,比如 重命名,或者删除登操作,
还得添加一个参数 anon_other_write_enable=YES
root@ubuntu-master:~# grep '^anon' /etc/vsftpd.conf
anonymous_enable=YES	# 允许匿名用户登录
anon_upload_enable=YES 	# 允许匿名用户上传文件夹
anon_mkdir_write_enable=YES		# 允许匿名用户登录后写入,创建文件夹
anon_other_write_enable=YES		# 允许匿名用户修改,删除文件夹等操作

连接了 FTP 服务端,其实连接的是目录 /var/ftp (centos)

连接了 FTP 服务端,其实连接的是目录 /srv/ftp (ubuntu)

root@ubuntu-master:~# mkdir -p /var/ftp/pub

root@ubuntu-master:~# cd /var/ftp
root@ubuntu-master:/var/ftp# ll
total 8
drwxr-xr-x  2 root root 4096 Apr 28 03:15 ./
drwxr-xr-x 14 root root 4096 Apr 28 03:15 ../
drw-r--r--  1 root root    0 Apr 28 03:15 pub/


# 修改用户,用户组
chown -Rf ftp.ftp pub
参数解释:
'-R' 表示同时修改 users 和 group 
'-f' 表示强制修改

root@ubuntu-master:/var/ftp# chown -Rf ftp.ftp pub
root@ubuntu-master:/var/ftp# ll
total 12
drwxr-xr-x  3 root root 4096 Apr 28 03:25 ./
drwxr-xr-x 14 root root 4096 Apr 28 03:15 ../
drwxr-xr-x  2 ftp  ftp  4096 Apr 28 03:25 pub/
root@ubuntu-master:/var/ftp#

使用 ftp 客户端命令,连接 ftp 服务端

root@ubuntu-master:~# ftp 123.206.16.61  # 连接 ftp 服务器的 ip 地址

利用文件传输形式,获取其他机器的数据,资料

2. 使本地用户进行账号密码验证

使用 linux 本地账户的验证模式,比起匿名用户是安全的多

修改配置文件 /etc/vsftpd.conf,改为如下参数

关闭匿名用户模式,开启本地用户模式

vim /etc/vsftpd.conf
将 'anonymous_enable=YES' 修改为 'anonymous_enable=NO'

root@ubuntu-master:~# vim /etc/vsftpd.conf
root@ubuntu-master:~# grep -Ev '^#|^$' /etc/vsftpd.conf
listen=YES
userlist_enable=YES
userlist_deny=YES
tcp_wrappers=YES
anonymous_enable=NO		# 关闭匿名用户验证模式
local_enable=YES		# 开启 linux 本地账号验证模式
write_enable=YES		# 允许用户写入
local_umask=022			# 用户写入数据时,默认的文件权限 创建出来文件权限
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
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=YES
root@ubuntu-master:~#

记住:修改了配置文件后,一定要重启 vsftpd 服务,加载配置文件

root@ubuntu-master:~# systemctl restart vsftpd
root@ubuntu-master:~#
​

[此时我们可以用 ftp 客户端进行远程连接,使用 linux 本地账号]

1. 确保服务器上有一个账号可以进行 ftp 连接,比如 longchi

root@ubuntu-master:~# grep 'longchi' /etc/passwd
longchi:x:1000:1000:longchi:/home/longchi:/bin/bash
root@ubuntu-master:~#

# 创建一个新用户,并设置密码
root@ubuntu-master:~# useradd chaoge
root@ubuntu-master:~# passwd chaoge
New password:
Retype new password:
passwd: password updated successfully
root@ubuntu-master:~#

root@ubuntu-master:~# grep 'chaoge' /etc/passwd
chaoge:x:1001:1001::/home/chaoge:/bin/sh
root@ubuntu-master:~#

2 . 此时用客户端连接 ftp ,使用账号 chaoge 登录,ftp 连接后,默认进入的是用户家目录,以保证其他目录安全

linux系统的本地用户可以登录 ftp,进入家目录后,进行增删改查

3 . 有些用户是无法登录 ftp 的,在一个用户名单里面禁止了

ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
cat /etc/vsftpd/ftpusers
# users that are not allowed to login via ftp	以下用户是不允许登录 ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

尝试用这些用户登录 ftp

ftp 虚拟用户模式

顾名思义虚拟用户认证方式,就是虚拟创建出来的用户,对于服务器而言也是最安全的方式。

1. 安装 DB 工具,能够转化普通文件为 vsftpd 识别的数据库加密文件

yum install db4 db4-utils -y (centos)

sudo apt install db-util -y (ubuntu)

2. 创建一个普通的文件,里面是账号密码

创建用于验证 vsftpd 的数据文件

cd /etc/vsftpd/
ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh

# 第一行是用户名,第二行是密码,以此类推
vim ftp_user.txt
chaoge
chaoge888
chaoyu
chaoge666


root@ubuntu-master:~# vim /etc/vsftpd_user.txt
root@ubuntu-master:~# cat /etc/vsftpd_user.txt
chaoge
chaoge888
chaoyu
chaoge666
root@ubuntu-master:~#

3. 由于这样的普通文件很不安全,vsftpd 也无法识别该 txt 的文件数据,因此还得使用 db_load 命令对于这个 ftp_user.txt 文件进行加密,并且修改它的文件属性,让普通用户无权查看

3.1 加密文件
db_load -T -t hash -f /etc/vsftpd_user.txt /etc/vsftpd_user.db

root@ubuntu-master:~# db_load -T -t hash -f /etc/vsftpd_user.txt /etc/vsftpd_user.db

root@ubuntu-master:~# cat /etc/vsftpd_user.db
a      ▒
▒v▒▒T
▒▒▒▒▒
▒v▒▒T
эh^chaoge666chaoyuchaoge888chaoge
root@ubuntu-master:~# xterm-256colorxterm-256color


命令参数解释
'db_load' 命令进行加密
'-T':
'-t':
'hash' : 指定解密解密类型
'-f' : 后面跟要解密的具体文件(路径+文件名) 即指定源文件
然后让它生成一个加密文件 '/etc/vsftpd_user.db'

# 检查以下 '/etc/vsftpd_user.db' 这个文件

file /etc/vsftpd_user.db

root@ubuntu-master:~# file /etc/vsftpd_user.db
/etc/vsftpd_user.db: Berkeley DB (Hash, version 9, native byte-order)
root@ubuntu-master:~#
3.2 降低文件的读写权限
# 修改权限,只有 root 用户可以读写,其他用户没有任何权限 用 600
chmod 600 /etc/vsftpd_user.db

root@ubuntu-master:~# ll /etc/vsftpd_user.db
-rw-r--r-- 1 root root 12288 Apr 29 07:06 /etc/vsftpd_user.db
root@ubuntu-master:~#

root@ubuntu-master:~# chmod 600 /etc/vsftpd_user.db
root@ubuntu-master:~# ll /etc/vsftpd_user.db
-rw------- 1 root root 12288 Apr 29 07:06 /etc/vsftpd_user.db
root@ubuntu-master:~#
3.3 删除旧的数据文本,保证安全性
rm  /etc/vsftpd_user.txt
​
root@ubuntu-master:~# rm  /etc/vsftpd_user.txt
root@ubuntu-master:~#
​

4. 创建当虚拟用户登录 ftp 之后进入的文件夹路径,且和 linux 中的一个用户做一个映射关系,防止虚拟用户登录后创建文件夹,但是系统没有此用户会报错的一个问题

匿名用户默认的路径:/var/ftp/pub (centos系统)

匿名用户默认的路径: /srv/ftp/ (ubuntu)

4.1 创建一个系统用户和虚拟用户做映射,且不需要家目录,禁止用户登录 shell 命令为: useradd -d /var/ftpdir -s /sbin/nologin virtual_chao

# 命令
useradd -d /var/ftpdir -s /sbin/nologin virtual_chao

'-d' 指定家目录
'-s' 指定 shell 类型
'virtual_chao' 指定的用户名
'/sbin/nologin' 禁止登录 shell 参数

id virtual_chao

# 过滤用户
grep 'virtual_chao' /etc/passwd

4.2 检查该用户的家目录

# 检查文件家目录
 ll /var/ftpdir     # 此时里面为空
 
 # 检查文件夹目录属性
 ll -ld /var/ftpdir
 

4.3 更改文件夹权限,防止虚拟用户登录文件夹之后权限不够

chmod -Rf 755 /var/ftpdir/

4.4 修改 virtual_chao 用户添加到 ftpsuer 文件中,(为什么要添加?增大系统安全,禁止该用户登录 FTP) 该操作不会影响虚拟用户的操作。

echo "virtual_chao" >> /etc/vsftpd/ftpusers

5. 需要修改 vsftpd 的配置文件,添加一个支持虚拟用户验证的 PAM 文件

PAM是一组安全机制的模块,认证文件路径在 /etc/pam.d/vsftpd

必须注释掉之前所有的内容,仅仅添加 有关 自定义的 vsftpd 的配置

#  修改 /etc/pam.d/vsftpd 文件,在该文件最后添加如下两行
auth required pam_userdb.so db=/etc/vsftpd/ftp_user
account required pam_userdb.so db=/etc/vsftpd/ftp_user

6. 最后来修改 vsftpd 的配置文件,加载支持虚拟用户模式

注意: 注释写在笔记里面,不要写入配置文件,否则程序启动时有可能报错

# 打开 vsftpd 配置文件 开启一些有关虚拟用户验证的参数 参数如下:
vim /etc/vsftpd/vsftpd.conf
root@ubuntu-master:~# vim /etc/vsftpd.conf
root@ubuntu-master:~# grep -Ev '^#|^$' /etc/vsftpd.conf
listen=YES
userlist_enable=YES
userlist_deny=YES
tcp_wrappers=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd	# 以它的方式去认证
guest_enable=YES
guest_username=virtual	# 指定虚拟用户账号
allow_writeable_chroot=YES	# 如果用户被限制只能在其家目录,允许用户可以对家目录写入数据
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
userlist_enable=YES
userlist_deny=YES

7. 对不同虚拟用户设置不同权限

user1_name  针对该用户,允许它能够上传,新建,修改,查看,删除登权限
user2_name  只读权限

8. 如上的操作,需要修改 vsftpd 的文件,定义一个 user_config_dir 参数即可

8.1 创建一个管理虚拟用户的家目录 (virtual_user_dir),并且创建虚拟用户的配置文件,分别添加参数,给2个虚拟用户的配置文件

mkdir -p /etc/vsftpd/virtual_user_dir

root@ubuntu-master:~# mkdir -p /etc/vsftpd/virtual_user_dir/
root@ubuntu-master:~# cd /etc/vsftpd/virtual_user_dir

# 1. 编辑 user1_name  针对该用户,允许它能够上传,新建,修改,查看,删除登录权限
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# vim user1_name
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# cat user1_name
anon_upload_enable=     YES		# 允许上传
anon_mkdir_write_enable=YES		# 允许新建文件夹
anon_other_write_enable=YES		# 允许修改文件夹

root@ubuntu-master:/etc/vsftpd/virtual_user_dir#
# 2. 编辑用户 user2_name 只读权限 就是将用户的相关权限关闭,如下
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# vim user2_name
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# cat user2_name
anon_upload_enable=NO		# 禁止上传
anon_mkdir_write_enable=NO		# 禁止新建文件夹
anon_other_write_enable=NO		# 禁止修改文件夹


root@ubuntu-master:/etc/vsftpd/virtual_user_dir# ls
user1_name  user2_name
root@ubuntu-master:/etc/vsftpd/virtual_user_dir#

9.修改 vsftpd 主配置文件,加载如上的权限控制

修改 /etc/vsftpd.conf 添加一行如下参数

自定义的 vsftpd 的用户配置文件

vim /etc/vsftpd.conf
user_config_dir=/etc/vsftpd/virtual_user_dir
​

10 . 重启 vsftpd服务,加载新的配置

systemctl restart vsftpd

root@ubuntu-master:/etc/vsftpd/virtual_user_dir# vim /etc/vsftpd.conf
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# systemctl restart vsftpd
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-04-30 01:14:15 UTC; 1min 32s ago
    Process: 1895 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
   Main PID: 1896 (vsftpd)
      Tasks: 1 (limit: 4515)
     Memory: 1.6M
        CPU: 10ms
     CGroup: /system.slice/vsftpd.service
             └─1896 /usr/sbin/vsftpd /etc/vsftpd.conf

Apr 30 01:14:15 ubuntu-master systemd[1]: Starting vsftpd FTP server...
Apr 30 01:14:15 ubuntu-master systemd[1]: Started vsftpd FTP server.
root@ubuntu-master:/etc/vsftpd/virtual_user_dir#

11. 此时使用客户端连接 FTP ,用虚拟用户进行验证

# 1. 注释掉不需要的 如下
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# cat /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
# auth  required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# Standard pam includes
# @include common-account
# @include common-session
# @include common-auth
# auth  required        pam_shells.so
#
#
auth required pam_userdb.so db=/etc/ftp_user
account required pam_userdb.so db=/etc/ftp_user
root@ubuntu-master:/etc/vsftpd/virtual_user_dir#

# 2. 重启 vsftpd 服务
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# systemctl restart vsftpd
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-04-30 01:27:36 UTC; 18s ago
    Process: 1913 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
   Main PID: 1914 (vsftpd)
      Tasks: 1 (limit: 4515)
     Memory: 1.6M
        CPU: 9ms
     CGroup: /system.slice/vsftpd.service
             └─1914 /usr/sbin/vsftpd /etc/vsftpd.conf

Apr 30 01:27:36 ubuntu-master systemd[1]: Starting vsftpd FTP server...
Apr 30 01:27:36 ubuntu-master systemd[1]: Started vsftpd FTP server.
root@ubuntu-master:/etc/vsftpd/virtual_user_dir#

# 3. 打开命令行终端
root@ubuntu-master:/etc/vsftpd/virtual_user_dir# grep -Ev '^#|^$' /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/ftp_user
account required pam_userdb.so db=/etc/ftp_user
root@ubuntu-master:/etc/vsftpd/virtual_user_dir#

实战

# 更新和升级存储库 update and upgrade repositories

root@ubuntu-master:~# sudo apt update && sudo apt upgrade
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:5 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [1,394 kB]
Hit:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease
Get:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease [119 kB]
Get:6 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [848 kB]
Get:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports InRelease [109 kB]
Get:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 Packages [1,610 kB]
Get:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/universe amd64 Packages [1,071 kB]
Get:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/universe Translation-en [244 kB]
Get:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports/main amd64 Packages [67.1 kB]
Get:11 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports/universe amd64 Packages [27.2 kB]
Fetched 5,600 kB in 4s (1,309 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
23 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  ubuntu-pro-client
The following packages have been kept back:
  cloud-init libruby3.0 python3-update-manager ruby3.0 update-manager-core
The following packages will be upgraded:
  apt apt-utils coreutils dpkg ethtool libapt-pkg6.0 libgpgme11 libldap-2.5-0 libldap-common libnghttp2-14 openssh-client openssh-server openssh-sftp-server
  snapd tcpdump ubuntu-advantage-tools ubuntu-pro-client-l10n update-notifier-common
18 upgraded, 1 newly installed, 0 to remove and 5 not upgraded.
1 standard LTS security update
Need to get 32.8 MB of archives.
After this operation, 1,555 kB disk space will be freed.
Do you want to continue? [Y/n] y
Get:1 http://security.ubuntu.com/ubuntu jammy-security/main amd64 libnghttp2-14 amd64 1.43.0-1ubuntu0.2 [76.9 kB]
Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 coreutils amd64 8.32-4.1ubuntu1.2 [1,437 kB]
Get:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libapt-pkg6.0 amd64 2.4.12 [912 kB]
Get:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 dpkg amd64 1.21.1ubuntu2.3 [1,239 kB]
Get:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 apt amd64 2.4.12 [1,363 kB]
Get:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 apt-utils amd64 2.4.12 [211 kB]
Get:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 openssh-sftp-server amd64 1:8.9p1-3ubuntu0.7 [38.9 kB]
Get:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 openssh-server amd64 1:8.9p1-3ubuntu0.7 [435 kB]
Get:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 openssh-client amd64 1:8.9p1-3ubuntu0.7 [906 kB]
Get:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 update-notifier-common all 3.192.54.8 [185 kB]
Get:11 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 ubuntu-advantage-tools all 31.2.2~22.04 [10.8 kB]
Get:12 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 ubuntu-pro-client amd64 31.2.2~22.04 [197 kB]
Get:13 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 ubuntu-pro-client-l10n amd64 31.2.2~22.04 [20.3 kB]
Get:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 tcpdump amd64 4.99.1-3ubuntu0.2 [501 kB]
Get:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 ethtool amd64 1:5.16-1ubuntu0.1 [207 kB]
Get:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libgpgme11 amd64 1.16.0-1.2ubuntu4.2 [136 kB]
Get:17 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libldap-2.5-0 amd64 2.5.17+dfsg-0ubuntu0.22.04.1 [183 kB]
Get:18 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libldap-common all 2.5.17+dfsg-0ubuntu0.22.04.1 [15.8 kB]
Get:19 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 snapd amd64 2.61.3+22.04 [24.7 MB]
Fetched 32.8 MB in 21s (1,596 kB/s)
Preconfiguring packages ...
(Reading database ... 128679 files and directories currently installed.)
Preparing to unpack .../coreutils_8.32-4.1ubuntu1.2_amd64.deb ...
Unpacking coreutils (8.32-4.1ubuntu1.2) over (8.32-4.1ubuntu1.1) ...
Setting up coreutils (8.32-4.1ubuntu1.2) ...
(Reading database ... 128679 files and directories currently installed.)
Preparing to unpack .../libapt-pkg6.0_2.4.12_amd64.deb ...
Unpacking libapt-pkg6.0:amd64 (2.4.12) over (2.4.11) ...
Setting up libapt-pkg6.0:amd64 (2.4.12) ...
(Reading database ... 128679 files and directories currently installed.)
Preparing to unpack .../dpkg_1.21.1ubuntu2.3_amd64.deb ...
Unpacking dpkg (1.21.1ubuntu2.3) over (1.21.1ubuntu2.2) ...
Setting up dpkg (1.21.1ubuntu2.3) ...
dpkg-db-backup.service is a disabled or a static unit not running, not starting it.
(Reading database ... 128679 files and directories currently installed.)
Preparing to unpack .../archives/apt_2.4.12_amd64.deb ...
Unpacking apt (2.4.12) over (2.4.11) ...
Setting up apt (2.4.12) ...
(Reading database ... 128679 files and directories currently installed.)
Preparing to unpack .../00-apt-utils_2.4.12_amd64.deb ...
Unpacking apt-utils (2.4.12) over (2.4.11) ...
Preparing to unpack .../01-openssh-sftp-server_1%3a8.9p1-3ubuntu0.7_amd64.deb ...
Unpacking openssh-sftp-server (1:8.9p1-3ubuntu0.7) over (1:8.9p1-3ubuntu0.6) ...
Preparing to unpack .../02-openssh-server_1%3a8.9p1-3ubuntu0.7_amd64.deb ...
Unpacking openssh-server (1:8.9p1-3ubuntu0.7) over (1:8.9p1-3ubuntu0.6) ...
Preparing to unpack .../03-openssh-client_1%3a8.9p1-3ubuntu0.7_amd64.deb ...
Unpacking openssh-client (1:8.9p1-3ubuntu0.7) over (1:8.9p1-3ubuntu0.6) ...
Preparing to unpack .../04-update-notifier-common_3.192.54.8_all.deb ...
Unpacking update-notifier-common (3.192.54.8) over (3.192.54.6) ...
Preparing to unpack .../05-ubuntu-advantage-tools_31.2.2~22.04_all.deb ...
Unpacking ubuntu-advantage-tools (31.2.2~22.04) over (30~22.04) ...
dpkg: warning: unable to delete old directory '/var/lib/ubuntu-advantage': Directory not empty
dpkg: warning: unable to delete old directory '/etc/ubuntu-advantage': Directory not empty
Selecting previously unselected package ubuntu-pro-client.
Preparing to unpack .../06-ubuntu-pro-client_31.2.2~22.04_amd64.deb ...
Unpacking ubuntu-pro-client (31.2.2~22.04) ...
Preparing to unpack .../07-ubuntu-pro-client-l10n_31.2.2~22.04_amd64.deb ...
Unpacking ubuntu-pro-client-l10n (31.2.2~22.04) over (30~22.04) ...
Preparing to unpack .../08-libnghttp2-14_1.43.0-1ubuntu0.2_amd64.deb ...
Unpacking libnghttp2-14:amd64 (1.43.0-1ubuntu0.2) over (1.43.0-1ubuntu0.1) ...
Preparing to unpack .../09-tcpdump_4.99.1-3ubuntu0.2_amd64.deb ...
Unpacking tcpdump (4.99.1-3ubuntu0.2) over (4.99.1-3ubuntu0.1) ...
Preparing to unpack .../10-ethtool_1%3a5.16-1ubuntu0.1_amd64.deb ...
Unpacking ethtool (1:5.16-1ubuntu0.1) over (1:5.16-1) ...
Preparing to unpack .../11-libgpgme11_1.16.0-1.2ubuntu4.2_amd64.deb ...
Unpacking libgpgme11:amd64 (1.16.0-1.2ubuntu4.2) over (1.16.0-1.2ubuntu4.1) ...
Preparing to unpack .../12-libldap-2.5-0_2.5.17+dfsg-0ubuntu0.22.04.1_amd64.deb ...
Unpacking libldap-2.5-0:amd64 (2.5.17+dfsg-0ubuntu0.22.04.1) over (2.5.16+dfsg-0ubuntu0.22.04.2) ...
Preparing to unpack .../13-libldap-common_2.5.17+dfsg-0ubuntu0.22.04.1_all.deb ...
Unpacking libldap-common (2.5.17+dfsg-0ubuntu0.22.04.1) over (2.5.16+dfsg-0ubuntu0.22.04.2) ...
Preparing to unpack .../14-snapd_2.61.3+22.04_amd64.deb ...
Unpacking snapd (2.61.3+22.04) over (2.58+22.04.1) ...
Setting up tcpdump (4.99.1-3ubuntu0.2) ...
Installing new version of config file /etc/apparmor.d/usr.bin.tcpdump ...
Setting up apt-utils (2.4.12) ...
Setting up openssh-client (1:8.9p1-3ubuntu0.7) ...
Setting up update-notifier-common (3.192.54.8) ...
update-notifier-download.service is a disabled or a static unit not running, not starting it.
update-notifier-motd.service is a disabled or a static unit not running, not starting it.
Setting up libnghttp2-14:amd64 (1.43.0-1ubuntu0.2) ...
Setting up libldap-common (2.5.17+dfsg-0ubuntu0.22.04.1) ...
Setting up libgpgme11:amd64 (1.16.0-1.2ubuntu4.2) ...
Setting up libldap-2.5-0:amd64 (2.5.17+dfsg-0ubuntu0.22.04.1) ...
Setting up ubuntu-pro-client (31.2.2~22.04) ...
Setting up ethtool (1:5.16-1ubuntu0.1) ...
Setting up ubuntu-pro-client-l10n (31.2.2~22.04) ...
Setting up snapd (2.61.3+22.04) ...
Installing new version of config file /etc/apparmor.d/usr.lib.snapd.snap-confine.real ...
snapd.failure.service is a disabled or a static unit not running, not starting it.
snapd.snap-repair.service is a disabled or a static unit not running, not starting it.
Failed to restart snapd.mounts-pre.target: Operation refused, unit snapd.mounts-pre.target may be requested by dependency only (it is configured to refuse manual start/stop).
See system logs and 'systemctl status snapd.mounts-pre.target' for details.
Could not execute systemctl:  at /usr/bin/deb-systemd-invoke line 142.
Setting up openssh-sftp-server (1:8.9p1-3ubuntu0.7) ...
Setting up openssh-server (1:8.9p1-3ubuntu0.7) ...
rescue-ssh.target is a disabled or a static unit not running, not starting it.
ssh.socket is a disabled or a static unit not running, not starting it.
Setting up ubuntu-advantage-tools (31.2.2~22.04) ...
Processing triggers for libc-bin (2.35-0ubuntu3.7) ...
Processing triggers for ufw (0.36.1-4ubuntu0.1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for dbus (1.12.20-2ubuntu4.1) ...
Processing triggers for install-info (6.8-4build1) ...
Scanning processes...
Scanning candidates...
Scanning linux images...

Running kernel seems to be up-to-date.

Restarting services...
 systemctl restart packagekit.service udisks2.service
Service restarts being deferred:
 systemctl restart unattended-upgrades.service

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.


# 安装 FTP 服务器

root@ubuntu-master:~# sudo apt install vsftpd -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  ssl-cert
The following NEW packages will be installed:
  ssl-cert vsftpd
0 upgraded, 2 newly installed, 0 to remove and 5 not upgraded.
Need to get 140 kB of archives.
After this operation, 391 kB of additional disk space will be used.
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 ssl-cert all 1.1.2 [17.4 kB]
Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 vsftpd amd64 3.0.5-0ubuntu1 [123 kB]
Fetched 140 kB in 5s (28.0 kB/s)
Preconfiguring packages ...
Selecting previously unselected package ssl-cert.
(Reading database ... 128684 files and directories currently installed.)
Preparing to unpack .../ssl-cert_1.1.2_all.deb ...
Unpacking ssl-cert (1.1.2) ...
Selecting previously unselected package vsftpd.
Preparing to unpack .../vsftpd_3.0.5-0ubuntu1_amd64.deb ...
Unpacking vsftpd (3.0.5-0ubuntu1) ...
Setting up ssl-cert (1.1.2) ...
Setting up vsftpd (3.0.5-0ubuntu1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /lib/systemd/system/vsftpd.service.
Processing triggers for man-db (2.10.2-1) ...
Scanning processes...
Scanning candidates...
Scanning linux images...

Running kernel seems to be up-to-date.

Restarting services...
Service restarts being deferred:
 systemctl restart unattended-upgrades.service

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.


#  验证我们的安装(Verifying our installing)

# 在ubuntu 上安装FTP服务器后,我们可以通过询问终端 vsftpd 服务的状态来验证这一点

root@ubuntu-master:~# sudo systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-04-26 01:44:34 UTC; 38s ago
    Process: 4263 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
   Main PID: 4264 (vsftpd)
      Tasks: 1 (limit: 4515)
     Memory: 856.0K
        CPU: 5ms
     CGroup: /system.slice/vsftpd.service
             └─4264 /usr/sbin/vsftpd /etc/vsftpd.conf

Apr 26 01:44:34 ubuntu-master systemd[1]: Starting vsftpd FTP server...
Apr 26 01:44:34 ubuntu-master systemd[1]: Started vsftpd FTP server.


# 创建默认配置的备份(create a backup of the Default configuration)

# 在进行任何自定义配置之前,建议做法是创建默认 vsftpd 配置文件的副本作为备份,以防我们想重置配置。可以使用 cp 命令完成此操作

root@ubuntu-master:~# sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_backup
root@ubuntu-master:~#

# 开始使用 FTP
root@ubuntu-master:~# ftp	# 进入 FTP
# 直接在命令行终端输入 FTP 命令,即可进入交互式的 ftp 命令行中,输入问号,可以查看所有的命令帮助
ftp>
ftp> ?	# 查看 FTP 的所有命令
Commands may be abbreviated.  Commands are:

!               close           fget            lpage           modtime         pdir            rcvbuf          sendport        type
$               cr              form            lpwd            more            pls             recv            set             umask
account         debug           ftp             ls              mput            pmlsd           reget           site            unset
append          delete          gate            macdef          mreget          preserve        remopts         size            usage
ascii           dir             get             mdelete         msend           progress        rename          sndbuf          user
bell            disconnect      glob            mdir            newer           prompt          reset           status          verbose
binary          edit            hash            mget            nlist           proxy           restart         struct          xferbuf
bye             epsv            help            mkdir           nmap            put             rhelp           sunique         ?
case            epsv4           idle            mls             ntrans          pwd             rmdir           system
cd              epsv6           image           mlsd            open            quit            rstatus         tenex
cdup            exit            lcd             mlst            page            quote           runique         throttle
chmod           features        less            mode            passive         rate            send            trace
ftp>

ftp> ls
Not connected.	# 未连接
ftp> cd
Not connected.
ftp> quit		# 退出 FTP
root@ubuntu-master:~#

# 数据库工具安装
root@ubuntu-master:~# sudo apt install db-util -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  db5.3-util
The following NEW packages will be installed:
  db-util db5.3-util
0 upgraded, 2 newly installed, 0 to remove and 5 not upgraded.
Need to get 68.2 kB of archives.
After this operation, 326 kB of additional disk space will be used.
Get:1 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 db5.3-util amd64 5.3.28+dfsg1-0.8ubuntu3 [65.5 kB]
Get:2 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 db-util all 1:5.3.21~exp1ubuntu4 [2,714 B]
Fetched 68.2 kB in 4s (19.3 kB/s)
Selecting previously unselected package db5.3-util.
(Reading database ... 128750 files and directories currently installed.)
Preparing to unpack .../db5.3-util_5.3.28+dfsg1-0.8ubuntu3_amd64.deb ...
Unpacking db5.3-util (5.3.28+dfsg1-0.8ubuntu3) ...
Selecting previously unselected package db-util.
Preparing to unpack .../db-util_1%3a5.3.21~exp1ubuntu4_all.deb ...
Unpacking db-util (1:5.3.21~exp1ubuntu4) ...
Setting up db5.3-util (5.3.28+dfsg1-0.8ubuntu3) ...
Setting up db-util (1:5.3.21~exp1ubuntu4) ...
Processing triggers for man-db (2.10.2-1) ...
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
root@ubuntu-master:~#


#  建立虚拟用户访问的目录并设置权限:
# 新建一个系统用户 virtual,用户目录为 /home/ftp,用户登录终端设为 /bin/false (使之不能登录系统)
sudo mkdir -p /home/ftp/work
sudo useradd virtual -d /home/ftp -s /bin/false
sudo chown -R virtual.virtual /home/ftp


root@ubuntu-master:~# sudo mkdir -p /home/ftp/work
sudo useradd virtual -d /home/ftp -s /bin/false
sudo chown -R virtual.virtual /home/ftp
root@ubuntu-master:~# id virtual
uid=1002(virtual) gid=1002(virtual) groups=1002(virtual)
root@ubuntu-master:~#

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答您关于Linux网络实战FTP服务器搭建的问题。首先,我们需要在Linux系统上安装FTP服务器软件。常用的FTP服务器软件有vsftpd、proftpd、pure-ftpd等。这里以vsftpd为例,介绍FTP服务器的搭建过程。 1. 安装vsftpd软件 在Linux系统上使用以下命令安装vsftpd软件: ``` sudo apt-get install vsftpd ``` 2. 配置vsftpd 在安装完成后,需要对vsftpd进行配置。配置文件一般位于/etc/vsftpd.conf。可以使用以下命令进行编辑: ``` sudo nano /etc/vsftpd.conf ``` 在编辑器中,您可以设置FTP服务器的参数,例如允许匿名访问、允许本地用户访问、设置FTP根目录等。 3. 启动vsftpd服务 配置完成后,需要启动vsftpd服务。可以使用以下命令启动服务: ``` sudo service vsftpd start ``` 4. 防火墙设置 如果您的Linux系统启用了防火墙,需要设置FTP服务器的防火墙规则,允许FTP数据传输的端口通过防火墙。一般FTP数据传输使用的是20和21端口。可以使用以下命令设置防火墙规则: ``` sudo ufw allow 20/tcp sudo ufw allow 21/tcp ``` 5. 测试FTP服务器 在FTP服务器搭建完成后,可以使用FTP客户端测试FTP服务器是否正常工作。您可以使用Linux系统自带的FTP客户端命令进行测试。例如: ``` ftp IP地址 ``` 其中IP地址为您的FTP服务器所在主机的IP地址。在连接成功后,您可以使用FTP客户端进行文件上传、下载等操作。 希望以上内容能够帮到您。如果您有其他问题,欢迎继续向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值