FTP服务的相关实现

vsftpd介绍

	1》vsftpd全名为very secure FTP daemon,为非常安全的FTP服务,是针对操作系统的权限来设计的,这个权限是发起者发起该服务进程的权限,通常vsftpd服务的启动权限非常低。
2》vsftpd可以使用chroot函数来将特定的目录变成vsftpd活动的根目录。
3》vsftpd服务器是由vsftpd程序包提供,不再由xinetd管理。

vsftpd服务包和配置文件

	1》rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-3.0.2/
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub
2》用户认证配置文件:
/etc/pam.d/vsftpd
3》服务脚本:
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
4》配置文件:
/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:= 前后不要有空格
5》匿名用户(映射为系统用户ftp)共享文件位置:
/var/ftp
6》系统用户共享文件位置:
用户自己的家目录,家目录不允许有写权限
7》虚拟用户通过ftp访问共享文件位置:
给虚拟用户指定的映射成为系统用户的家目录

vsftpd服务的配置

	/etc/vsftpd/vsftpd.conf
1》命令端口
listen=YES ##表示vsftpd以standalone(单机模式)启动
listen_port=21
2》主动模式端口
connect_from_port_20=YES 主动模式端口为20
ftp_data_port=20 指定主动模式的端口
3》被动模式端口范围
linux 客户端默认使用被动模式
windows 客户端默认使用主动模式
pasv_min_port=6000 若设置0为随机分配
pasv_max_port=6010
4》使用当地时间
use_localtime=YES 使用当地时间(默认为NO,使用GMT) 5》匿名用户
anonymous_enable=YES 支持匿名用户
no_anon_password=YES ( 默认NO)匿名用户略过口令 检查
anon_world_readable_only ( 默认YES) 只能下载全部读的文件
anon_upload_enable=YES 匿名上传,注意: 文件系统权限
anon_mkdir_write_enable=YES 匿名用户是否可以创建目录
anon_other_write_enable=YES 可删除和修改上传的文件
anon_umask=077 指定匿名上传umask
chown_uploads=YES (默认NO)上传是否开启
chown_username=wang 指定上传文件的默认的所有者
chown_upload_mode=0644 指定上传文件的默认的权限
6》Linux 系统用户
guest_enable=YES 所有系统用户都映射成guest 用户
guest_username=ftp 配合上面选项才生效,指定guest 用户
local_enable=YES 是否允许linux 用户登录
write_enable-YES 允许linux 用户上传文件
local_umask=022 指定系统用户上传文件的默认权限
local_root=/ftproot 非匿名用户登录所在目录
7》禁锢所有系统用户在家目录中
chroot_local_user=YES (默认NO,不禁锢)禁锢系统用户
8》禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES 时,则chroot_list中用户不禁锢
当chroot_local_user=NO 时,则chroot_list中用户禁锢
9》wu-ftp 日志:默认启用
xferlog_enable=YES (默认)启用记录上传下载日志
xferlog_std_format=YES (默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog (默认)可自动生成
dual_log_enable=YES,vsftpd_log_file=/var/log/vsftpd.log 使用vsftpd自己的日志文件
10》vsftpd 日志:默认不启用
dual_log_enable=YES 使用vsftpd 日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log ( 默认 )可自动生成
11》登录提示信息
ftpd_banner=“welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效
12》目录访问提示信息
dirmessage_enable=YES (默认)
message_file=.message (默认) 信息存放在指定目录下.message
13》使用pam(Pluggable Authentication Modules)完成用户认证
pam_service_name=vsftpd
pam 配置文件:
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默认文件中用户拒绝登录
14》是否启用控制用户登录的列表文件
userlist_enable=YES 默认有此设置
userlist_deny=YES (默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list 此为默认值
15》连接限制
max_clients=0 最大并发连接数
max_per_ip=0 每个IP同时发起的最大连接数
16》vsftpd 服务指定用户身份运行
nopriv_user=nobody
17》传输速率:字节/秒
anon_max_rate=0 匿名用户的最大传输速率
local_max_rate=0 本 地用户的最大传输速率
18》连接时间:秒为单位
connect_timeout=60 主动模式数据连接超时时长
accept_timeout=60 被动模式数据连接超时时长
data_connection_timeout=300 数据连接无数据输超时时长
idle_session_timeout=60 无命令操作超时时长
19》优先以文本方式传输
ascii_upload_enable=YES
ascii_download_enable=YES
20》配置FTP 服务以非独立服务方运行:listen=NO ,默认为独立方式
vim /etc/xinetd.d/vsftpd
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
disable = no
}

实现基于ssl的FTPS

	1》查看是否支持SSL
ldd `which vsftpd` 查看到libssl.so
2》创建自签名证书
cd /etc/pki/tls/certs/
make vsftpd.pem
openssl x509 -in vsftpd.pem -noout –text
3》配置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 本地用户数据传输加密
force_anon_logins_ssl=YES
force_anon_data_ssl=YES 匿名用户的可用在虚拟用户上
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
还可以根据自己的需求来修改或添加对应的参数信息,需注意的是,在修改配置文件后是需要重启vsftpd服务才能生效的。
4》用filezilla等工具测试
ftpes:

基于虚拟用户的vsftpd

	1》虚拟用户就是系统当中不存在的实体用户,它只能访问服务器为其提供的ftp服务,但不能访问其他的额外资源信息。
2》我们可以通过使用虚拟用户来提高系统的安全性。例如,可以让一些用户对ftp服务中的内容具有写权限,但又不允许访问系统其他资源。
3》各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定。
4》所有虚拟用户会统一映射为一个指定的系统账号,来访问共享位置。
5》虚拟用户帐号的存储方式:
文件:编辑文本文件,此文件需要被编码为hash格式,奇数行为用户名,偶数行为密码
db_load -T -t hash -f vusers.txt vusers.db
关系型数据库中的表中:
实时查询数据库完成用户认证
mysql库:
pam 要依赖于pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
6》虚拟用户的认证方式是单独的口令库文件(pam_userdb),有可插入式认证模块来完成认证,使用这种方式配置更加灵活也更加的安全。
7》实现基于文件验证的vsftpd虚拟用户
1)创建虚拟用户的账号密码的数据库文件
a。我们通过创建一个文本文件来记录虚拟用户的账号密码信息,格式为:奇数行为账号,对应的偶数行为对应的密码。
vim /etc/vsftpd/vusers.txt
shen1
123456
shen2
213546
shen3
546213
b。将该文本文件转换成二进制的数据库文件,这里需要借助db4工具来实现。
yum install db4-utils -y
cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db
chmod 600 vusers.db(保证密码文件的安全)
2)创建FTP根目录和虚拟用户映射的系统用户
mkdir /var/ftproot(为ftp的根目录)
useradd -d /var/ftproot -s /sbin/nologin vuser(将虚拟用户映射为vuser)
chmod +rx /var/ftproot/
centos7 还需要执行以下操作:
chmod -w /var/ftproot/
mkdir /var/ftproot/upload
setfacl -m u:vuser:rwx /var/ftproot/upload
3)创建支持虚拟用户的PAM认证配置文件
vim /etc/pam.d/vsftpd.db
#%PAM-1.0
# 32-bit
#auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
#account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
# 64-bit
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login创建配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf
virtual_use_local_privs=YES 开启虚拟用户
user_config_dir=/etc/vsftpd/vusers.d/ 虚拟用户的配置文件的目录
cd /etc/vsftpd/vusers.d/ 进入此目录
允许wang用户可读写,其它用户只读
vim wang 创建各用户自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
......
7)重启vsftpd服务器
systemctl vsftpd restart
8)使用虚拟用户进行测试验证

实现基于MYSQL 验证的vsftpd

	说明:本实验在两台CentOS 主机上实现,一台做为FTP 服务器,一台做数据库服务器
一、安装所需要包和包组:
在数据库服务器上安装包:
Centos7 :在数据库服务器 上 安装
yum –y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb
Centos6 :在数据库服务器上安装
yum –y install mysql-server
在FTP 服务器上安装vsftpd 和pam_mysql包
centos6:
pam_mysql由epel6 的源中提供
yum install vsftpd pam_mysql
centos7:
无对应rpm 包,需手动 编译 安装
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下载pam_mysql-0.7RC1.tar.gz
ftp://172.16.0.1/pub/Sources/sources/pam/
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
make
make install
二、在数据库服务器上创建虚拟用户账号
1. 建立存储虚拟用户数据库和连接的数据库用户
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;
ftp 服务和mysql 不在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu';
ftp 服务和mysql 在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'magedu';
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';
mysql> FLUSH PRIVILEGES;
2. 准备相关表
mysql> USE vsftpd;
Mysql> SHOW TABLES;
mysql> CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);
mysql>DESC users;
测试连接
mysql -uvsftpd -h 172.16.200.200 -pmagedu
mysql> SHOW DATABASES;
3. 添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql>DESC users;
mysql> INSERT INTO users(name,password) values(‘wang',password('magedu'));
mysql> INSERT INTO users(name,password) values(‘mage',password('magedu'));
mysql> SELECT * FROM users;
三、在FTP 服务器上配置vsftpd 服务
1. 在FTP 服务器上建立pam 认证所需文件
vi /etc/pam.d/vsftpd.mysql 添加如下两行
auth required pam_mysql.so user=vsftpd
passwd=magedu host=mysqlserver db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd
passwd=magedu host=mysqlserver db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2
注意:参考README 文档,选择正确的加密方式,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() 函数加密
2. 建立相应用户和修改vsftpd 配置文件,使其适应mysql认证,建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去ftp 根目录的写权限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
确保/etc/vsftpd.conf 中已经启用了以下选项
anonymous_enable=YES
添加下面两项
guest_enable=YES
guest_username=vuser
修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql
四、启动vsftpd 服务
service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口开启情况
netstat -tnlp |grep :21 五、Selinux 相关设置:在FTP 服务器上执行
restorecon -R /lib64/security
setsebool -P ftpd_connect_db 1
setsebool -P ftp_home_dir 1
chcon -R -t public_content_rw_t /var/ftproot/ 六 、测试:利用FTP 客户端工具,以 以 虚拟用户登录验证结果
tail /var/log/secure 七、在FTP 服务器上配置虚拟用户具有不同的访问权限vsftpd 可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp 服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf 指定其路径及名称即可
1 、配置vsftpd 为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config 2 、创建所需要目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang mage
3 、配置虚拟用户的访问权限
虚拟用户对vsftpd 服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户wang 具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang 文件,在里面添加如下选项并设置为YES 即可, 只读则设为NO
注意:需确保 对应的映射用户对于文件系统有写 权限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}

FTP服务相关实现的更多相关文章

  1. linux下,FTP服务相关

    虚拟机上安装完CentOS 6.5后,使用FTP工具(FlashFXP)来上传文件到虚拟机的linux,结果发现连接不上.现在解决了,解决方法总结一下: 1.先检查有没有安装ftp.好像包括两个部分, ...

  2. FTP相关、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    1.FTP相关(file transfer protocol,文件传输协议)   2.用vsftpd搭建ftp安装:yum install vsftpd -y创建一个虚拟用户:useradd  vft ...

  3. 基于ftp服务的三种登录方式及其相关的访问控制和优化

    ftp(简单文件传输协议),是一种应用广泛的网络文件传输协议和服务,占用20和21号端口,主要用于资源的上传和下载. 在linux对于ftp同widows一样具有很多的种类,这里主要介绍vsfptd( ...

  4. 5. 网络配置与FTP服务笔记

    IP地址: Ipv4        2*32       Ipv6 tcp      网络通讯协议 udp    用户数据报协议 常见网络端口: 20  21      ftp服务 文件共享 22   ...

  5. FTP服务详解

    FTP服务 本章机构 简介 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文件传输协议".用于Internet上的控制文件的双向传输.同时, ...

  6. 在Win7的IIS上搭建FTP服务及用户授权

    FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属于应用层协议(端口号通常为21),用于Internet上的双向文件传输(即文件的上传和下载).在网络上有 ...

  7. 在Win7的IIS上搭建FTP服务及用户授权——转载!!

    原文地址:http://blog.sina.com.cn/s/blog_6cccb1630100q0qg.html FTP服务 FTP是文件传输协议(File Transfer Protocol)的简 ...

  8. 【CNMP系列】CentOS7.0下安装FTP服务

    一个小插曲,安装一个FTP服务,便于和远程服务器的文件沟通.后续我们会讲到如何使用Capistrano配合git完成服务器的代码部署以及发布流程.现在,代码先走FTP吧,挺稳. FTP简介 FTP 是 ...

  9. CentOS安装FTP服务

    最近公司有一个内部比赛(黑客马拉松),报名参加了这么一个赛事,在准备参赛作品的同时(参赛服务器需要自己搭建),借着这个机会,决定把tomcat部署相关的知识从0到1重新捋一遍.就当备忘录了. FTP服 ...

随机推荐

  1. python 3.4读取输入参数

    python 3.4读取输入参数 学习了:https://blog.csdn.net/qq_24815615/article/details/52302615 注意,sys.args[0]是pytho ...

  2. [Rust] Pass a JavaScript Function to WebAssembly and Invoke it from Rust

    In some cases it’s useful to be able to invoke a JavaScript function inside Rust. This session showc ...

  3. SQL SELECT TOP, LIMIT, ROWNUM 子句

    SQL SELECT TOP, LIMIT, ROWNUM 子句 SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目. SELECT TOP 子句对于拥有数千条记 ...

  4. MapReduce将HDFS文本数据导入HBase中

    HBase本身提供了很多种数据导入的方式,通常有两种常用方式: 使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 另一种方式就是使用HB ...

  5. Sublime Text使用

    安装Sublime Text Sublime 的安装比較简单,我们能够直接去官网http://www.sublimetext.com/,点击Download菜单.进入之后选择自己操作系统的进行下载安装 ...

  6. 设计模式学习笔记——State状态模式

    从一个类中,将有关状态的处理分离出来,独立成类,并面向接口编程.作用是可以简化代码,避免过多的条件判断:if-else-

  7. HBase2.0新特性之In-Memory Compaction

    In-Memory Compaction是HBase2.0中的重要特性之一,通过在内存中引入LSM结构,减少多余数据,实现降低flush频率和减小写放大的效果.本文根据HBase2.0中相关代码以及社 ...

  8. gRPC错误码 http状态码 provide your APIs in both gRPC and RESTful style at the same time

    How gRPC error codes map to HTTP status codes in the response https://github.com/grpc-ecosystem/grpc ...

  9. Java 8 新的时间日期 API

    1. 概述 1.1 简介 Java 8 引入了一套全新的时间日期API,操作起来更简便.简单介绍下,LocalDate和LocalTime和LocalDateTime的使用: java.util.Da ...

  10. Awesome Adb——一份超全超详细的 ADB 用法大全【转】

    本文转载自:https://juejin.im/entry/57c00fe4c4c971006179838a ADB,即 Android Debug Bridge,它是 Android 开发/测试人员 ...