Linux系统——FTP
FTP连接及传输模式
1. 控制连接:TCP21,用于发送FTP命令信息
2. 数据连接:TCP20,用于上传、下载数据
3. 数据连接的建立类型:
(1)主动模式:服务器制动发起数据连接
首先由客户端向服务端的21端口建立FTP控制连接。当需要传输数据时,客户端以PORT 命令告知服务区“我打开了某端口,你过来连接我”,预算服务器从20端口向客户端的该端口发送请求并建立数据连接。
(2)被动模式:服务器被动等待数据连接
如果客户端所在网络的防火墙禁止主动模式连接,通常回 使用被动模式。
首先由客户端向服务器的21端口建立FTP控制连接。当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
4. 传输模式
在传输文件时,根据是否进行字符转换,分文文本模式和二进制模式。
(1)文本模式:又称ASCII(美国信息交换标准码模式)这种模式在传输文件时使用ASCII标准字符序列,一般只用于纯文本文件的传输。
(2)二进制模式:又称Binary模式,这种模式不会转换文件中的字符序列,更适合传输程序、图片等非纯文本字符的文件。
使用二进制模式比文本模式更有效率,大多数FTP客户端工具可以根据文件类型自动选择文件传输模式。
FTP用户类型
1. 匿名用户:用户名为ftp或anonymous,提供任意密码(包括空密码)都可以通过服务器的验证。一般用于公共文件的下载,如提供一些免费的软件、学习资料下载的站点。
2. 本地用户:直接使用本地的系统用户账号进行验证。
3. 虚拟用户:通过一份独立的用户数据库文件进行登录验证,将FTP账户与Linux系统账户的关联性降至最低,为系统提供更好的安全性。
搭建匿名访问的FTP服务
1. 安装FTP服务软件
```
[root@localhost ~]# rpm -qa | grep vsftpd
[root@localhost ~]# mount /dev/sr0 /media/cdrom
[root@localhost ~]# yum -y install vsftpd
```
2. 准备匿名FTP 访问的目录
```
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ll
total 4
drwxr-xr-x. 2 root root 4096 Jul 24 2015 pub
[root@localhost ftp]# chown ftp pub/
[root@localhost ftp]# ll
total 4
drwxr-xr-x. 2 ftp root 4096 Jul 24 2015 pub
```
3. 开放用户配置并启动vsftpd服务
```
[root@localhost ftp]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf.$(date +%F)
[root@localhost vsftpd]# ls
ftpusers vsftpd.conf vsftpd.conf.bak
user_list vsftpd.conf.2018-11-23 vsftpd_conf_migrate.sh
[root@localhost vsftpd]# vim vsftpd.conf
#全局配置
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_umask=022 #手动添加
anon_mkdir_write_enable=YES
anon_other_write_enable=YES #手动添加
[root@localhost vsftpd]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vsftpd]# ss -antup | grep vsftpd
tcp LISTEN 0 32 *:21 *:* users:(("vsftpd",1460,3))
```
4. 测试匿名FTP服务端
```
# ftp_server端
[root@localhost vsftpd]# cd /var/ftp/pub/
[root@localhost pub]# touch yyyy
# ftp_client端
[root@localhost ~]# which ftp
/usr/bin/which: no ftp in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
[root@localhost ~]# mount /dev/sr0 /media/cdrom
[root@localhost ~]# yum -y install ftp
[root@localhost ~]# which ftp
/usr/bin/ftp
[root@localhost ~]# ftp 192.168.214.157
Connected to 192.168.214.157 (192.168.214.157).
220 (vsFTPd 2.2.2)
Name (192.168.214.157:root): ftp #匿名用户账号为ftp
331 Please specify the password.
Password: #密码为空(回车)
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,214,157,245,215).
150 Here comes the directory listing.
drwxr-xr-x 2 14 0 4096 Nov 23 02:06 pub
226 Directory send OK.
ftp> ls pub
227 Entering Passive Mode (192,168,214,157,28,41).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 23 02:06 yyyy
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,214,157,21,129).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 23 02:06 yyyy
226 Directory send OK.
ftp> get yyyy # 下载文件
local: yyyy remote: yyyy
227 Entering Passive Mode (192,168,214,157,94,67).
150 Opening BINARY mode data connection for yyyy (0 bytes).
226 Transfer complete.
ftp> put anaconda-ks.cfg #上传文件
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (192,168,214,157,62,254).
150 Ok to send data.
226 Transfer complete.
1118 bytes sent in 0.000697 secs (1604.02 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,214,157,91,58).
150 Here comes the directory listing.
-rw-r--r-- 1 14 50 1118 Nov 23 02:13 anaconda-ks.cfg
-rw-r--r-- 1 0 0 0 Nov 23 02:06 yyyy
226 Directory send OK.
```
搭建本地用户验证的FTP服务
1. 创建本地用户
```
[root@localhost vsftpd]# useradd yunjisuan
[root@localhost vsftpd]# passwd yunjisuan
Changing password for user yunjisuan.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
```
2. 修改配置文件,重启FTP服务
```
[root@localhost pub]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers vsftpd.conf vsftpd_conf_migrate.sh
user_list vsftpd.conf.2018-11-23
[root@localhost vsftpd]# mv vsftpd.conf vsftpd.conf.anon
[root@localhost vsftpd]# cp vsftpd.conf.2018-11-23 vsftpd.conf
[root@localhost vsftpd]# vim vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
[root@localhost vsftpd]# /etc/init.d/vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
```
3. 客户端测试
```
# ftp_server端
[root@localhost ~]# cd /home/yunjisuan/
[root@localhost yunjisuan]# touch 123
# ftp_client端
[root@localhost ~]# ftp 192.168.214.157
Connected to 192.168.214.157 (192.168.214.157).
220 (vsFTPd 2.2.2)
Name (192.168.214.157:root): yunjisuan
331 Please specify the password.
Password: # 密码为123456
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,214,157,75,75).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 23 02:45 123
226 Directory send OK.
```
ftpusers与user_list用户列表的使用
1. ftpusers问价:FTP服务器中的给名单,优先级高于user_list文件
2. user_list文件:此用户列表默认情况也是黑名单,即在此用户列表中的用户不可访问FTP服务器,但可以通过vsftpd.conf主配置文件的修改将次名单改为白名单,且仅此名单中的用户可以访问。






搭建虚拟用户验证的FTP服务
1. 建立虚拟用户账号数据库
vsftpd服务使用Berkeley DB 格式的数据库文件来存放虚拟用户账号,使用db_load工具(安装包db4-utils)生成数据库文件。
```
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers vsftpd.conf vsftpd.conf.anon
user_list vsftpd.conf.2018-11-23 vsftpd_conf_migrate.sh
[root@localhost vsftpd]# mv vsftpd.conf vsftpd.conf.local
[root@localhost vsftpd]# cp vsftpd.conf.2018-11-23 vsftpd.conf
[root@localhost vsftpd]# which db_load
/usr/bin/db_load
[root@localhost vsftpd]# vim ./vusers.list
daisy #账户名
123456 #密码
helen
123456
dave
123123
[root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db 将vusers.list进行加密,加密后文件命名为vusers.db
[root@localhost vsftpd]# chmod 600 vusers.*
```
2. 添加虚拟映射账号,为FTP根目录修改权限
```
[root@localhost vsftpd]# useradd -d /var/ftproot/ -s /sbin/nologin virtual
[root@localhost vsftpd]# chmod 755 /var/ftproot/
```
3. 添加PAM认证
```
[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
```
4. 修改vsftpd.conf配置文件,重启服务
```
[root@localhost vsftpd]# vim vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
pam_service_name=vsftpd.vu
guest_enable=YES
guest_username=virtual
userlist_enable=YES
[root@localhost vsftpd]# /etc/init.d/vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
```
5. 客户端测试
```
# ftp_client端
[root@localhost ~]# ftp 192.168.214.157
Connected to 192.168.214.157 (192.168.214.157).
220 (vsFTPd 2.2.2)
Name (192.168.214.157:root): daisy
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,214,157,203,139).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 23 04:13 111
226 Directory send OK.
```
6. 实现每个虚拟用户不同根目录、不同权限的管控
(1)创建用户控制目录,并创建虚拟所对应的同名配置文件
```
[root@localhost ftproot]# cd /etc/vsftpd/
[root@localhost vsftpd]# mkdir ./vusers.dir
[root@localhost vsftpd]# cd ./vusers.dir/
[root@localhost vusers.dir]# touch daisy helen dave
[root@localhost vusers.dir]# ls
daisy dave helen
[root@localhost vusers.dir]# mkdir -p /var/daisy
[root@localhost vusers.dir]# mkdir -p /var/helen
[root@localhost vusers.dir]# mkdir -p /var/dave
[root@localhost vusers.dir]# vim daisy
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=1
local_root=/var/daisy
[root@localhost vusers.dir]# vim helen
anon_upload_enable=YES
anon_max_rate=0
local_root=/var/helen
[root@localhost vusers.dir]# /etc/init.d/vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vusers.dir]# chown virtual /var/daisy/
[root@localhost vusers.dir]# chown virtual /var/helen/
[root@localhost vusers.dir]# chown virtual /var/dave/
```
(2)修改vsftpd.conf主配置文件,重启服务
```
[root@localhost vsftpd]# vim vsftpd.conf
anon_umask=022
pam_service_name=vsftpd.vu
guest_enable=YES
guest_username=virtual
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers.dir
[root@localhost vsftpd]# /etc/init.d/vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
```
(3)客户端测试
验证daisy
```
# ftp_server端
[root@localhost vsftpd]# cd /var/daisy
[root@localhost daisy]# touch daisy
[root@localhost daisy]# cd /var/helen
[root@localhost helen]# touch helen
[root@localhost helen]# cd /var/dave
[root@localhost dave]# touch dave
# ftp_client端
[root@localhost ~]# ftp 192.168.214.157
Connected to 192.168.214.157 (192.168.214.157).
220 (vsFTPd 2.2.2)
Name (192.168.214.157:root): daisy
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,214,157,29,234).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 23 04:52 daisy
226 Directory send OK.
```
Linux系统——FTP的更多相关文章
- linux系统ftp命令
先来一段简单的ftp 下载脚本 ftp -i -n<<EOF open 14.2.33.211 user etl etl cd /etlfile/ftpfile lcd /etlfile/ ...
- centos 7 linux系统默认ftp安装配置和部署(详细讲解)
小生接触 Linux 系统时间不长,想解决linux系统ftp安装及部署问题,折腾了大半天,终于弄出来了,将各路高手的配置方法综合了一下,如有不对之处,欢迎各位看客指正,感谢! 一.声明: 本文采用操 ...
- Linux系统上安装软件(ftp服务器)
一:安装ftp服务器 在安装linux系统的时候,自定义软件包安装时,我已经勾选了ftp服务器,所以已经 安装过了,如果没有勾选,需要额外下载ftp的安装包,进行安装. ftp服务器搭建过程中遇到的问 ...
- 在本机使用虚拟机安装一个linux系统,并搭建ftp服务器
一.Linux基础使用:linux服务器环境搭建(FTP服务器), 在本机使用虚拟机安装一个linux系统,并搭建ftp服务器,要求能使用ftp服务将本机文件到保存linux虚拟机上 资料: VMwa ...
- 批量增加Linux系统账号、重置账号密码、FTP账号批量测试
批量增加Linux系统账号.重置账号密码是用Linux Shell脚本来做的:批量FTP账号测试是用Python脚本来做的.这些脚本都是读取一个用户名和密码文件,然后基于该用户名密码文件进行自动批量测 ...
- Linux系统下搭建FTP/SFTP服务器
传输文件经常使用ftp和sftp服务器.Windows下有多种可视化工具,使用快捷.Linux经常需要自行搭建这两种服务器,当然搭建熟练的话,会更加快捷. 1.检查Linux系统是否安装了vsftp和 ...
- centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课
centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...
- Linux系统通过FTP进行文档基本操作【华为云分享】
[摘要] Linux系统里通过FTP可以对文档进行上传,更改权限和基本的文档管理. 获得Linux系统后,不熟悉命令操作的情况下,可以通过FTP工具进行文档操作,下面以WinSCP工具为例进行讲解: ...
- linux系统快速搭建ftp服务器——实现匿名用户和创建用户访问服务器
一.准备工作: linux系统为CentOS Linux release 7.5.1804 (Core) 可以使用 lsb_release -a 命令查看 window系统中安装 SecureCR ...
随机推荐
- input 监听输入事件
$("#" + inputId).on("input", function () { var checkboxId = $("#" + in ...
- Dubbo(一) -- 初体验
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架. 一.Dubbo出现的背景 随着互联网的发展,网站应用的规模不断扩大,常规的 ...
- 制作Windows U盘镜像
目的:制作windows server 2008 U盘镜像 需要的共具: 1.一个格式为FAT并且至少4G的U盘, 2.UltraISO软件, 3.一个windows server 2008 ISO文 ...
- (使用lua++)Lua脚本和C++交互(四)
上一篇中,你已经可以在Lua里面用C++的函数了,那么咱们再增加一点难度,比如,我有一个CTest对象,要作为一个参数,传输给func_Add()执行,怎么办?很简单,如果你对上面的代码仔细阅读,你会 ...
- 进程防结束之PS_CROSS_THREAD_FLAGS_SYSTEM
有人投到黑防去了,不过黑防不厚道,竟然没给完整的代码,自己整理一份备用吧,驱网.DebugMan.邪八的那群人直接飘过吧. 这种方法的关键在于给线程的ETHREAD.CrossThreadFlags设 ...
- poj_3461 kmp
题目大意 给定两个字符串S1, S2,求S1中包含多少个S2串.其中S1长度最大为 1000000, S2长度最大为10000. 题目分析 典型的字符串匹配问题,直接匹配显然会超时,考虑使用kmp算法 ...
- centos7 ubuntu14 添加sudo 权限 ,禁用每次sudo 需要输入密码
安装完centos7后,默认没有启用sudo,首先应该是对sudo进行设置.sudo的作用就是使当前非root用户在使用没有权限的命令 时,直接在命令前加入sudo,在输入自己当前用户的密码就可以完成 ...
- RDO部署多节点OpenStack Havana(OVS+GRE)
RDO是由红帽RedHat公司推出的部署OpenStack集群的一个基于Puppet的部署工具,可以很快地通过RDO部署一套复杂的OpenStack环境,当前的RDO默认情况下,使用Neutron进行 ...
- HTTP/2探索第一篇——概念
版权声明:本文由张浩然原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/87 来源:腾云阁 https://www.qclou ...
- 给大家推荐一个好的android模拟器genymotion,非常流畅,跟真机差不多
http://www.genymotion.cn/这里是下载地址, 下载的时候会要求输入邮箱并注册,这个邮箱尽量用网易这类的邮箱,我试过qq邮箱无法收到验证邮件, 程序下载安装完成后,打开客户端选择设 ...