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 ...
随机推荐
- Windows之Xmanager连接linux打开Oracle视图操作
前提:安装Xmanager 能够百度Xmanager下载其破解版或者带注冊机的版本号,也能够官网下载.只是须要秘钥(建议下载企业版) 官网下载地址:http://www.netsarang.com/d ...
- 【VR】Leap Motion 官网文档 FingerModel (手指模型)
前言: 感谢关注和支持这个Leap Motion系列翻译的朋友们,非常抱歉因为工作原因非常久没有更新,今后这个翻译还会继续(除非官方直接给出中文文档).本篇献给大家的是 <FingerModel ...
- windows下配置nutch注意的问题
1.为处理方便,直接在$nutch目录下创建一个名为url.txt文件,然后在文件里添加要搜索的网址,例如:http://www.sina.com.cn/,注意网址最后的"/"一定 ...
- 《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记
10.3.1 声明和定义构造函数构造函数原型:// constructor prototype with some default argumentsStock(const string &c ...
- Jquery checkbox选中问题
checkbox中有.checked的写法,判断当前是否是选中状态,不过这种是针对[object HTMLInputElement]这种类型的,而对于[object Object]这种类型是不能使用的 ...
- PHP之语句
前面的话 任何 PHP 脚本都是由一系列语句构成的.一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句).语句通常以分号结束.此外,还可以用花括号将 ...
- LeetCode——Best Time to Buy and Sell Stock
Description: Say you have an array for which the ith element is the price of a given stock on day i. ...
- 微信小游戏 Egret开发数据域官方Demo下载地址
随着引擎的升级,伴随而来就是各种问题,使用官方调试过的Demo,少走弯路. Mark下 官方Demo
- 无线路由器wan口和lan口ip同网段导致无法上网解决办法
环境 本地网段为192.168.0.0/24 路由器默认网段也是192.168.0.0/24 设置好路由器wan口DHCP自动获取ip以后无法上网 解决办法 把路由器是lan口地址设置为192.168 ...
- AngularJs:Directive指令用法
摘自:http://www.jb51.net/article/83051.htm 摘要:Directive(指令)是AngularJ非常强大而有有用的功能之一.它就相当于为我们写了公共的自定义DOM元 ...