ftp实战练习

13 min read
环境1:
环境:
Windows 作为 ftp 的 client
虚拟机中的 centos 作为 ftp 的 server
  1. 在 Windows 下载 FileZilla Client,下载后安装好。
  2. centos 下安装 dnf install vsftpd –y,配置好防火墙等
具体实验步骤:
  1. 在 server 上创建用户:
useradd -g root -M -d /var/www/html -s /sbin/nologin ftpuser
其中-g 指定用户所属组,-M 表示不创建用户家目录,-d 指定用户的主目录,-s 指定用户登录后的默 认 shell 为/sbin/nologin,表示该用户不能通过命令行登录系统
更改用户密码:
passwd ftpuser
  1. 启动 ftp 服务:
systemctl start vsftpd.service
  1. 检查 21 端口是否已启动成功
  1. 在 windows 上打开 FileZilla Client,在 “主机” 栏中输入 CentOS 虚拟机的 IP 地址,在 “用户 名” 和 “密码” 栏中输入之前在 CentOS 中创建的 FTP 用户的用户名和密码,端口号默认为 21,输 入完成后点击 “快速连接” 按钮,即可连接到 CentOS 虚拟机上的 FTP 服务器。
如果出现上述530 login incorrect问题,就是因为在添加ftpuser用户时指定了 -s /sbin/nologin,这意味着该用户不能通过命令行登录。对于FTP用户来说,如果使用的是SFTP(基于SSH),这可能没问题,但如果是普通FTP连接,这会导致登录失败,因为FTP会尝试执行登录操作并且失败。
可以将该用户的 shell 设置为 /bin/bash:
usermod -s /bin/bash ftpuser
提示:不安全的服务器,不支持 FTP over TLS.
这是因为需要在centos上配置vsftpd支持的ftp over tls
  1. 安装 openssl(OpenSSL 是用于生成证书和密钥的工具)
dnf install openssl
  1. 创建证书和密钥
  2. 创建一个目录来存放证书和密钥文件, mkdir /etc/vsftpd/certs
  3. 使用 OpenSSL 生成一个自签名的证书和私钥
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/certs/vsftpd.key -out /etc/vsftpd/certs/vsftpd.crt
执行此命令后,OpenSSL 会提示你输入一些证书相关的信息,如国家(Country Name)、州 / 省 (State or Province Name)、地区(Locality Name)、组织名称(Organization Name)、组织 单位名称(Organizational Unit Name)、通用名称(Common Name,通常是服务器的域名或 IP 地址)和电子邮件地址(Email Address)。你可以根据实际情况填写这些信息
二.配置 vsftpd 支持 TLS
  1. 在修改 vsftpd.conf 配置文件之前,先备份它,以防万一
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
  1. 编辑配置文件
vim /etc/vsftpd/vsftpd.conf
添加以下内容:
  1. 重启 vsftpd 服务使配置生效: systemctl restart vsftpd
上传测试文件test.txt
如果上传失败就是文件的权限不够
同样的方法可以实现下载。
环境2:
本地用户和虚拟用户的上传,下载及权限验证实验截图。【1】、匿名用户的上传+下载操作:
客户端:inet 192.168.238.135
服务端:inet 192.168.238.133
  1. 在服务端新建测试文件,例如sample.tar
touch /var/ftp/pub/sample.tar
  1. 修改vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
  1. 为/var/ftp/pub/文件夹提取权限
chown -R ftp /var/ftp/pub/
  1. 允许SELinux,关闭防火墙,重启vsftpd服务
setenforce 0
systemctl stop firewalld
systemctl restart vsftpd
  1. 在客户端实现匿名登录,并下载
传输完成!
  1. 退出,查看下载的sample.tar文件
  1. 这里有一个2.txt,我们使用put将其上传到服务端
注意:如果上传失败,就是文件的权限不够,提权即可
服务端:
【2】、下面是本地用户的上传+下载操作:
  1. 首先服务器上的修改配置文件
# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=NO
2 local_enable=YES
3 write_enable=YES
4 local_umask=022
5 dirmessage_enable=YES
6 xferlog_enable=YES
7 connect_from_port_20=YES
8 xferlog_std_format=YES
9 listen=NO
10 listen_ipv6=YES
11 pam_service_name=vsftpd
12 userlist_enable=YES
在 vsftpd 服务程序的主配置文件中正确填写参数,然后保存并退出。
还需要重启 vsftpd 服务程序,让新 的配置参数生效
systemctl restart vsftpd
systemctl enable vsftpd
  1. 使用root用户登录服务器,发现失败
原因是vsftpd服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers和user_list), vsftpd 服务程序为了保证服务器的安全性而默认禁止了 root 管理员和大多数系统用户的登录行为,这样 可以有效地避免黑客通过 FTP 服务对 root 管理员密码进行暴力破解。现在我们在文件中删除 root 即可。
  1. 然后使用 root 用户登录 ftp 服务器,实现上传和下载文件。
上传文件:
这里我上传2.txt作为测试文件
在服务端查看
下载文件:
在客户端查看文件
【3】、虚拟用户的文件权限配置+上传+下载实验
是最安全的一种认证模式,是专门创建出一个账号来登录 FTP 传输服务的,而且这个账号不能用于以 SSH 方式登录服务器,先进行配置:
  1. 创建用于进行 FTP 认证的用户数据库文件,其中奇数行为账户名偶数行为密码。例如,分别创建 zhangsan 和 lisi 两个用户,密码均为 123456
由于明文信息既不安全,也不符合让 vsftpd 服务程序直接加载的格式,因此需要使用 db_load 命令用 哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他 人看到数据库文件的内容),然后再把原始的明文信息文件删除
  1. 创建 vsftpd 服务程序用于**存储文件的根目录以及用于虚拟用户映射的系统本地用户。 vsftpd 服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置**。
由于 Linux 系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”新建了一个文 件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系 统本地用户的家目录中。虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免 Linux 系统无法处理虚拟用户所创建文件的属性权限。
为了方便管理 FTP 服务器上的数据,可以把这个系统本地用户的家目录设置为/var 目录(该目录用来 存放经常发生改变的数据)。并且为了安全起见,将这个系统本地用户设置为不允许登录 FTP 服务器, 这不会影响虚拟用户登录,而且还能够避免黑客通过这个系统本地用户进行登录。
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot/
  1. 建立用于支持虚拟用户的 PAM 文件
PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的 API 把系统提供的服务与认证 方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式
PAM 是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程 序进行任何修改。PAM 采取了分层设计(应用程序层、应用接口层、鉴别模块层)的思想,下面是结构图:
新建一个用于虚拟用户认证的 PAM 文件 vsftpd.vu,其中 PAM 文件内的“db=”参数为使用 db_load 命 令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:
#vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
  1. 在 vsftpd 服务程序的主配置文件中通过 pam_service_name 参数将 PAM 认证文件的名称修改为 vsftpd.vu 。 它 原 来 的 值 是 pam_service_name=vsftpd 。 表 示 登 录 FTP 服 务 器 时 是 根 据 /etc/pam.d/vsftpd 文件进行安全认证的。现在我们要做的就是把 vsftpd 主配置文件中原有的 PAM 认 证文件 vsftpd 修改为新建的 vsftpd.vu 文件即可
重启服务
  1. 为虚拟用户设置不同的权限
虽然账户 zhangsan 和 lisi 都是用于 vsftpd 服务程序认证的虚拟账户,但是我们依然想对这两人进行 区别对待:
允许张三上传、创建、修改、查看、删除文件
只允许李四查看文件。
通过 vsftpd 服务程序来实现这些功能: 需新建一个目录,在里面分别创建两个以 zhangsan 和 lisi 命名的文件,其中在名为 zhangsan 的文件 中写入允许的相关权限(使用匿名用户的参数):
# mkdir /etc/vsftpd/vusers_dir/
# cd /etc/vsftpd/vusers_dir/
# touch lisi
# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
修改 vsftpd 主配置文件/etc/vsftpd/vsftpd.conf,通过添加 user_config_dir 参数来定义这两个虚 拟用户不同权限的配置文件所存放的路径。
重启服务,让修改后的参数立即生效
# systemctl restart vsftpd
# systemctl enable vsftpd
配置完了,接下来就可以验证用虚拟用户模式登录到 FTP 服务器的实验了,现在我们分别验证账户 zhangsan 和 lisi 来检验他们的权限 验证内容包括:
(1):张三不仅可以登录,还可以创建、改名和删除文件
注意:530 Non-anonymous sessions must use encryption.
如果出现这个错误,需要禁用 FTP 服务器的加密要求
编辑 vsftpd 配置文件 /etc/vsftpd/vsftpd.conf
ssl_enable=NO
systemctl restart vsftpd
张三登录成功:
创建,改名,删除文件:
(2):李四只能登录,没有其他权限
禁止创建文件

评论

ftp实战练习 | Niutr's Blog | Niutr's Blog