Linux 第80天 vsftpd

Linux 第80天 vsftpd

时间: 20181022



目录

DAS,SAN,NAS

文件传输协议FTP

FTP软件介绍

FTP服务

vsftpd服务

vsftpd服务配置选项解释

实现基于SSL的FTPS

vsftpd虚拟用户

实现基于文件验证的vsftpd虚拟用户

实现基于MYSQL验证的vsftpd虚拟用户

总结




DAS,SAN,NAS

DAS 只在一台主机箱内部

SAN Storage Area Network存储网络,给主机共享文件系统

NAS Network Attached Storage 基于块级别输出给客户机,客户机可以在上边执行分区

格式化等操作



文件传输协议FTP


File Transfer Protocol 早期的三个应用级协议之一

基于C/S结构

双通道协议:数据和命令连接

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


两种模式:服务器角度

主动(PORT style):服务器主动连接

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

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

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

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

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

服务器被动模式数据端口示例:

227 Entering Passive Mode (172,16,0,1,224,59)

服务器数据端口为:224*256+59



FTP软件介绍


FTP服务器程序:

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

vsftpd:VerySecure FTP Daemon,CentOS默认FTP服务器

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

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

客户端软件:

ftp,lftp,lftpget,wget,curl

ftp -A ftpserverport -A主动模式–p 被动模式

lftp–u username ftpserver

lftpusername@ftpserver

lftpgetftp://ftpserver/pub/file

gftp:GUI centos5 最新版2.0.19 (11/30/2008)

filezilla,CuteFtp,FlashFXP,LeapFtp

IE ftp://username:password@ftpserver



FTP服务


状态码:

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

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

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

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

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



用户认证:

匿名用户:ftp,anonymous,对应Linux用户ftp

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

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

nsswitch:network service switch名称解析框架

pam:pluggable authentication module 用户认证

/lib64/security /etc/pam.d/ /etc/pam.conf


vsftpd服务

由vsftpd包提供

不再由xinetd管理

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

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

/etc/rc.d/init.d/vsftpd(centos6)

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

man 5 vsftpd.conf

格式:option=value

注意:= 前后不要有空格

匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp

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

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


vsftpd服务配置


命令端口

listen_port=21


主动模式端口

connect_from_port_20=YES 主动模式端口为20

ftp_data_port=20 (默认)指定主动模式的端口


被动模式端口范围

linux客户端默认使用被动模式

windows 客户端默认使用主动模式

pasv_min_port=6000 0为随机分配

pasv_max_port=6010


使用当地时间

use_localtime=YES 使用当地时间(默认为NO,使用GMT)


匿名用户配置选项

anonymous_enable=YES 支持匿名用户

no_anon_password=YES(默认NO) 匿名用户略过口令检查

anon_world_readable_only(默认YES) 只能下载全部读的文件

anon_upload_enable=YES 匿名上传,注意:文件系统权限

anon_mkdir_write_enable=YES  匿名建目录

anon_umask=0333 指定匿名上传文件的umask,默认077

anon_other_write_enable=YES 可删除和修改上传的文件

指定上传文件的默认的所有者和权限

chown_uploads=YES(默认NO)

chown_username=USERNAME

chown_upload_mode=0644


Linux系统用户配置选项

local_enable=YES 是否允许linux用户登录

write_enable=YES 允许linux用户上传文件

local_umask=022 指定系统用户上传文件的默认权限

guest_enable=YES 所有系统用户都映射成guest用户

guest_username=ftp 配合上面选项才生效,指定guest用户

local_root=/ftprootguest 用户登录所在目录


禁锢所有系统用户在家目录中

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中用户禁锢


wu-ftp日志:默认启用

xferlog_enable=YES (默认)启用记录上传下载日志

xferlog_std_format=YES (默认)使用wu-ftp日志格式

xferlog_file=/var/log/xferlog(默认)可自动生成


vsftpd日志:默认不启用

dual_log_enable=YES 使用vsftpd日志格式,默认不启用

vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成


登录提示信息

ftpd_banner=“welcometo mage ftp server"

banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效


目录访问提示信息

dirmessage_enable=YES (默认)

message_file=.message(默认) 信息存放在指定目录下.message


使用pam(Pluggable Authentication Modules)完成用户认证

pam_service_name=vsftpd

pam配置文件:/etc/pam.d/vsftpd

/etc/vsftpd/ftpusers默认文件中用户拒绝登录


是否启用控制用户登录的列表文件

userlist_enable=YES 默认有此设置

userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单

userlist_file=/etc/vsftpd/users_list此为默认值


vsftpd服务指定用户身份运行

nopriv_user=nobody (默认值)


连接数限制

max_clients=0 最大并发连接数

max_per_ip=0 每个IP同时发起的最大连接数


传输速率:字节/秒

anon_max_rate=0 匿名用户的最大传输速率

local_max_rate=0 本地用户的最大传输速率


连接时间:秒为单位

connect_timeout=60 主动模式数据连接超时时长

accept_timeout=60 被动模式数据连接超时时长

data_connection_timeout=300 数据连接无数据输超时时长

idle_session_timeout=60 无命令操作超时时长


优先以文本方式传输

ascii_upload_enable=YES

ascii_download_enable=YES


配置FTP服务以非独立服务方运行

vim /etc/vsftpd/vsftpd.conf/

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


查看是否支持SSL

ldd `which vsftpd` 查看到libssl.so

创建自签名证书(此前的章节,这里不作详细命令操作)

配置vsftpd服务支持SSL:/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  指定证书位置

dsa_private_key_file=/etc/vsftpd/vsftpd.key  指定私钥位置

用filezilla等工具测试


vsftpd虚拟用户


虚拟用户:

所有虚拟用户会统一映射为一个指定的系统帐号

访问共享位置,即为此系统帐号的家目录

各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定


虚拟用户帐号的存储方式:

文件:编辑文本文件,此文件需要被编码为hash格式

奇数行为用户名,偶数行为密码

db_load -T -t hash -f vusers.txt vusers.db 使用此条命令生成认证数据库

关系型数据库中的表中:

实时查询数据库完成用户认证


mysql库:pam要依赖于pam-mysql.so库文件来读取mysql数据库的内容

/lib64/security/pam_mysql.so

/usr/share/doc/pam_mysql-0.7/README


实现基于文件验证的vsftpd虚拟用户

一、创建用户数据库文件

vim /etc/vsftpd/vusers.txt

pig

pigpass

cat

catpass

kitty

kittypass

cd /etc/vsftpd/

db_load-T -t hash -f vusers.txt vusers.db

chmod 600 vusers.db


二、创建用户和访问FTP目录

useradd -d /var/ftproot -s /sbin/nologinvuser

chmod +rx /var/ftproot/

centos7 还需要执行以下操作:

chmod -w /var/ftproot/

mkdir /var/ftproot/upload

setfacl -m u:vuser:rwx /var/ftproot/upload


三、创建pam配置文件(!!!!!注意这里一定不要加上那个后缀.db)

vim /etc/pam.d/vsftpd.db

auth required pam_userdb.so db=/etc/vsftpd/vusers

account required pam_userdb.so db=/etc/vsftpd/vusers

四、指定pam配置文件

vim /etc/vsftpd/vsftpd.conf

guest_enable=YES

guest_username=vuser

pam_service_name=vsftpd.db


五、SELinux设置:

禁用SELinux或者setsebool-P ftpd_full_access1


六、虚拟用户建立独立的配置文件

mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers.d/

cd /etc/vsftpd/vusers.d/ 进入此目录

允许pig用户可读写,其它用户只读

vim pig创建各用户自已的配置文件

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

vim mage 创建各用户自已的配置文件

local_root=/ftproot登录目录改变至指定的目录


实现基于MYSQL验证的vsftpd虚拟用户

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

一、安装所需要包和包组:


在数据库服务器上安装包:

Centos7:在数据库服务器上安装

yum –y install mariadb-server

systemctl start mariadb.service

systemctl enable mariadb

Centos6:在数据库服务器上安装

yum –y install mysql-server

在FTP服务器上安装vsftpd和pam_mysql包

centos6:pam_mysql由epel6的源中提供

yum install vsftpdpam_mysql


centos7:无对应rpm包,需手动编译安装

yum -y groupinstall "Development Tools"

yum -y install mariadb-devel pam-develvsftpd

下载pam_mysql-0.7RC1.tar.gz

tar xvfpam_mysql-0.7RC1.tar.gz

cd pam_mysql-0.7RC1/

./configure --with-pam-mods-dir=/lib64/security \

--with-mysql=/usr \

--with-pam=/usr


make

make install


二、在数据库服务器上创建虚拟用户账号

1.建立存储虚拟用户数据库和连接的数据库用户

mysql> CREATE DATABASE vsftpd;

mysql> SHOW DATABASES;

ftp服务和mysql不在同一主机:

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@'172.16.%.%' IDENTIFIED BY 'vsftpdpass';

ftp服务和mysql在同一主机:

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@localhost IDENTIFIED BY 'vsftpdpass';

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@'127.0.0.1' IDENTIFIED BY 'vsftpdpass';

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 -hmysqlserverIP -pvsftpdpass

mysql> SHOW DATABASES;


3.添加虚拟用户

根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储

mysql> DESC users;

mysql> INSERT INTOusers(name,password) 

values ('pig',password('pigpass')),

('pig2',password('pig2pass'))

mysql> SELECT * FROM users WHERE ID=1;


三、在FTP服务器上配置vsftpd服务

1.在FTP服务器上建立pam认证所需文件

vi /etc/pam.d/vsftpd.mysql添加如下两行

authrequired pam_mysql.so user=vsftpd passwd=vsftpdpass 

host=mysqlserverIP db=vsftpd table=users usercolumn=name 

passwdcolumn=password crypt=2 (此为一行)

account required pam_mysql.so user=vsftpd passwd=vsftpdpass 

host=mysqlserverIP db=vsftpd table=users usercolumn=name 

passwdcolumn=password crypt=2 (此为一行)

注意:参考README文档,选择正确的加密方式

crypt是加密方式,

0表示不加密,

1表示crypt

2表示使用mysqlpassword()函数加密,

3表示md5加密

4表示sha1加密


配置字段说明

auth表示认证

account 验证账号密码正常使用

required 表示认证要通过

pam_mysql.so模块是默认的相对路径,是相对/lib64/security/

路径而言,也可以写绝对路径;后面为给此模块传递的参数

user=vsftpd为登录mysql的用户

passwd=vsftpdpass登录mysql的的密码

host=mysqlservermysql服务器的主机名或ip地址

db=vsftpd指定连接msyql的数据库名称

table=users 指定连接数据库中的表名

usercolumn=name 当做用户名的字段

passwdcolumn=password 当做用户名字段的密码

crypt=2 密码的加密方式为mysqlpassword()函数加密


2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录

useradd -s /sbin/nologin-d /var/ftprootvuser

chmod 555 /var/ftprootcentos7 需除去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_db1

setsebool -P ftp_home_dir1

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 pig pig2


3、配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。

如要让用户pig具有上传文件的权限,可修改/etc/vsftpd/vusers_config/pig

文件,在里面添加如下选项并设置为YES即可,只读则设为NO

注意:需确保对应的映射用户对于文件系统有写权限

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

local_root=/ftproot登录目录改变至指定的目录


总结

1. vsftpd配置虚拟用户时,pam模块文件写时模块不可错误,不然法验证并且无地查错

2. vsftpd配置虚拟用户验证自生成的密码库时,在pam认证调用该文件时不需要加后缀.db


猜你喜欢

转载自blog.51cto.com/winthcloud/2308960