FTP: file transfer protocl
端口:21/tcp
文件共享服务,工作在应用层,基于TCP协议,有2个连接。
1.控制连接,命令连接
是一直在线的
监听在TCP的21号端口
。
2.数据连接
按需打开,按需关闭。当需要数据的时候,客户端发起请求,才打开,传输完毕后关闭。
1.主动模式
服务器端TCP的20号端口主动连接客户端。
缺点:客户端如果有防火墙,无法连接客户端的端口。
例如:客户端用2001端口连接服务端的21端口:
服务端用20端口连接客户端2002端口,客户端依次使用空闲端口连接。
2.被动模式
服务器通过命令连接,通知客户端新打开一个端口。所以端口是随机的。
例如:服务端发送了一个类似于151|20报文,客户端就知道服务端开启的端口号为:151*256+20。
缺点:服务器端有防火墙,客户端就无法连接了。现在防火墙都有连接追踪机制,能够识别请求响应的
FTP服务器端软件:
vsftpd:very secure ftp daemon 非常安全地ftp软件。主要是安全性
proftpd:专业的,功能强大的ftp软件。
wu-ftpd:华盛顿大学研究的ftp软件。没有使用模块化设计。ftp的鼻祖。
pureftpd:
serv-u:win下常用的
filezilla:win和linux下都有 服务端和客户端。
FTP客户端软件:
CLI:文本模式,命令行模式。
ftp
lftp
GUI:图形界面。
gftpd
flashfxp
cuteftp
filezilla
vsftpd:
/etc/vsftpd: 配置文件目录
/etc/init.d/vsftpd:服务脚本
/usr/sbin/vsftpd: 主程序
支持虚拟用户。
基于PAM实现用户认证。
/var/ftp: 默认是ftp的根目录,除root外,其他用户没有写权限。上传的话可以新建子目录,子目录可以有写权限。
用户种类:最后都要映射为系统用户。
ftp账号访问的目录就是最终系统用户的家目录。账号的验证都得使用PAM来验证。
1.匿名用户 anonymous
2.系统用户 local_user
3.虚拟用户
1.mySQL: VSFTPD,users:Name,Password
通过mySQL的方式验证
2.使用本地文件方式,通过db_load,转为2进制格式。此方法需要db4-utils包的支持
#vim /etc/vsftpd/vusers
USERNAME
PASSWORD
#/etc/vsftpd/vusers --> db_load
手动配置PAM文件进行账号验证
使用mysql认证vsftpd账号
1.安装所需软件并进行配置
安装mysql:
#yum -y install mysql-server mysql-devel
安装开发工具包:
#yum -y groupinstall "Development Liberaries"
安装pam插件:
#tar zxvf pam_mysql-xxxxx.tar.gz
#cd pam_mysql-xxxx
#./configurae --with-mysql=/usr --with-openssl
#make
#make install
#cp /usr/lib/secruity/pam_mysql/so /lib/serurity/
把pam的模块复制到目的位置,一般情况下自动生成。
手动编译安装vsftpd:
#mkdir -pv /usr/share/empty /var ftp
#useradd -s /bin/false -d /var/ftp ftp
#tar zxvf vsftpd-xxxxx.tar.gz
#cd vsftpd-xxxx
#make
#make install
#cp vsftpd.conf /etc 把配置文件拷贝到/etc下。
#vim vsftpd.conf
listen=YES 添加选项
#chmod og-w /var/ftp 去掉写权限。
2.准备数据库和相关表格:
新建数据库
mysql>crate database vsftp;
mysql>gaint select on vsftp.* to vsftpd@localhost identified by '123456'
mysql>gaint select on vsftp.* to vsftpd@127.0.0.1 identified by '123456'
建立一个账号,用户名是vsftpd,密码是123456。
mysql>use vsftp;
mysql>crate table users(
->id int AUTO_INCREMETN NOT NULL,
->name char(20) binary NOT NULL,
->passwd char(48) binary NOT NULL,
->prmary key(id)
->);
mysql>insert into users(name,passwd) values('tom',password('123456'))
mysql>iinsert into users(name,passwd) values('jerry',password('123456'))
编辑pam认证所需文件:
#vim /etc/pam.d/vsftpd.mysql
auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftp table=users usercolumn=nane passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftp table=users usercolumn=nane passwdcolumn=passwd crypt=0
crpyt加密级别:
crypt=0 明文
crypt=1 md5
crypt=2 password()函数加密
但是pam的password函数和mysql的函数不一样,所以可能会出问题。
crypt=3 md5
crypt=4 sha1
修改vsftpd配置文件:
虚拟用户vsftp的权限是匿名用户相关的选项来决定的。因为虚拟用户的账号是映射到账号的。
#useradd -s /sbin/nologin -d /var/ftp2 vsftp 添加虚拟账户vsftp和对应的目录。
#chmod go=rx /var/ftp2
保证/etc/vsftpd.conf内已经启用以下的选项:
anonymou_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_enable+NO
chroot_local_user=YES
在在其中添加:
guest_enable=YES
guest_username=vsftp
listen=YES
pam_service_name=vsftp.mysql
实现虚拟用户有不同的权限:
虚拟用户账号为fedora:
#mkdir /etc/vsftpd/vuser_dir
#cd /etc/vsftpd/vuser_dir
#touch fedora
#vim fedora
anon_upload_enable=YES
anon_mkdir_enable=YES
编辑vsftpd.conf
#vim /etc/vsftpdconf
user_config_dir=/etc/vsftpd/vuser ,将配置文件的目录添加进去。
3.启动vsftpd服务
#/usr/local/sbin/vsftpd &
查看端口开启情况:
#netstat -tnlp |grep :21
使用虚拟用户登陆:
#
PAM 可插入式认证模块,由SUN研发
相当于框架,背后的认证机制非常多,所以可以定制。
/etc/pam.d/* 配置文件
/lib/security/* 认证模块
/lib64/security/* 认证模块
/var/vsftpd/vsftpd.conf
anonymous_enable= 匿名用户
local_enable= 系统用户
write_eanble= 上传文件
chroot= 禁锢用户于其家目录中
anon_upload_enable= 匿名用户上传文件
anon_mkdir_write_enable=
anon_other_write_eanble=
dirmessage_enable= 显示欢迎信息,信息具体内容在文件夹下的.message文件内。
xferlog_enable= 传输日志
xferlog_file= 指定传输日志文件位置
xferlog_std_format= 使用标准记录格式
chown_uploads= 是否更改上传文件的属主和属组信息
chown_username= 要修改成的属主属组信息
idle_session_timeout= 用户会话超时时间
data_connection_timeout= 传输链接超时时间
ascii_upload_enable= 使用文本模式上传
ascii_upload_enable= 使用文本模式下载
chroot_list_enable= 是否启用chroot清单文件
chroot_list_file= chroot清单文件
chroot_local_user= 强制禁锢所有用户
listen= vsftpd工作为独立的守护进程
想配置为瞬时进程,只要在/etc/xinetd.d/ 目录下提供一个脚本即可。
pam_service_name=vsftpd /etc/pam.d/ 目录下文件的名字。
userlist_enable= 是否启用user_list文件。默认在文件内的用户不能登陆。
/etc/vsftpd/user_list,文件中的用户禁止登陆系统
在/etc/vsftpd/ftpusers内所有的用户禁止访问,此文件的名称是由/etc/pam.d/vsftpd内内容来决定的。
一般情况下是优先user_list,后ftpusers。
userlist_deny= yes表示user_list内用户禁止登陆,no表示仅允许user_list内用户才能登陆。既黑白名单。
max_clients= 定义最大客户端访问数量
max_per_ip= 定义每个ip发起请求的数量
ftp安全通信方式:
1.ftps:ftp+ssl/tls
在配置文件中添加一下条目
/etc/vsftpd/vsftpd.conf
ssl_enable=yes 启用ssl
ssl_tlsv1=yes 版本支持
ssl_sslv2=yes
ssl_sslv3=yes
allow_anon_ssl=no 强制非匿名用户使用ssl登陆
force_local_date_ssl=yes 本地用户传输使用ssl
force_local_logins_ssl=yes
本地用户登陆使用ssl
rsa_cert_file=/etc/vsftpd/ssl/vsftpd_cert.pem 证书文件
ras_private_key_file=/etc/vsftpd/ssl/vsftpd_key.pem 秘钥文件
2.sftp:openssh,subsystem 基于ssh实现传输安全。
使用脚本创建证书:
#cd /etc/pki/CA
#mkdir certs necerts crl
#touch index.txt
#echo 01 >serial
#(umask 0777;openssl genrsa -out private/cakey.pem 2048>)
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
#mkdir /etc/vsftpd/ssl
#cd /etc/vsftpd/ssl
#(umask 077;openssl genrsa -out- vsftpd.key 2048;)
#openssl req -new -key vsftpd.key -out vsftpd.csr
#vim /etc/pki/tls/openssl.cnf
dir =../../CA 改为 /etc/pki/CA
#openssl ca -in visftpd.csr -out vsftpd.crt
#openssl
守护进程
独立守护 访问量大 ,在线时间长。
瞬时守护 访问量小,在线时间断。都是由xinetd代为管理。
#setfacl
FTP数据传输模式:
数据储存传输2种模式,2进制和文本。
ftp使用自动协商模式来传输。
互联网上的数据结构:
1.结构化数据
2.半结构化数据
3.非结构化数据
RPC:remote procedure call 远程过程调用
NFS,也是依赖于RPC机制
基于RPC机制共享:依赖于2进制格式来实现数据共享通信。
samba:基于CIFS/SMB机制,跨平台文件共享。
常用的命令:
#ftp HOSTNAME/IPADDRESS
#ftp [OPTION]
ls 列出远程机的当前目录
cd 在远程机上改变工作目录
lcd 在本地机上改变工作目录
ascii 设置文件传输方式为ASCII模式
binary 设置文件传输方式为二进制模式
close 中断当前的ftp会话
disconnect 中断当前的ftp会话,关闭远程连接,但是不退出ftp程序
bye 退出会话过程,关闭远程连接,然后退出ftp程序
hash 每次传输完数据缓冲区中的数据后就显示一个#号
get(mget) 从远程机传送指定文件到本地机
put(mput) 从本地机传送指定文件到远程机
open 连接远程ftp站点
断开与远程机的连接并退出ftp
? 显示本地帮助信息
! 转到Shell中