文件传输协议(FTP)

文件传输协议:File Transfer Protocol是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。

服务器端:vsftpd

客户端:lftp

安装:yum -y install vsftpd lftp

用户认证配置文件:/etc/pam.d/vsftpd

服务脚本: /usr/lib/systemd/system/vsftpd.service

配置文件:/etc/vsftpd/vsftpd.conf

匿名用户共享文件位置:/var/ftp

系统用户共享文件位置:用户家目录

虚拟用户共享文件位置:为其映射的系统用户的家目录

数据传输格式:二进制(默认)和文本

vsftp的端口分为两种

  命令端口:传输指令的端口,此端口为固定的端口号21

  传输端口:传输数据的端口:又分为主动模式和被动模式:(主动模式为利用tcp/ip的20端口来发起请求,数据端口只有在通讯的时候才会打开,被动模式为随机端口)

两种模式:(从服务器角度去看)

  主动模式::服务器主动连接 客户端(使用的是固定端口)

    命令(控制):客户端:随机port --->服务器:tcp21

       数据:客户端:随机port <---服务器:tcp20

  被动(PASV style):客户端主动连接

    命令(控制):客户端:随机port --->服务器:tcp21

    数据:客户端:随机port --->服务器:随机port 服务器被动模式数据端

示例: 227 Entering Passive Mode (192,168,175,138,224,59) 服务器数据端口为:224*256+59 

ftp -A 192.168.60.4(服务器IP地址)        -A以主动模式 登陆               –p 以被动模式登陆

FTP软件介绍

服务器端软件:Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器

  高速,稳定,下载速度是WU-FTP的两倍

  ftp.redhat.com数据:单机最多可支持15000个并发

客户端访问软件:ftp,lftp,lftpget,wget,curl (其中lftpget为非交互式的下载,要安装lftp)

ftp -A ftpserver port -A主动模式 –p 被动模式

状态码:

1XX:信息                                    125:数据连接打开

2XX:成功类状态                       200:命令OK 230:登录成功

3XX:补充类                               331:用户名OK

4XX:客户端错误                       425:不能打开数据连接

5XX:服务器错误                       530:不能登录

用户认证:

匿名用户:ftp,   anonymous (在连接ftp是输入这两个其中的一个匿名帐户就可以了。linux账户里默认在安装vsftp服务时会创建一个系统用户ftp)

系统用户:Linux用户,     用户在/etc/passwd,密码/etc/shadow

虚拟用户:特定服务的专用用户,独立的用户/密码文件

vsftpd服务

在服务器端安装yum install vsftpd

启动服务:service vsftpd start(在centos6上)systemctl start vsftpd

查看端口是否打开21:ss -nult

在客户端安装:yum install ftp

任何账户登陆如果自己的根目录有写权限则无法登陆:(需要修改权限)

例如匿名账号登陆自己的根目录对应的服务器的目录为/var/ftp/,若ftp对other用户有写权限则无法登陆

例如系统账号登陆自己的根目录对应的服务器的目录为 /home/lv, 若lv目录对lv用户有写权限则无法登陆

匿名用户登陆:输入用户名;密码可以为空。

在浏览器上里也可以查看:ftp://192.168.60.2

默认的共享文件位置:/var/ftp /pub/

ftp> ?   (可以查看ftp使用的命令)

ftp> !cat /etc/passwd  (加上!可以使用linux的命令查看操作linux系统里的各种操作)

ftp> !ls /data/

ftp> ls  (不添加!则只执行查看共享目录的操作)
get:下载数据:默认下载的路径为自在哪里登陆ftp服务器时自己所在的路径

put:上传数据  :默认上传的文件路径为自在哪里登陆ftp服务器时自己所在的路径下的文件

lcd  /data/  切换自己当前所在的linux的目录

vsftpd服务配置选项

listen_port=:命令端口监听
connect_from_port_20=YES:主动模式端口为20
ftp_data_port=:指定主动模式的端口
pasv_min_port= | pasv_max_port=:被动模式端口范围,0为随机分配
use_localtime=YES:使用当地时间
max_clients=:最大并发连接数
max_per_ip=:每个IP同时发起的最大连接数
nopriv_user=nobody:vsftpd服务指定用户身份运行
anon_max_rate=:匿名用户的最大传输速率
local_max_rate=:本地用户的最大传输速率
connect_timeout=:主动模式数据连接超时时长
accept_timeout=:被动模式数据连接超时时长
data_connection_timeout=:数据连接无数据输超时时长
idle_session_timeout=:无命令操作超时时长
ascii_upload_enable=YES:优先以文本方式上传
ascii_download_enable=YES: 优先以文本方式下载

匿名用户相关:

anonymous_enable=YES:支持匿名用户
no_anon_password=YES:(默认NO) 匿名用户略过口令检查
anon_world_readable_only:(默认YES)只能下载全部读的文件
anon_upload_enable=YES:允许匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES:允许匿名用户创建文件夹
anon_umask=:指定匿名用户上传文件的umask
anon_other_write_enable=YES:匿名用户可删除和修改上传的文件
chown_uploads=YES:(默认NO) 修改上传文件的默认的所有者和权限
chown_username=user1:将匿名上传的文件的属主修改为user1
chown_upload_mode=:将匿名上传的文件的权限修改为644

系统用户相关:

guest_enable=YES:所有系统用户都映射成guest用户
guest_username=ftp:配合上面选项才生效,指定guest用户
local_enable=YES:是否允许linux用户登录
write_enable-YES:允许linux用户上传文件
local_umask=:指定系统用户上传文件的默认权限
local_root=/ftproot:非匿名用户登录所在目录
chroot_local_user=YES:(默认NO,不禁锢)禁锢系统用户在家目录中
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES时,则chroot_list中用户不禁锢
当chroot_local_user=NO时,则chroot_list中用户禁锢

日志相关:

xferlog_enable=YES:(默认)启用记录上传下载日志
xferlog_std_format=YES:(默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog:(默认)可自动生成
dual_log_enable=YES:使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log:(默认)可自动生成

登录提示信息相关:

ftpd_banner=Welcome to blah FTP service.
banner_file=/etc/vsftpd/ftpbanner.txt:显示指定文件中的提示信息,优先此项生效
dirmessage_enable=YES:(默认) 目录访问提示信息
message_file=.message:(默认)信息存放在指定目录下.message

访问控制相关:

pam_service_name=vsftpd:指定pam模块配置文件

使用pam模块完成用户认证
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers:默认此文件中用户拒绝登录

userlist_enable=YES:默认有此设置
userlist_deny=YES:(默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list:用户认证黑名单,此为默认值 

基于SSL实现FTPS

# ldd `which vsftpd`|grep libssl.so #查看是否支持SSL
libssl.so. => /lib64/libssl.so. (0x00007f50d43a4000)

1)创建自签名证书:

# cd /etc/pki/tls/certs/
certs]# make vsftpd.pem
Country Name ( letter code) [XX]:CN
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:ftp
Organizational Unit Name (eg, section) []:opt
Common Name (eg, your name or your server's hostname) []:vsftpd.ftp.com

2)配置vsftpd服务支持SSL:

# vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES #启用SSL
allow_anon_ssl=NO #匿名不支持SSL
force_local_logins_ssl=YES #本地用户登录加密
force_local_data_ssl=YES #本地用户数据传输加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem #证书文件
# systemctl restart vsftpd
# useradd testftpuser
# echo testftppass |passwd --stdin testftpuser

3)用filezilla等客户端工具测试

虚拟用户的实现

1、基于文件认证

1)创建用户数据库文件

# vim /etc/vsftpd/vusers.txt
user1
user1pass
user2
user2pass
# db_load -T -t hash -f /etc/vsftpd/vusers.txt /etc/vsftpd/vusers.db #实行hash加密算法
# chmod /etc/vsftpd/vusers.db

2)创建系统用户和FTP目录

# useradd -r -d /data/ftp/ -s /sbin/nologin vuser
# mkdir -pv /data/ftp/pub/
# chmod -w /data/ftp/
# setfacl -m u:vuser:rwx /data/ftp/pub/

3)创建pam配置文件

# vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers #这里指定数据库文件,不需要加.db
account required pam_userdb.so db=/etc/vsftpd/vusers

4)指定pam配置文件

# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser #指定系统用户
pam_service_name=vsftpd.db #指定pam配置文件

5)建立各虚拟用户独立的配置文件

# mkdir /etc/vsftpd/vusers.d/
# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
# vim /etc/vsftpd/vusers.d/user1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES #匿名用户可删除和修改上传的文件
# mkdir /data/user2/
# vim /etc/vsftpd/vusers.d/user2
# systemctl restart vsftpd

2、基于MySQL数据库认证

说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器

数据库服务器和FTP服务器系统都是CentOS7

注意:如果是CentOS6系统请执行yum install vsftpd pam_mysql命令安装连接组件

mariadb服务器

~]#yum install mysql-server -y
~]# systemctl restart mariadb
~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 5.5.-MariaDB MariaDB Server Copyright (c) , , Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database vsftpddb;#准备数据库
Query OK, row affected (0.00 sec) MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| hellodb |
| mysql |
| performance_schema |
| vsftpddb |
+--------------------+
rows in set (0.00 sec) MariaDB [(none)]> use vsftpddb
Database changed
MariaDB [vsftpddb]> create table users (id int auto_increment not null primary key,name char() binary not null,password char() binary not null);
Query OK, rows affected (0.01 sec) MariaDB [vsftpddb]> desc users;
+----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int() | NO | PRI | NULL | auto_increment |
| name | char() | NO | | NULL | |
| password | char() | NO | | NULL | |
+----------+----------+------+-----+---------+----------------+
rows in set (0.00 sec) MariaDB [vsftpddb]> grant all on vsftpddb.* to vsftpduser@'192.168.130.10' identified by 'vsftpdpass'; #创建并授权用户
Query OK, rows affected (0.01 sec)

vsftpd服务器:

~]# mysql -uvsftpduser -pvsftpdpass -h192.168.130.8 #测试连接数据库
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 5.5.-MariaDB MariaDB Server Copyright (c) , , Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> desc vsftpddb.users;
+----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int() | NO | PRI | NULL | auto_increment |
| name | char() | NO | | NULL | |
| password | char() | NO | | NULL | |
+----------+----------+------+-----+---------+----------------+
rows in set (0.00 sec) MariaDB [(none)]> use vsftpddb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
MariaDB [vsftpddb]> insert into users(name,password)
-> values('user1',password('user1pass'));#创建vsftpd的虚拟用户
Query OK, row affected (0.01 sec) MariaDB [vsftpddb]> insert into users(name,password)
  ->values('user2',password('user2pass'));#创建vsftpd的虚拟用户
Query OK, row affected (0.00 sec) MariaDB [vsftpddb]> select * from users;
+----+-------+-------------------------------------------+
| id | name | password |
+----+-------+-------------------------------------------+
| | user1 | *F20B90D5A0CED3757C51AE04CD4700AB9879E467 |
| | user2 | *A9C95B38C9A88ECAE9128FD396059335E97CAA6E |
+----+-------+-------------------------------------------+
rows in set (0.00 sec)
# yum groupinstall "Development Tools" -y
# yum -y install mariadb-devel pam-devel vsftpd
# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
# tar xf pam_mysql-.7RC1.tar.gz
# cd pam_mysql-.7RC1/
pam_mysql-.7RC1]# ./configure --with-pam-mods-dir=/lib64/security
pam_mysql-.7RC1]# make && make install
# ls /lib64/security/ |grep pam_mysql.so
pam_mysql.so #pam模块已安装
# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpduser passwd=vsftpdpass host=192.168.130.10 db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=
account required pam_mysql.so user=vsftpduser passwd=vsftpdpass host=192.168.130.10db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=

crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密

auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
user=vsftpd为登录mysql的用户
passwd=magedu 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密

# useradd -r -s /sbin/nologin -d /data/mftp/ vuser
# mkdir -pv /data/mftp/pub/
# chmod -w /data/mftp/
# setfacl -m u:vuser:rwx /data/mftp/pub/
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.mysql #修改为使用pam_mysql模块认证
# systemctl restart vsftpd

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d
# mkdir /etc/vsftpd/vusers.d/
# touch /etc/vsftpd/vusers.d/{user1,user2}
# vim /etc/vsftpd/vusers.d/user1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#local_root=/ftproot #登录目录改变至指定的目录

网络文件共享服务—vsftpd服务的更多相关文章

  1. 搭建企业级NFS网络文件共享服务说明[一]

    1.1.0. 概述: 共享/NFS目录给整个192.168.25.0/24网段主机读写 man nfs 可以查看mount的信息 rpc端口111 nfs主端口2049 1.1.1. 搭建NFS环境 ...

  2. 企业级NFS网络文件共享服务_【all】

    1.1. 什么是NFS(1台机器提供服务) Network File System(网络文件系统)通过局域网让不同的主机系统之间共享文件或目录. NFS客户端可以通过挂载的方式将NFS服务器端共享的数 ...

  3. Linux实战教学笔记22:企业级NFS网络文件共享服务

    目录 第二十二节 企业级NFS网络文件共享服务 第一章 NFS网络文件共享服务 1.1 NFS介绍 1.2 NFS系统原理介绍 1.3 NFS服务端部署环境准备 1.4 NFS server端的设置 ...

  4. (转)企业级NFS网络文件共享服务

    企业级NFS网络文件共享服务 原文:http://www.cnblogs.com/chensiqiqi/archive/2017/03/10/6530859.html --本教学笔记是本人学习和工作生 ...

  5. Linux网络文件共享服务之smaba

    一.SAMBA服务简介 samba是1991年由Andrew Tridgel开发实现,主要用于Windows和unix文件共享.samba实现了共享文件和打印,实现在线编辑,登录SAMBA用户的身份认 ...

  6. centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享

    FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立 ...

  7. Linux之网络文件共享服务(FTP)

    一.FTP概念 •File Transfer Protocol 早期的三个应用级协议之一 •基于C/S结构 •双通道协议:数据和命令连接 •数据传输格式:二进制(默认)和文本  •两种模式:服务器角度 ...

  8. Linux网络文件共享服务之FTP

    一.FTP介绍 ftp(File Transfer Protocol)是早期的三个应用级协议之一,基于C/S结构,双通道协议,数据和命令连接,数据传输格式默认是二进制,当然也支持文件方式传输.默认情况 ...

  9. samba服务及vsftpd服务

    如何配置多个网卡 第一步: 打开设置,选择网络驱动器添加 第二步: ip a 查看网卡是否添加成功 第三步: 打开刚添加的网卡配置文件(注意,你刚添加的网卡是没有配置文件的,需要去复制一份到/etc/ ...

随机推荐

  1. FPGA上外挂DDR2&DDR3&MIG IP的使用记录

    前言 当需要大容量数据存储及处理的时候,FPGA内部自带的存储资源是远远不够的,所以问题来了,怎么使用外带的DDR3? 首要问题在于DDR3是什么?有没有协议?当然只是需要用Xilinx MIG IP ...

  2. Android开发中UI相关的问题总结

    UI设计和实现是Android开发中必不可少的部分,UI做不好的话,丑到爆,APP性能再好,估计也不会有多少人用吧,而且如果UI和业务代码逻辑中间没有处理好,也会很影响APP的性能的.稍微总结一下,开 ...

  3. oracle通过一个字段分组,取另一个字段的最大值

    select * from bdcdj.lqentry1 a  where 顺序号 in (select max(顺序号) from bdcdj.lqentry1 b WHERE b.archival ...

  4. 记录一次OOM排查经历

    我是用了netty搭建了一个UDP接收日志,堆启动配置 Xmx256  Xms256 ,项目刚启动的时候,系统进程占用内存很正常,在250M左右. 长时间运行之后发现,进程占用内存不断增长,远远超过了 ...

  5. Visual Studio 2017使用

    常用快捷方式 Ctrl + KK插入书签 取消书签Ctrl + KP 上一个书签Ctrl + KN 下一个数千Ctrl + F3 先一个关键词Shift + F3 上一个关键词 Ctrl + KC 添 ...

  6. Go语言——值方法 & 指针方法

    1 package main import ( "fmt" "sort" ) type SortableStrings []string type Sortab ...

  7. linux 基础12-程序与资源管理

    1. 基础概念 可执行的二进制文件就是程序 执行程序的时候因触发事件而获取的ID,称为PID 在登入并执行bash时,系统依据登录者的UID/GID给登录者一个PID/GPID/SID等 启动程序时, ...

  8. 关闭安装包更新使用YUM在Linux中(RHEL / CentOS / Fedora)

    YUM (Yellowdog Updater Modified)  是一个开源的命令行工具,以及基于图形的软件包管理工具, 用于基于 RPM (RedHat Package Manager) 的 Li ...

  9. 【Java基础-实验7】Banking_7 -添加银行透支扣款系统的 thorw异常机制

    实验基本要求: 实验题目 7:(在6基础上修改) 将建立一个 OverdraftException 异常,它由 Account 类的withdraw()方法 抛出. 实验目的: 自定义异常 实验说明: ...

  10. nginx用指针的值的最后一位来判断过期事件

    nginx中,将地址的最后一位取出来,用Instace变量标识,用来判断是否连接已经被释放成为过期时间 为什么指针地址最后一位一定是0呢? 这里的内存地址,一定是内存分配器分配出来的地址,如new . ...