文章目录
1、ftp文件服务介绍
文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。 FTP 基于TCP协议生成一个虚拟的连接,主要用于控制FTP连接信息,同时再生成一个单独的TCP连接用于FTP数据传输。用户可以通过客户端向FTP服务器端上传、下载、删除文件,FTP服务器端可以同时提供给多人共享使用。FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。Unix/Linux使用较为广泛的FTP服务器端软件为Vsftpd 。
协议: ftp 文件传输协议
客户端软件:lftp(推荐)、浏览器、资源管理器、ftp
FTP传输模式介绍 (主动模式和被动模式)
vsftpd的被动模式是默认开启的,可以关闭,主动模式永远开启,不能关闭
主动模式: 21端口负责建立tcp连接,20端口负责传输数据
client server (C/S模式)
1024-------->21 负责会话连接
1024<--------20 负责数据传输
高安全区域 防火墙 低安全区域
被动模式:21号端口负责建立tcp连接,1024+存放数据等待客户端来拿数据
client server (C/S模式)
1024-------->21 负责会话连接
1024-------->1024+存放数据等待客户端来拿数据
使用什么模式连接服务器是客户端说了算
能不能接受那个模式是服务器说了算
服务器关闭被动模式:
[root@xingdian ~]# vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO
客户端关闭被动模式:
[root@xingdian ~]# lftp 172.16.70.251
> set ftp:passive-mode off
永久生效
[root@xingdian ~]#vim /etc/lftp.conf
set ftp:passive-mode off
ftp的安全:
1.关闭匿名用户除下载权限之外的一切权限
2.开启监控,也就是打开日志 /var/log/xferlog
lftp ftp.net.pku.edu.cn:~> ls
`ls’ at 0 [重新连接前延时: 21]
如果一次连接不上,那个延时会越来越长了,就挤不进ftp了。
修改ftp客户端配置文件
在/etc/lftp.conf中加入:
set net:reconnect-interval-base 5 //设置重连间隔基数
set net:reconnect-interval-multiplier 1.0 //设置重连间隔乘数
2、部署基本的ftp服务
①、安装
server: yum -y install vsftpd
clinet: yum -y install lftp
②、启动服务(server),服务器端启动vsftpd,客户端直接使用lftp即可
[root@ftp-server ~]# systemctl start vsftpd //启动服务
[root@ftp-server ~]# systemctl enable vsftpd //开机启动
③、ftp服务功能
/var/ftp/是默认情况下ftp服务器存放数据的目录,已将自动创建一个pub目录。
[root@ftp-server ~]# cd /var/ftp/ 注意:安全起见ftp根目录权限不可以超过755
[root@ftp-server ~]# /etc/vsftpd/vsftpd.conf ftp的主配置文件
至此,客户端使用lftp作为匿名用户访问ftp-server,可以查看和下载ftp-server:/var/ftp/下面给的资源,但是不能上上传资源以及修改资源
[root@ftp-client ~]# lftp 10.11.67.31
lftp 10.11.67.31:~> ls
lftp 10.11.67.31:/> cd software/
lftp 10.11.67.31:/software> ls
lftp 10.11.67.31:/software> get vim.tar.gz
137087889 bytes transferred in 12 seconds (10.93M/s)
下载文件get被允许
lftp 10.11.67.31:/software> cd …
lftp 10.11.67.31:/> ls
lftp 10.11.67.31:/> mirror kvm
Total: 1 directory, 4 files, 0 symlinks
New: 4 files, 0 symlinks
115437075 bytes transferred in 13 seconds (8.55M/s)
下载目录mirror被允许
lftp 10.11.67.31:/> mkdir kakaops
mkdir: Access failed: 550 Permission denied. (kakaops)
创建目录mkdir被拒绝
lftp 10.11.67.31:~> put /mnt/kakaops.txt
put: Access failed: 550 Permission denied. (kakaops.txt)
上传文件put被拒绝
lftp 10.11.67.31:/> mirror -R /mnt/
mirror: Access failed: 550 Failed to change directory. (/mnt)
1 error detected
上传目录mirror -R被拒绝
3、部署ftp匿名用户上传功能
开启ftp上传功能(先打开文件上传功能,在/var/ftp下创建一个权限为777的共享目录)
先修改ftp配置文件,打开上传功能
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES //上传文件
anon_mkdir_write_enable=YES //上传目录
服务器在/var/ftp下创建一个777的目录
[root@ftp-server ~]# mkdir /var/ftp/gongxiang
[root@ftp-server ~]# chmod 777 /var/ftp/gongxiang/
[root@ftp-server ~]# systemctl restart vsftpd
这时候客户端可以在共享目录下上传文件,还可以创建目录,但是不能创建文件
[root@ftp-client ~]# lftp 10.11.67.31
lftp 10.11.67.31:~> cd gongxiang/
lftp 10.11.67.31:/gongxiang> mkdir sunlizhen
mkdir 成功, 建立 `sunlizhen’
lftp 10.11.67.31:/gongxiang> put /mnt/kakaops.txt
lftp 10.11.67.31:/gongxiang> ls
-rw------- 1 14 50 0 Oct 26 09:40 kakaops.txt
drwx------ 2 14 50 6 Oct 26 09:39 sunlizhen
lftp 10.11.67.31:/gongxiang>
匿名用户可以进行上传和下载,但也仅仅只限于10.11.67.31:/gongxiang/目录下
4、ftp本地账户访问问题
使用用户登录功能(ftp允许匿名用户访问,也可以在服务器端创建用户,设置密码进行登陆,创建用户的时候如果指定了创建用户的家目录,那么默认的共享目录变为用户家目录)
useradd创建用户的问题
[root@localhost]#useradd -d /opt/haha -G ftp -s /sbin/nologin haha
Creating mailbox file: File exists //我的这里操作有报错,顺道说下这个问题
linux系统下添加用户后,会在系统里自动加一个邮箱(系统邮箱),路径是:/var/spool/mail/用户名.
所以删除用户的时候用userdel -r 删除干净
可以直接用命令#rm -rf /var/spool/mail/用户名,这样就可以再次添加同一名字的用户.
执行该命令后,如果出现这样的错误提示:
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
报错原因
系统添加用户的标准步骤
1.编辑/etc/passwd与/etc/group
2.创建用户主目录
3.从/etc/skel拷贝文件与目录
4.让新用户获得其主目录与文件的拥有权限
5.给新用户一个密码
这说明用户的目录已经存在(这个可以是任何你设定的目录),不可再新建此目录,并非添加用户失败,可以忽略。创建用户的时候-d指定家目录,如果指定的家目录已经存在,会报这个警告,最好指定一个不存在的家目录,系统会自动创建。但不能递归创建目录。
创建用户(指定ftp组是为了规范分类,可以不指定)
[root@ftp-server ~]# useradd -d /mnt/kakaops kakaops -G ftp
[root@ftp-server ~]# passwd kakaops(123)
客户端登陆(匿名登陆和用户登陆)
[root@ftp-client ~]# lftp 10.11.67.31 -u kakaops (-u 指定用户,需要输入密码)
口令:
lftp kakaops@10.11.67.31:~> ls
[root@ftp-client ~]# lftp 10.11.67.31 -u kakaops,123 (,后面加密码)
lftp kakaops@10.11.67.31:~>
使用用户登录的时候,共享目录默认为用户的家目录
匿名账户
lftp 172.16.70.251 使用的是passwd文件内的默认账户,默认不需要写用户和密码,默认共享路径/var/ftp
本地账户
lftp 172.16.70.251 -u user02,1(密码) 使用的是除了ftp以外的账户,默认共享目录是账户自己的家目录
客户端常用命令
help //查看命令帮助手册
ls //查看文件
dir //查看文件=ls
cd pub //切换路径
get 文件 -o /root/Desktop
下载文件(-o指定下载文件存储目录,不指定默认下载到登陆目录下,下载多文件用空格隔开)
mirror 目录 指定的下载目录
下载目录(先指定下载需要目录,后面直接指定目录保存路径,不指定默认下载到登陆目录下)在这里如果指定了除了当前目录的其他目录,目录下载下来的是目录下的内容,目录会被拆分开。目录下载到当前目录下的话,会下载不拆开的目录
put 文件 //上传文件
mirror -R 目录 // 上传目录
mkdir 目录 // 客户端可以创建目录
5、附带补充FTP的配置文件选项的详细解释
vsftpd配置匿名用户常用选项
1、编辑配置文件
[root@qfedu.com vsftpd]# vim vsftpd.conf
write_enable=YES
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
2、常用的匿名FTP配置项
anonymous_enable=YES # 是否允许匿名用户访问
anon_umask=022 # 匿名用户所上传文件的权限掩码
anon_root=/var/ftp # 设置匿名用户的FTP根目录
anon_upload_enable=YES # 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES # 是否允许匿名用户允许创建目录
anon_other_write_enable=YES # 是否允许匿名用户有其他写入权(改名,删除,覆盖)
anon_max_rate=0 # 限制最大传输速率(字节/秒)0为无限制
3、开启 vsftp 服务
[root@xingdian vsftpd]# systemctl start vsftpd
[root@xingdian vsftpd]# netstat -lnpt |grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 34531/vsftpd
4、客户端登陆验证
vsftpd配置本地用户常用选项
1、创建测试用户
• 创建 zhangsan、lisi 密码都设置为 “123456”
[root@xingdian ~]# useradd zhangsan
[root@xingdian ~]# useradd lisi
[root@xingdian ~]# echo "123456" | passwd --stdin zhangsan
[root@xingdian ~]# echo "123456" | passwd --stdin lisi
2、修改配置文件
[root@qfedu.com ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YES
3、常用的本地用户FTP配置项
local_enable=YES # 是否允许本地系统用户访问
local_umask=022 # 本地用户所上传文件的权限掩码
local_root=/var/ftp # 设置本地用户的FTP根目录
chroot_list_enable=YES # 表示是否开启chroot的环境,默认没有开启
chroot_list_file=/etc/vsftpd/chroot_list
# 表示写在/etc/vsftpd/chroot_list文件里面的用户是不可以出chroot环境的。默认是可以的。
Chroot_local_user=YES
# 表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。
local_max_rate=0 # 限制最大传输速率(字节/秒)0为无限制
4、添加用户到白名单
[root@qfedu.com ~]# vim /etc/vsftpd/user_list
zhangsan
lisi
5、重启服务
[root@qfedu.com ~]# systemctl restart vsftpd
6、登陆测试
vsftpd配置文件选项详解
listen=YES # 是否以独立运行的方式监听服务
listen_address=192.168.4.1 # 设置监听FTP服务的IP地址
listen_port=21 # 设置监听FTP服务的端口号
write_enable=YES # 是否启用写入权限(上传,删除文件)
download_enable=YES # 是否允许下载文件
dirmessage_enable=YES # 用户切换进入目录时显示.message文件
xferlog_enable=YES # 启用日志文件,记录到/var/log/xferlog
xferlog_std_format=YES # 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式
connect_from_port_20=YES # 允许服务器主动模式(从20端口建立数据连接)
pasv_enable=YES # 允许服务器被动模式
pasv_max_port=24600 # 设置被动模式服务器的最大端口号
pasv_min_port=24500 # 设置被动模式服务器的最小端口号
pam_service_name=vsftpd # 用户认证的PAM文件位置
(/etc/pam.d/vsftpd.vu)
userlist_enable=YES # 是否启用user_list列表文件
userlist_deny=YES # 是否禁用user_list中的用户
max_clients=0 # 限制并发客户端连接数
max_per_ip=0 # 限制同一IP地址的并发连接数
tcp_wrappers=YES # 是否启用tcp_wrappers主机访问控制
chown_username=root # 表示匿名用户上传的文件的拥有人是root,默认关闭
ascii_upload_enable=YES # 表示是否允许用户可以上传一个二进制文件,默认是不允许的
ascii_download_enable=YES # 这个是代表是否允许用户可以下载一个二进制文件,默认是不允许的
nopriv_user=vsftpd # 设置支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户
async_abor_enable=YES # 设定支持异步传输功能
ftpd_banner=Welcome to Awei FTP servers # 设定Vsftpd的登陆标语
guest_enable=YES # 设置启用虚拟用户功能
guest_username=ftpuser # 指定虚拟用户的宿主用户
virtual_use_local_privs=YES # 设定虚拟用户的权限符合他们的宿主用户
user_config_dir=/etc/vsftpd/vconf # 设定虚拟用户个人Vsftp的配置文件存放路径