1.ftp

ftp说明:文件共享服务

启用RPC:RemoteProcedurecall远程过程调用

使用端口说明:

    命令连接,控制连接:21 

    数据连接:

         主动模式:20/tcp

         被动模式:端口随机


数据传输模式:

根据文件原本的数据格式


vsftpd:

/etc/vsftpd:配置文件目录

/etc/init.d/vsftpd:服务器脚本

/usr/sbin/vsftpd:运行程序


基于PAM实现用户认证:

/etc/pam.d/*

/lib/security/*

/lib64/security/*


chroot:

禁锢用户于其家目录中


系统用户:

write_enable=YES


文件服务权限:

文件系统权限and文件共享权限


安全通信方式:

ftps:ftp+ssl/tls

sftp:Openssh



配置文件说明:

/etc/vsftpd.conf

anonymous_enable=YES #是否允许匿名用户登录

local_enable=YES  #是否允许系统用户登录

write_enable=YES #允许本地用户有写权限

local_umask=022  #定义文件默认权限

anon_upload_enable=YES  #定义允许匿名用户上传

anon_mkdir_write_enable=YES  #允许匿名用户创建和删除权限

anon_other_write_enable=YES  #结合上面一起使用

dirmessage_enable=YES

#定义用户登录的欢迎语,在文件家目录下创建隐藏文件.message

xferlog_enable=YES  #开启文件传输日志

xferlog_file=/var/log/vsftp.log  #文件传输日志的文件路径

connect_from_port_20=YES

chown_uploads=YES

#文件上传后改变其属主信息,保证安全性,这样无法对文件进行其他操作

chown_username=whoever#文件上传后,改为的用户定义


xferlog_std_format=YES

#idle_session_timeout=600   #会话的超时时间,超过此时间则断开

#data_connection_timeout=120 #数据连接的超时时间

#ascii_upload_enable=YES   #是否开始纯文本传输格式,建议关闭。

#ascii_download_enable=YES  #是否开始纯文本下载格式,建议关闭。

#chroot_local_user=YES    #锁定用户家目录

#chroot_list_file=/etc/vsftpd/chroot_list

#锁定的用户在此定义,如果想所有用户只允许在在自己家目录,则注释这两行,开始下面的


chroot_list_enable=YES#锁定所有用户在自己家目录

listen=YES

#是否开启独立守护进程,如果不开启,则开始瞬时守护进程,定义在/etc/xinetd.d/下


pam_service_name=vsftpd#PAM认证文件名,在/etc/pam.d下

userlist_enable=YES

#定义在此文件中的用户无法登陆/etc/vsftpd/user_list

#如果user_list为空,则ftpusers生效

userlist_deny=YES

#定义user_list文件中用户无法登陆

userlist_deny=YES

#定义只允许user_list文件中的用户登录

tcp_wrappers=YES


max_clients#允许最多同时连接请求的客户端个数

max_per_ip#允许同一个ip同一时间最多的请求连接数



使用SSL

#mkdircertscrlnewcerts

#touchindex.txt

#echo01>serial

生成私钥

#(umask077;opensslgenrsa-outprivate/cakey.pem2048)

生成证书

#req-new-x509-keyprivate/cakey.pem-outcacert.pem-days

3650

生成vsftp私钥

#mkdir/etc/vsftpd/ssl

#(umask077;opensslgenrsa-outvsftpd.key2048)

生成vsftpd证书

#opensslreq-new-keyvsftpd.key-outvsftpd.csr

签署证书

#opensslca-invsftpd.csr-outvsftpd.crt


添加配置文件

#ssltls

ssl_enable=YES

ssl_sslv3=YES

ssl_tlsv1=YES

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt

rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key

重启服务,客户端选择SSL认证


vsftpd:(PAM)

系统用户

匿名

虚拟用户:

Mysql:vsftd,user:name,passwd

/etc/vsftpd/vusers:-->db_load

将文件转为二进程格式,db4-utils



vsftp+pam_mysql认证

1.首先安装好mysql及其他开发环境

2.安装pam_mysql

tar-xfpam_mysql-0.7RC1.tar.gz

cdpam_mysql-0.7RC1

./configure--with-mysql=/usr/local/mysql/--with-openssl

make&&makeinstall


3.安装vsftpd,(32系统可以使用系统yum安装,64位必须编译安装)

tar-xfvsftpd-3.0.2.tar.gz

cdvsftpd-3.0.2


编译前修改:

解决:libgcc_s.so.1mustbeinstalledforpthread_cancel

towork

videfs.h

将100UL改为400UL

#defineVSFTP_AS_LIMIT100UL*1024*1024

#defineVSFTP_AS_LIMIT400UL*1024*1024


解决:500OOPS:tcp_wrappersissettoYESbutnotcp

wrappersupportcompiledin

vimbuilddefs.h

将unfine改为define

#unfineVSF_BUILD_TCPWRAPPERS

#defineVSF_BUILD_TCPWRAPPERS

开始编译及安装

make

makeinstall


4.编译过程错误:

1./usr/bin/ld:cannotfind-lcap

yum-yinstalllibcaplibcap-devel(LCAP

是一种实现链路动态汇聚的协议主动模式、被动模式)

2.缺少目录

install:cannotcreateregularfile

`/usr/local/man/man8/vsftpd.8':Nosuchfileordirectory

install:cannotcreateregularfile

`/usr/local/man/man5/vsftpd.conf.5':Nosuchfileordirectory

创建目录即可


添加虚拟映射用户

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

chmodgo+rx/var/ftproot/


安装配置文件

cpvsftpd.conf/etc/

添加:

allow_writeable_chroot=YES

guest_enable=YES

guest_username=vuser#为刚才添加的映射用户

pam_service_name=vsftp.mysql#pam.d下名称


启动服务:

/usr/local/sbin/vsftpd&


5.配置数据库:

1.创建数据库

createdatabasevsftpd;

2.创建表

createtableusers(idintauto_incrementnotnull,

namechar(20)binarynotnull,passwdchar(48)binarynotnull,primary

key(id));

3.授权访问用户

granallonvsftpd.*tovsftpd@localhostidentifiedby

'ckl893';

flushprivileges;

4.添加访问用户

insertintousers(name,passwd)

value('ckl',password('ckl893'));

insertintousers(name,passwd)

value('mm',password('ckl893'));


配置认证文件

vi/etc/pam.d/vsftp.mysql

authrequired/lib64/security/pam_mysql.so

user=vsftpdpasswd=ckl893host=localhostdb=vsftpdtable=usersusercolumn=name

passwdcolumn=passwdcrypt=2

accountrequired/lib64/security/pam_mysql.so

user=vsftpdpasswd=ckl893host=localhostdb=vsftpdtable=usersusercolumn=name

passwdcolumn=passwdcrypt=2


crypt=0密码在mysql中是纯明文的

crypt=2密码在mysql中使用的是加密的


如果遇到错误查看日志

tailf/var/log/secure

PAMunabletodlopen(/lib64/security/pam_mysql.so):

libmysqlclient.so.18:cannotopensharedobjectfile:Nosuchfileor

directory

解决:

cp/usr/local/mysql/lib/libmysqlclient.so.18/lib64


***注意***

虚拟用户所能执行的权限全部是由匿名用户匹配,anon*

所有匿名用户都映射到同一个虚拟用户,所以所有的用户都是相同的权限

如何使不同的用户有不同的权限?

如,ckl没有下载权限,mm有下载及创建权限


1.创建配置文件目录,及文件,文件名同用户名

#mkdir/etc/vsftpd/vuser

#cd/etc/vsftpd/vuser/

#vickl

anon_upload_enable=NO

#vimm

anon_upload_enable=YES

anon_mkdir_write_enable=YES


vi/etc/vsftpd.conf

user_config_dir=/etc/vsftpd/vuser


重启服务器即可