FTP搭建

FTP

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP 协议包括两个组成部分,其一为 FTP 服务器,其二为 FTP 客户端。其中FTP 服务器用来存储文件,用户可以使用FTP 客户端通过FTP 协议访问位于 FTP 服务器上的资源。在开发网站的时候,通常利用 FTP 协议把网页或程序传到Web 服务器上。此外,由于 FTP 传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP 协议使用TCP 端口中的 20 和21 这两个端口,其中20 用于传输数据, 21 用于传输控制信息。但是,是否使用 20 作为传输数据的端口与FTP 使用的传输模式有关,如果采用主动模式,那么数据传输端口就是 20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

Linux 客户端:

lftp 是一个功能强大的下载工具,它支持访问文件的协议:ftp、ftps、http、https、hftp、fish(其中ftps 和https需要在编译的时候包含openssl库),llftp 的界面非常类似一个Shell,有命令补全、历史记录、允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载、等功能。

注:从 CentOS 开始,系统镜像中默认没有ftp 客户端命令。取而代之的是 lftp 命令。

vsftpd 相关文档:

/etc/vsftpd/vsftpd.conf	#vsftpd 的核心配置文件。
/etc/vsftpd/ftpusers	#用于指定哪些用户不能访问 FTP 服务器,即黑名单。
/etc/vsftpd/user_list	#指定允许使用VSFTP 的用户列表文件,即白名单。

环境前准备

[root@network2~]# systemctl disable firewalld
[root@network2~] # systemctl stop firewalld 

以免出现未知问题最好关闭 selinxu。

[root@network2 ~]# vim /etc/sysconfig/selinux SELINUX=disabled
[root@network2~] # reboot 

安装服务端

[root@network2 ~]# yum install vsftpd 
[root@network2 ~]# systemctl start vsftpd 
[root@network2 ~]# systemctl enable vsftp

安装客户端

[root@network2 ~]# yum install lftpd 

Windows 系统:

通过浏览器访问或打开文件夹,在地址栏输入地址:ftp://192.168.1.115/
在这里插入图片描述

Linux vsftpd 默认匿名目录在/var/ftp/pub 里
[root@network2 pub]# pwd
/var/ftp/pub

允许匿名用户访问控制

环境前
现在的匿名用户是创建不了文件夹的
在这里插入图片描述
使用命令展开式,FTP 配置文件备份,便于后期恢复还原。

[root@network2 ~]# cd /etc/vsftpd/
[root@network2 vsftpd]# cp vsftpd.conf{,.bak} 
[root@network2 vsftpd]# vsftpd.conf

编辑配置文件把注释去掉

#anonymous_enable=YES 
#anon_upload_enable=YES 
#anon_mkdir_write_enable=YES

在这里插入图片描述
注 意 : 为 了 方 便 直 接 复 制 粘 贴 到 最 后 一 行 !

[root@network2 var]# chown -R root.root /var/ftp/pub/ 
[root@network2 ftp]# systemctl restart vsftpd

测试结果是可以新建但不能重启名
在这里插入图片描述
在这里插入图片描述

[root@network2 vsftpd]# vim vsftpd.conf
anon_other_write_enable=YES	#默认没有,需要手动添加下这行(匿名帐号可以有写的权限)
[root@network2 ftp]# systemctl restart vsftpd

在这里插入图片描述
现在可以删除文件夹了,这个参数对匿名用户来说权限太大,不安全,使用这个参数需要考虑安全性。在生产环境中,匿名用户只是只读访问,一般是不给予写权限的
注意,默认匿名用户家目录的权限是 755,这个权限是不能改变的。切记!

修改默认家目录

[root@network2 ]# echo "anon_root=/opt"	>> /etc/vsftpd/vsftpd.conf 
[root@network2 ]# chown -R ftp.ftp /opt && chmod 755 /opt && cd /opt
[root@network2 ]# mkdir /opt/1
注意:anon_root=目录	#匿名默认家目录权限必须是 755

用户名密码方式访问 VSFTP

公司内部现在有一台 FTP 和 WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文
件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别使用 team1 和team2
帐号进行管理。先要求仅允许 team1 和 team2 帐号登录 FTP 服务器,但不能登录本地系统,并将
这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。 ftp 和 web 服务器相结合。
web 服务器根目录:/var/www/html

只允许:team1 和 team2 两用户可以上传,vsftp 禁止匿名。分析:
将 FTP 和 WEB 服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护,为了增强安全性,首先需要使用仅允许本地用户访问,并禁止匿名用户登录。其次使用 chroot 功能将team1 和team2 锁定在/var/www/html 目录下。如果需要删除文件则还需要注意本地权限。

恢复初始配置文件

[root@network2~]# rm -rf /etc/vsftpd/vsftpd.conf
[root@network2~]# cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf
[root@network2~]# useradd -s /sbin/nologin team1 
[root@network2~]# useradd -s /sbin/nologin team2

创建 team1~2 用户,并禁止登录系统。

[root@network2 ~]# echo "123456"|passwd --stdin team1
[root@network2~]# echo "123456"|passwd --stdin team2

在这里插入图片描述
[root@network2 ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO #禁止匿名用户登录
local_enable=YES #允许本地用户登录
local_root=/var/www/html #设置本地用户的根目录为/var/www/html。
chroot_list_enable=YES #激 chroot 功能。
chroot_list_file=/etc/vsftpd/chroot_list #设置锁定用户在根目录中的列表文件。
此文件存放要锁定的用户名。
allow_writeable_chroot=YES #允许锁定的用户有写的权限。

修改完成后保存并退出。
在这里插入图片描述
为了方便直接写入最后一行。
重启服务:

[root@network2 ~]# systemctl restart vsftpd

再次访问就需要登陆了
在这里插入图片描述
建立/etc/vsftpd/chroot_list 文件,添加 team1 和 team2 帐号

[root@network2 ~]# ll /etc/vsftpd/chroot_list
-rw-r--r--. 1 root root 0 11 月 20 08:39 /etc/vsftpd/chroot_list
[root@network2 ~]# vim /etc/vsftpd/chroot_list #写入以下内容,一行一个用户名
team1
team2

修改本地权限(使用 ACL 权限,o+w 个人感觉不安全)

[root@network2 ~]# setfacl -m u:team1:rwx /var/www/html/
[root@network2 ~]# setfacl -m u:team2:rwx /var/www/html/ 
[root@network2 ~]# systemctl restart vsftpd

登陆测试 lftp 用户名@ip 地址

[root@network2 ~]# lftp team1@192.168.1.115
lftp team1@192.168.1.115:/> ls
-rw-r--rw- 1 0 0 14 Nov 18 08:18 index.html
drwxr-xrwx 2 0 0 24 Nov 18 08:01 web1

浏览器测试正常
在这里插入图片描述

总结

服务端:

安装:yum install vsftpd
启动:systemctl start vsftpd
默认家目录:/var/ftp/pub

客户端:

安装:yum install lftpd

创建用户

useradd -s /sbin/nologin team1 
useradd -s /sbin/nologin team2
echo "123456"|passwd --stdin team1
echo "123456"|passwd --stdin team2

客户端登陆方法 lftp 用户@ip

lftp team1@192.168.1.115

修改本地权限(使用 ACL 权限,o+w 个人感觉不安全)

[root@network2 ~]# setfacl -m u:team1:rwx /var/www/html/

Vsftpd 参数

listen_port=默认端口

Vsftp 配置参数

anonymous_enable=YES
# 是否允许匿名用户登陆
no_anon_password=NO
# 是否忽略对匿名用户的密码检测
anon_root
# 匿名登陆后尝试更改的目录
ftp_username=ftp
# 匿名用户登陆的 username
anon_mkdir_write_enable=NO
# 是否允许匿名用户创建目录
anon_other_write_enable=NO
# 是否允许匿名用户对文件增、删、改
anon_upload_enable=NO
# 是否允许匿名用户上传文件
anon_world_readable_only=YES
# 如果为 YES,匿名用户只能下载可读的文件
anon_max_rate=0
# 允许匿名用户最大数据传输速率,单位为 B/s
anon_umask=077
chown_uploads=NO
# 如果设置为YES,所有的匿名用户上传的文件属主都设置为chown_username指定用户
chown_username=root
# 指定chown_uploads中所需的文件属主用户
deny_email_enable=NO
# 如果设置为YES,则提供一个内容为mail address的文件,若是使用匿名登入,则会要求输入email address,如果它不在文件内,则禁止进入
banned_email_file=/etc/vsftpd/banned_emails
# 指定deny_email_enable中的文件路径

本地用户相关参数

local_enable=YES
# 是否允许本地用户登陆
write_enable=YES
# 本地用户写权限
local_umask=022
# 本地用户的文件umask码
local_root=none
# 本地用户登陆后改变的目录,默认是各自家目录
local_max_rate=0(unlimited)
# 本地用户使用的最大传输速度,单位为B/s

虚拟用户相关参数

pam_service_name=vsftpd
# 设置PAM使用的名称
guest_enable=NO
# 是否启用虚拟用户
guest_username=vsftpuser
# 指定本地用户名,用来映射虚拟用户
virtual_use_local_privs=NO
# 如果启用,虚拟用户将使用与本地用户相同的权限,否则与匿名用户权限相同

banner参数

dirmessage_enable=YES
# 如果设置为YES,当用户首次进入一个目录后,会查找.message文件并显示。
message_file=.message
# 设置message文件
ftpd_banner=Welcome to blah FTP service.
# 设置进入banner信息
banner_file=none
# 设置一个包含banner信息的文件路径,开启它将会覆盖ftpd_banner

日志文件

xferlog_enable=YES
# 是否开启上传下载日志,默认放在/var/log/vsftpd.log
xferlog_std_format=NO
# 日志将以xferlog格式写入
xferlog_file=/var/log/xferlog
# 设置日志存放路径
log_ftp_protocol
# 记录所有请求和响应,前提是xferlog_std_format=NO

数据传输模式

ascii_upload_enable=YES
# 是否启用ASCII模式上传数据
ascii_download_enable=YES
# 是否启用ASCII模式下载数据

工作模式与端口设置


listen_port=21
# 设置ftp服务工作的端口
connect_from_port_20=YES
# 主动模式数据传输的端口
pasv_enable=YES
# YES为被动模式工作,NO则是主动模式,默认YES
pasv_max_port=0
# PASV模式下,最大传输数据端口号,0为任意无限制
pasv_min_port=0
# PASV模式下,最小传输数据端口号

超时时间设置

idle_session_timeout=600
# 客户端连接FTP后无命令超时时间
data_connection_timeout=120
# 无数据传输超时时间
accept_timeout=60
# 建立FTP连接的超时时间
connect_timeout=60
# PORT模式下建立数据连接的超时时间

目录权限,锁定家目录


chroot_local_user=NO
# 是否禁止本地用户切换到家目录上级目录,绑定家目录为用户的根目录
chroot_list_enable=NO
# 是否启用chroot列表文件,写入文件中的用户将锁定家目录
chroot_list_file=/etc/vsftpd/chroot_list
# 指定用户列表文件的文件路径
chroot_local_user=YES,chroot_list_enable=YES
# chroot_list_file文件中的用户可以切换到其他目录
chroot_local_user=NO,chroot_list_enable=YES
# chroot_list_file文件中的用户将锁定在家目录下
chroot_local_user=YES,chroot_list_enable=NO
# 所有本地用户都锁定在家目录下
chroot_local_user=NO,chroot_list_enable=NO
# 所有本地用户都可以切换到其他目录

主服务运行模式与连接设置

listen=YES
# 设 置vsftpd服务器是否以standalone模式运行,有很多与服务器运行相关的配置命令,需要在此模式下才有效
# 若设置为NO,则vsftpd以super daemon运行,要受到xinetd 服务的管控,功能上会受到限制
max_clients=0(unlimited)
# 设置客户端最大连接数,standalone模式下有效
max_per_ip=0(unlimited)
# 同一IP客户端最大连接数,standalone模式下有效

用户访问控制

userlist_file=/etc/vsftpd/user_list
# 控制用户访问FTP的文件
userlist_enable=NO
# 如果启用,vsftpd将从userlist_file提供的文件名加载用户名列表
userlist_deny=YES
# 如果设为YES,userlist_file文件中的用户不可以访问FTP服务;如果设为NO,只用文件中用户才能访问服务
/etc/vsftpd/ftpusers
# 文件用来定义不允许访问FTP服务的用户列表,优先级比userlist_deny高

自定义用户配置

user_config_dir=/etc/vsftpd/virtual_user_conf/
# 指定虚拟用户配置文件目录,目录下可以创建与虚拟用户名相同的文件,给予不同的权限设置

其他设置

download_enable=YES
# 如果设置为NO,所有下载请求被拒绝
ls_recurse_enable=NO
# 启用后,允许使用ls -R命令,此命令可能会消耗大量资源
参考:https://www.cnblogs.com/houyongchong/p/10283995.html 博客园
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值