做网站用的幻灯片大小,配置网站开发,建设单位经常去哪个网站,缘魁上海网站建设1、概念介绍
FTP#xff08;File Transfer Protocol:文件传输协议#xff09;作用Internet 上用来传送文件的协议
FTP Server#xff08;File Transfer Protocol Server#xff09;是在互联网/局域网上提供文件存储和访问服务的计算机#xff0c;它们依照FTP协议提供服务…1、概念介绍
FTPFile Transfer Protocol:文件传输协议作用Internet 上用来传送文件的协议
FTP ServerFile Transfer Protocol Server是在互联网/局域网上提供文件存储和访问服务的计算机它们依照FTP协议提供服务。采用C/S架构模式。
a. 常见 FTPS
windowsServ-U FTP Serverfilezilla_server
LinuxVSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件它的全称是Very Secure FTP 从此名称可以看出来编制者的初衷是代码的安全。
b. 服务端口
21 用于建立控制连接并传输指令
20 用于建立数据连接并传输文件数据
ftp会话包含了两个通道控制通道和数据通道。根据ftp服务器在建立数据连接过程中的主、被动关系ftp数据连接分为主动模式和被动模式。
注意这里的主动和被动是相对于的FTP server 端来判断的如果server 去连接client 开放的端口说明是主动的如果client去连接server开放的端口则是被动的。
c. 主动模式
服务器主动连接客户端传输数据 d. 被动模式
服务器等待客户端的连接传输数据 2、安装配置 vsftpd
a. vsftpd 服务端
# 服务端 安装 vsftpd
yum install -y vsftpd
b. vsftpd 配置文件 /etc/vsftpd/vsftpd.conf vsftpd 的主配置文件 /etc/vsftpd/ftpusers 黑名单文件用于指定哪些用户不能访问FTP 服务器。此文件中列出的用户将禁止登陆vsftpd服务器。 /etc/vsftpd/user_list 此文件中包含的用户可能被禁止登录也可能被允许登录。具体取决于主配置文件vsftpd.conf中的设置。当存在userlist_enableYES的配置项时user_list列表文件方可生效若指定userlist_denyYES则仅禁止此列表中的用户登录黑名单若指定userlist_denyNO则仅允许列表中的用户登录。 /etc/vsftpd/vsftpd_conf_migrate.sh 是vsftpd 操作的一些变量和设置脚本 /var/ftp/ 默认情况下匿名用户的根目录
# 启动 vsftpd
systemctl start vsftpd# 设置开机自启动
systemctl enable vsftpd# 查看 vsftpd 状态
systemctl status vsftpd# 查看 vsftpd 端口
netstat -antup vsftpd | grep vsftpd# 查看 vsftpd 进程
ps -ef | grep vsftpd c. vsftpd 客户端
最简单的ftp客户端工具莫过于ftp命令程序了通过ftp命令程序可以连接到ftp服务器进行交互式的上传、下载通信。
除此之外还有大量的图形化客户端工具如cuteftp、flashftp、filezilla等
# 客户端 安装 ftp
yum install -y ftp
d. vsftpd.conf 常用配置
listen_addressftp服务器的地址 # 只在一个接口监听服务
listen_port2121 # 监听端口改为2121
pasv_min_port24500 # 指定被动模式的下限端口
pasv_max_port24600 # 指定被动模式的上限端口
max_clients20 # 限制并发客户端最多20个
max_per_ip2 # 限制每个ip地址的连接数最多2个
3、远程登录 vsftpd
FTP服务器默认情况下允许匿名用户登陆只允许匿名用户下载文件不允许上传和删除文件
# 使用ftp命令连接服务器
ftp 192.168.137.253 a. ftp 常用命令 命令 含义 open [ftpservername] 和指定的远程Linux FTP服务器连接 user [username] pwd 显示远程Linux FTP服务器上的当前路径 ls 列出远程Linux FTP服务器上当前路径下的目录和文件 dir 列出远程Linux FTP服务器上当前路径下的目录和文件(同上) mkdir [foldname] 在远程Linux FTP服务器上当前路径下建立指定目录 rmdir [foldname] 删除远程Linux FTP服务器上当前路径下的指定目录 cd [foldname] 更改远程Linux FTP服务器上的工作目录 delete [filename] 删除远程Linux FTP服务器上指定的文件 rename [filename] [newfilename] 重命名远程Linux FTP服务器上指定的文件 close 从远程Linux FTP服务器断开但保留FTP命令参数提示 disconnect 从远程Linux FTP服务器断开但保留FTP命令参数提示(同上) bye 结束和远程Linux FTP服务器的连接。 quit 结束和远程Linux FTP服务器的连接(同上)。 ! 直接从远程Linux FTP服务器进入到本地shell中 exit (接上步)从本地shell环境中返回到远程Linux FTP服务器环境下 !ls 列出本地机器上当前路径下的目录和文件 lcd [foldname] 更改本地机器的工作目录 ? 显示ftp命令说明 help 显示ftp命令说明(同上)
# 在ftp中查看当前目录
ftppwd # 输出- 257 /# 查看当前目录下的文件
ftpls # 下载文件
get test.txt # 退回Shell查看 下载文件
ls b. Windows 查看服务器 4、实战匿名访问VSFTP
a. 需求分析
需求公司技术部准备搭建一台功能简单的FTP 服务器允许所有员工上传和下载文件并允许创建用户自己的目录。
分析允许所有员工上传和下载文件需要设置成允许匿名用户登录并且需要允许匿名用户上传功能。
b. 修改配置文件 # 允许匿名用户访问
anonymous_enableYES
# 允许匿名用户上传文件
anon_upload_enableYES
# 允许匿名用户创建目录
anon_mkdir_write_enableYES
# 允许匿名用户写文件和删除文件
anon_other_write_enableYES
c. 设置ftp根目录权限
# 给ftp根目录设置权限
chown -R ftp:ftp /var/ftp/pub# 重启 vsftpd 服务
systemctl restart vsftpd
d. Linux 客户端测试
# 登陆ftp服务器
ftp 192.168.137.253# 测试目录创建
ftppwd
ftpmkdir test
ftpcd pub
ftpmkdir test # 退出ftp并创建测试文件
ftp!
echo Hello Linux test.txt# 回到ftp
exit
ftpcd pub# 上传测试文件
ftpput /root/test.txt test.txt # 更改文件名字
ftprename test.txt test_ftp.txt # 删除文件
ftpdelete test e. Windows 文件管理器测试 可以在Windows管理器中进行 文件夹的创建、修改、删除以及文件上传
5、实战用户名密码方式访问VSFTP
a. 需求分析
需求公司内部现在有一台FTP 和WEB 服务器FTP 的功能主要用于维护公司的网站内容包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务他们分别适用team1 和team2帐号进行管理。先要求仅允许team1 和team2 帐号登录FTP 服务器并将这两个帐号的根目录限制为/var/www/html不能进入该目录以外的任何目录。ftp 和web服务器相结合。
web服务器根目录/var/www/htmlteam1账号只能在/var/www/html/team1/ftp上传文件和目录team2账号只能在/var/www/html/team2/ftp上传文件和目录
只允许team1和team2两用户可以上传。 vsftp禁止匿名。
分析将FTP 和WEB 服务器做在一起是企业经常采用的方法这样方便实现对网站的维护为了增强安全性
首先需要使用仅允许本地用户访问并禁止匿名用户登录。其次使用chroot 功能将team1和team2 锁定在/var/www/html 目录下。如果需要删除文件则还需要注意本地权限。
Vsftpd可以直接使用linux主机的系统用户作为ftp账号提供基于用户名/密码的登录验证。用户使用系统用户账号登录ftp服务器后将默认位于自己的家目录中且对家目录拥有读写权限。
b. 修改配置文件
# 恢复配置文件
cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf# 修改配置文件
vim /etc/vsftpd/vsftpd.conf # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
# 禁止匿名用户登录
anonymous_enableNO
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
# 允许本地用户登录
local_enableYES
# 启用 chroot 锁定本地用户功能
chroot_local_userYES
# 启用 chroot 锁定本地用户列表功能
chroot_list_enableYES
# 本地用户列表保存文件目录
chroot_list_file/etc/vsftpd/chroot_list
# 锁定本地用户ftp根目录如果不是设置默认用户ftp根目录为用户家目录
local_root/var/www/html
# 锁定用户拥有写权限
allow_writeable_chrootYES
# ftp 用户限制
userlist_enableYES
userlist_denyNO
c. 创建网站根目录
mkdir -p /var/www/html/team{1..2}/ftp
tree /var/www/html d. 创建用户并设置权限
useradd team1
useradd team2
echo team1:123456 | chpasswd
echo team2:123456 | chpasswd
权限设定除了在配置文件设定用户写权限还必须要让用户对自己的目录拥有读写权限
# team1 用户对 team1/ftp 有rwx权限
setfacl -Rm u:team1:rwx /var/www/html/team1/ftp
# team2 用户对 team2/ftp 有rwx权限
setfacl -Rm u:team2:rwx /var/www/html/team2/ftp# team1用户 不可以访问team2目录
setfacl -Rm u:team1:- /var/www/html/team2
# team2用户 不可以访问team1目录
setfacl -Rm u:team2:- /var/www/html/team1
e. 将用户添加到限制文件
# ftp 用户限制
echo -e team1\nteam2 /etc/vsftpd/user_list# 添加chroot_list文件
echo -e team1\nteam2 /etc/vsftpd/chroot_list
cat /etc/vsftpd/chroot_list# 重启服务
systemctl restart vsftpd
f. 使用 Filezilla 测试 6、实战使用虚拟用户
a. 需求分析
在vsftpd服务器中使用虚拟用户的主要好处在于可以将ftp登录账户与系统登录账号分开用户名、密码都不相同从而进一步增强ftp服务器的安全性。
需求公司为了宣传最新的产品信息计划搭建FTP 服务器为客户提供相关文档的下载
对所有互联网开放共享目录允许下载产品信息禁止上传。公司的合作单位能够使用FTP 服务器进行上传和下载但不可以删除数据。需要保证服务器的稳定性并做优化。创建ftp虚拟帐号,允许客户使用ftp帐号下载文件。自己的合作伙伴帐号vip可以上传内部文件
分析根据企业的需求对于不同用户进行不同的权限限制FTP 服务器需要实现用户的审核。需考虑到服务器的安全性使用虚拟帐号验证机制并对不同虚拟帐号设置不同的权限。为了保证服务器的性能还需要根据用户的等级限制客户端的连接数及下载速度。
b. 创建虚拟用户数据库db_load
建立用户文本文件添加两个虚拟帐号
管理员帐号adminadmin账号有FTP所有权限合作账号帐号vipvip只能上传和下载文件匿名用户只能下载文件
# 一行用户一行密码
vim /etc/vsftpd/vsftpd_virtualuser.txt 生成虚拟用户数据库文件保存虚拟帐号和密码的文本文件无法被系统帐号直接调用。我们需要使用db_load 命令生成db数据库文件。
db_load 命令
描述将文本文件生成数据库文件语法db_load [选项] 文本文件 数据库文件
-T允许应用程序能够将文本文件转译载入进数据库
-thash使用hash码加密
-f指定包含用户名和密码文本文件。此文件格式:奇数行用户名、偶数行密码
# 查看 db_load 命令的位置通过rpm查看在个安装包中
rpm -qf which db_load
# 安装 db_load 所在的软件包
yum install -y libdb-utils-5.3.21-25.el7.x86_64# 将虚拟用户文本文件 转换为 数据库文件
db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db 修改数据库文件访问权限数据库文件中保存着虚拟帐号的密码信息为了防止非法用户盗取我们可以修改该文件的访问权限。生成的认证文件的权限应设置为只对root 用户可读可写。
chmod 600 vsftpd_virtualuser.db 添加虚拟用户的映射账号Vsftpd服务器对虚拟用户的控制采用了映射的控制方式将所有的虚拟用户对应到同一个系统用户该系统用户家目录作为有虚拟用户登录后共用的ftp根目录。因此还需要添加一个对应的系统用户账号此账号无须设置密码登录shell
# 因为匿名用户默认家目录为/var/ftp,把virtual用户家目录设为/var/ftp/pub,
# 这样匿名用户和虚拟用户就可以访问相同的ftp根目录
useradd -d /var/ftp/pub -s /sbin/nologin virtual_user# 设置虚拟用户对 /var/ftp/pub 的权限
setfacl -Rm u:virtual_user:rwx /var/ftp/pub
c. vsftpd 服务添加虚拟认证
在vsftpd服务器中用户认证是通过PAMpluggable authentication module,可插拔认证模块机制来实现的, Vsftpd服务默认的PAM认证文件位于/etc/pam.d/vsftpd该文件适用于以Linux的系统用户账号进行认证。若要读取虚拟用户的账号数据文件则需要创建新的PAM认证文件。
# 为虚拟用户建立PAM认证文件
vim /etc/pam.d/vsftpd.vuauth required /lib64/security/pam_userdb.sodb/etc/vsftpd/vsftpd_virtualuseraccount required /lib64/security/pam_userdb.sodb/etc/vsftpd/vsftpd_virtualuser
这里的db/etc/vsftpd/vsftpd_virtualuser是pam文件的写法规范不是真正指向db/etc/vsftpd/vsftpd_virtualuser 这个文件而是/etc/vsftpd/vsftpd_virtualuser.db 这个文件中注意省略了.db扩展名
d. 修改 vsftpd.conf 文件
cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
# 开启匿名用户访问默认匿名用户只有下载权限
anonymous_enableYES
#开启本地用户映射
local_enableYES
# 启用上传写入支持
write_enableYES
# 指定上传权限掩码, 666-022644
anon_umask022
# 允许来宾访问
guest_enableYES
# 允许对ftp根目录有写权限
allow_writeable_chrootYES
# 指定映射的系统用户名称
guest_usernamevirtual_user
# 指定新的PAM认证文件
pam_service_namevsftpd.vu
# 指定虚拟用户权限文件目录
user_config_dir/etc/vsftpd/vusers_dir
# 指定被动模式的下限端口
pasv_min_port24500
# 指定被动模式的上限端口
pasv_max_port24600
# 限制并发客户端最多20个
max_clients20
# 限制每个ip地址的连接数最多2个
max_per_ip2
注意事项
从2.3.5之后vsftpd增强了安全检查如果用户被限定在了其主目录下则该用户的主目录不能再具有写权限了如果检查发现还有写权限就会报该错误500 OOPS: vsftpd: refusing to run with writable root inside chroot()。要修复这个错误可以用命令chmod a-w /home/user去除用户主目录的写权限或者你可以在vsftpd的配置文件中增加下列项allow_writeable_chrootYES
vsftpd.conf配置文件中默认存在pam_service_name配置项建议加#号注释掉或直接修改。在vsftpd服务中虚拟用户默认作为匿名用户进行处理以降低权限因此对应的配置项通常以anon_开头。例如在设置虚拟用户所上文件的默认权限掩码时应采用的配置项为anon_umask而不是local_umask。
e. 为不同的虚拟用户创建独立的配置文件
在/etc/vsftpd/vusers_dir目录下为不同的用户创建不同的权限文件
mkdir /etc/vsftpd/vusers_dir# 创建admin的配置文件
vim /etc/vsftpd/vusers_dir/admin# 允许用户上传文件anon_upload_enableYES# 允许用户创建目录anon_mkdir_write_enableYES# 允许用户删除文件权限anon_other_write_enableYES# 创建vip的配置文件
vim /etc/vsftpd/vusers_dir/vip# 允许用户上传文件anon_upload_enableYES# 允许用户创建目录anon_mkdir_write_enableYES
# 重启 vsftpd 服务
systemctl restart vsftpd
f. 使用Filezilla 测试