FTP服务的简介
mysql
FTP是Internet上使用很是普遍的一种通讯协议,用于在不一样的主机之间进行文件传输。Linux系统下经常使用的FTP服务器软件包括有wu-ftpd;vsftpd(Very Secure ftp Daemon);proftpd;pureftpd等sql
客户端软件有:数据库
CLI:ftp;lftp;(wget ,lftpget)下载工具,非交互式centos
GUI: gftpd ;FlashFXP;Cuteftp;Filezilla服务器
FTP采用C/S的工做模式,经过TCP协议创建客户端和服务器之间的链接。但与其余大多数的应用协议不一样,FTP协议在客户端和服务器之间创建了两套通讯链路,分别是控制链路和数据链路;并发
FTP客户端与服务器之间的通讯过程ide
一、用户使用FTP协议的客户机程序,链接到远程的FTP服务器程序上模块化
二、用户使用客户端程序进行FTP文件的上传或下载,FTP客户端程序经过控制链路向FTP发送相应的控制命令工具
三、服务器程序接收并执行用户所发出的命令ui
四、FTP服务器将执行结果返回到客户端
FTP经过两组套接字通讯:控制莲姐套接字 21/TCP,数据链接套接字 20/TCP。可是传输数据又能够分为主动模式与被动模式,其数据传输端口有所不一样。
主动模式工做的原理:FTP客户端链接到FTP服务器的21端口,发送用户名和密码登陆,登陆成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送PORT命令到FTP服务器 ,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,经过服务器的20端口和客户端开放的端口链接,发送数据,原理以下图:
被动模式工做原理:FTP客户端链接到FTP服务器的21端口,发送用户名和密码登陆,登陆成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上 ),而后把开放的端口告诉客户端,客户端再链接到服务器开放的端口进行数据传输,原理以下图:
VSFTP服务器的安装和配置
vsftpd能够经过rpm包或者源码安装,经过rpm安装只需使用yum命令便可。
文件的组成:
/etc/vsftpd: 配置文件目录 /etc/rc.d/init.d/vsftpd: 服务脚本 /usr/sbin/vsftpd: 主程序 /var/ftp:数据文件目录(匿名用户访问目录) /etc/pam.d/vsftpd: 认证文件 pam(Plugable Authentication Module)插件式认证模块 模块化库文件:/lib64/security/pam*.so 认证配置文件:/etc/pam.conf和/etc/pam.d/* 基本配置:/etc/vsftpd/vsftpd.conf |
启动和关闭vsftpd
vsftpd支持两种启动方式:xinetd和standalone。其中,xinetd是经过xinetd进程来启动和关闭vsftpd服务,这是vsftpd默认启动方式。standalone方式则是采用独立进程启动和关闭,与普通程序的启动方式同样。
xinetd方式:
采用这种方式时,vsftpd不能单独管理,当vsftpd须要重启时,也必须重启整个xinetd服务器。不推荐这种方式
standalone方式:
# service vsftpd star
# service vsftpd stop
# service vsftpd restart
或者使用: # chkconfig vsftpd on 使得ftp服务自启动
vsftpd.conf配置文件
vsftpd服务器的配置主要经过其主配置文件/etc/vsftpd.conf来完成。该文件以'#'做为注释,每一个选项一行,格式为'选项=值'。
经常使用选项:
匿名用户的配置: anonymous_enable=YES登录权限 anon_upload_enable=YES上传权限 anon_other_write_enable=YES删除权限 anon_mkdir_write_enable=YES建立目录 启用写入功能时,ftp用户对相应的本地文件系统也有相应的写入权限;生效的权限取决于文件系统权限和服务权限的交集。 禁锢用户于其家目录中: chroot_local_user={Yes|No} chroot_list_enable={YES|NO} 只禁锢列表中的用户在家目录 chroot_list_file=/etc/vsftpd/chroot_list 禁锢用户列表 欢迎信息的定义: ftp_banner=some string 或者banner_file=/path/to/some_banner_file(文件中写欢迎信息) dirmessage_enable=yes(切换目录时,目录下的欢迎信息) 在ftp可访问的目录下建立.messages文件 控制登陆用户的机制: /etc/vsftpd/ftpusers中的用户都不容许使用ftp服务, 这是在/etc/pam.d/vsftpd中定义。 user_list配置文件有两种用法: 黑名单: userlist_enable=YES userlist_deny=YES 白名单: userlist_enable=YES userlist_deny=NO 链接限制: max_clients: 最大并发链接数 max_per_ip: 每IP可同时发起并发请求 传输速率: anon_max_rate: 匿名用户的最大传输速率,单位是“字节/秒”; local_max_rate: 本地用户的最大传输速率,单位是“字节/秒” 上传文件的umask: anno_umask: 匿名用户上传文件的umask; local_umask: 本地用户上传文件的umask; 修改匿名用户上传文件的属主和属组: chown_uploads=YES chown_username=someuser |
ftp用户:
匿名用户: anonymous_enable
系统用户:local_enable
虚拟用户:全部的虚拟用户会映射会一个系统用户,访问时的文件目录是为此系统用户的家目录。
用户的存放位置:
虚拟用户帐户在 : 文件,MySQL,Oracle,Redis,LDAP...
以文件存放虚拟用户的配置步骤:
1.建立用于保存虚拟用户文件,其中奇数行为用户名,偶数行为密码;
# touch VUSER_FILE
tom
123456
jerry
123123
2.将保存虚拟用户帐户的文本文件转换为数据库文件:
db_load -T -t hash -f /PATH/TO/VUSER_FILE /PATH/TO/USERDB.db
3.设定PAM的认证文件
/etc/pam.d/vusers.file
auth required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
account required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
4.建立一个用于映射虚拟用户身份的本地用户
useradd LOCAL_USER
5.修改此虚拟主机的配置文件:
anonymous_enable=NO
guest_enable=YES
guest_username=LOCAL_USER
pam_service_name=vusers.file
local_root=/myftp/ftpdata
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
若是想要对于全部的虚拟用户分别设定权限,能够使用:
在虚拟主机的主配置文件中添加指令:
user_config_dir=/PATH/TO/CONFIG_DIR
建立出这个目录,而且在目录下建立出与虚拟用户名相同的文件;
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/myftp/ftpdata/alice
anon_umask=022
基于MySQL存放虚拟用户
'centos',PASSWORD('qhdlink')
'suse',PASSWORD('link19')
1.编译安装pam的mysql驱动
下载地址:http://pam-mysql.sourceforge.net/
须要预先安装编译环境,即: Development Tools,Server Platform Development, pam-devel, mysql_devel
# tar xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/lib64/secutiry
# make -j 4 && make install
2.建立数据库,数据表,及受权用户;
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users (username char(20),password char(48));
mysql> insert into users values ('centos',PASSWORD('qhdlink')),('gentoo',PASSWORD('qhdlink'))
mysql> grant all on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'172.16.%.%' identified by 'vsftppass';
3.建立pam的认证文件:
/etc/pam.d/vusers.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
4.建立映射用户:
useradd mysqluser
5.修改此虚拟主机的配置文件:
anonymous_enable=NO
guest_enable=YES
guest_username=LOCAL_USER
pam_service_name=vusers.mysql
user_config_dir=/PATH/TO/MYSQL_USER_CONFIG