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主配置文件的修改将次名单改为白名单,且仅此名单中的用户可以访问。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105547629.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105558986.)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105611603.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105624785.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105633938.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105644182.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
搭建虚拟用户验证的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 ...
随机推荐
- Codeforces Round #277.5 (Div. 2)部分题解
A. SwapSort time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- Java集合----概述、Collection接口、Iterator接口
Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中. Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java 集合可分为 Set.Li ...
- 06python 之基本数据类型
数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483646 在64位机器上,整数的位数为64位,取值范围为-2** ...
- php学习九:存取器&魔术方法
当声明属性的时候用到了private,那么的话只能本类中才能访问此属性,其他地方无法使用,这个时候需要给外界提供一些方法来使外界访问 方法一:存取器: 可以提供一个public的方法来使外界对类里面的 ...
- 96、facebook Fresco框架库源使用(转载)
各个属性详情:http://blog.csdn.net/y1scp/article/details/49245535 开源项目链接 facebook Fresco仓库:git clone https: ...
- Cognos入门教程
Cognos入门教程 1. ReportStudio入门教程 ReportStudio入门教程(http://blog.csdn.net/column/details/ygy-reportstudio ...
- java高级---->Thread之CountDownLatch的使用
CountDownLatch是JDK 5+里面闭锁的一个实现,允许一个或者多个线程等待某个事件的发生.今天我们通过一些实例来学习一下它的用法. CountDownLatch的简单使用 CountDow ...
- Elasticsearch 常用基本查询
安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文 ...
- Ubuntu远程登录服务器--ssh的安装和配置
ssh是一种安全协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全. 安装ssh sudo apt-get update sudo apt-get install openssh-serve ...
- weblogic新漏洞学习cve-2017-10271
一.原理: 很明显啦,readobject又出来背锅了,一个XML的反序列化漏洞导致的命令执行. 具体原理我看不懂java代码的我也只能学习别人的分析.给出一篇参考文章,写的非常详细: 漏洞原理 二. ...