创建FTP服务器之详解
FTP(File Transfer Protocol)协议能够使用户不需要了解远程主机操作系统的操作方法,就可以直接完成主机之间可靠的文件传输,
FTP工作原理:FTP服务也是基于客户端/服务器(C/S)模式的,客户端通过支持FTP协议的程序连接到主机上的FTP服务器,用户通过客户端程序向服务器程序发出命令,服务器程序执行用户发出的命令,然后将执行结果返回给客户端。
FTP有两个链接:控制连接、数据链接,所以说FTP协议也需要两个端口
命令链接:21/tcp,用于发送指令给服务器以及等待服务器响应。
数据连接:主动模式:20/tcp,用于建立数据传输通道,实现客户端从 服务器获得文件,以及两者之间相互通信的过程
被动模式:端口随机
传输模式:二进制、文本如:ftp server --> ftp client
数据还分为三种:1、机构化数据 2、半结构化数据 3、非结构化数据
FTP服务器的安装
1、先下载yum配置文件并且保存在/etc/yum.repos.d/server.repo下
2、安装vsftpd软件包,yum install vsftpd
这样一个简单的服务器就建成了
3、检查一下vsftpd是否安装成功,并重启一下,设定为开机启动
4、编译vsftpd.conf的配置文件
anonymous_enable=YES //是否开启匿名用户访问
anonymous_enable=YES //是否开启本地用户既系统用户访问
write_enable=YES //是否开启本地用户的写权限:上传文件的权限
local_umask=022 //系统用户上传文件时候的umask默认值
anon_upload_enable=YES //是否开启虚拟用户上传文件的权限
anon_mkdir_write_enable=YES //是否开启虚拟用户新建文件件的权限
chown_uploads=YES //是否开启上传文件的属主修改
chown_username=whoever //上传文件后所属主
xferlog_file=/var/log/xferlog
xferlog_std_format=YES //日志记录,需要开启上面两项才可以生效
idle_session_timeout=600 //连接超时时间
data_connection_timeout=120 //数据传输超时时间
ascii_upload_enable=YES
ascii_download_enable=YES //是否开启ascii码的上传、下载
chroot_list_enable=YES //是否锁定用户登录后的目录,配置文件在/etc/vsftpd/chroot_list,表内定义了锁定的用户列表
chroot_list_file=/etc/vsftpd/chroot_list //用户登录以后把用户锁在那个目录下的定义
listen=YES //设置ftp服务是否为独立进程
pam_service_name=vsftpd //pam认证服务名称
userlist_enable=YES // 用户列表限定
用法(定义黑白名单)
定义黑名单:userlist_enable=YES 、userlist_deny=YES
定义白名单:userlist_enable=YES、userlist_deny=NO
max_clients = // 单个IP最多发起几个请求的max_per_ip = //最多允许几个IP链接FTP服务器
另外的两个vsftpd的配置文件:
/etc/vsftpd/ftpusers------------内规定的用户都禁止登陆ftp服务
/etc/vsftpd/user_list-----------规定了不能登陆ftp服务器的用户
5、设置环境,关闭防火墙:iptables -L -n ,关闭seinux:setenforce 0
6、我们已经确保了selinux是关闭的,就可以进行测试了
setenforce 0 关闭
vim /etc/selinux/config 永久关闭
创建用户hadoop,密码也设为hadoop,进行测试是否能上传成功
我们在尝试一下匿名能不能成功
从实验来看匿名登录是不成功的
所以我们要编译一下vsftpd.conf,打开匿名登录权限:anon_uoload_enable=YES
编译完之后要重启一下服务器
7、匿名登陆之后我们还要,打开创建目录选项,禁锢家目录
anon_upload_enable=YES //是否开启虚拟用户上传文件的权限
anon_mkdir_write_enable=YES //是否开启虚拟用户新建文件件的权限
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list--这两个配置可以直接被下面一句话所替代:chroot_local_user=YES,这样就可以限制所有的用户登录以后只能停留在自己的家目录里了
8、由于FTP服务的传输都是明文的,在网络上非常不安全,我们可以利用openssh来对ftp服务的传输进行加密,既是sftp服务。
①、建立CA、自签证书、
先生成CA和CA的自签证书
cd /etc/pki/CA
mkdir certs newcerts crl
touch index.txt
echo 01 > serial
创建CA的私钥
(umask 007;openssl genrsa –out priviate/cakey.pem 2048);
生成自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
②、为vsftp服务进行CA认证
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
修改CA目录,修改的话必须在特定的目录下才能签署证书
vim /etc/pki/tls/openssl.cnf
签署证书
openssl ca -in vsftpd.csr -out vsftpd.crt
③、然后配置使用加密的认证方式
vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES //开启ssl功能
ssl_tlsv1=YES //开启支持tlsv1
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=NO //是否开启匿名用户利用ssl
force_local_data_ssl=YES //开启系统用户数据传输利用ssl
force_local_logins_ssl=YES //开启系统用户登录利用ssl
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt //指定证书位置
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key //指定私钥位置
④重启服务、验证
用软件进行连接测试
我们的ftp服务器就建成功了。
9、vsftpd+pam+mysql,实现虚拟用户
环境必须安装相应的开发环境和开发库:Development Libraries和Development Tools
下面用到的软件安装方式采用yum安装,可以自动解决软件的依赖关系,由于实验是在在虚拟机上,所以采用DVD盘作为yum池,配置为下
mount /dev/cdrom /media
/etc/yum.repos.d/server.repo配置如下
# repos on instructor for cla***oom use
# Main rhel5 server
[base]
name=Instructor Server Repository
baseurl=file:///media/Server
gpgcheck=0
# This one is needed for xen packages
[VT]
name=Instructor VT Repository
baseurl=file:///media/VT
gpgcheck=0
# This one is needed for clustering packages
[Cluster]
name=Instructor Cluster Repository
baseurl=file:///media/Cluster
gpgcheck=0
# This one is needed for cluster storage (GFS, iSCSI target, etc...) packages
[ClusterStorage]
name=Instructor ClusterStorage Repository
baseurl=file:///media/ClusterStorage
gpgcheck=0
①、安装数据库和开发环境
检查开发库和开发工具是否安装
yum -y install mysql-server mysql-devel //安装数据库服务器软件和devel,devel包是为了后面编译pam的时候必须的软件包。不安装的话就无法实现其功能了。
启动mysql服务器,然后测试,保证mysql服务器运行正常,service mysqld start,mysql连接进入查看,如下图
②、手动编译、安装mysql基于pam的认证的驱动文件pam_mysql-0.7RC1.tar.gz。
tar xf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-mysql=/usr //—with-mysql=指定mysql库所在的位置
make
make install
③、进入数据库准备所需的数据库和表等
mysql //进入数据库
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users(
-> id int AUTO_INCREMENT NOT NULL,
-> name char(20) binary NOT NULL,
-> password char(48) binary NOT NULL,
-> primary key(id)
-> );
、配置vsftpd
建立pam认证所需的文件
vi /etc/pam.d/vsftpd.mysql--这个文件默认是不存在的,需要新建
添加如下两行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=work host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=work host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
建立虚拟用户映射的系统用户及对应的目录
#useradd -s /sbin/nologin -d /var/ftproot vuser //新建虚拟用户
#chmod go+rx /var/ftproot //为其他用户增加读和执行权限。
请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES //是否允许来宾账户访问
guest_username=vuser //来宾账户访问映射为那个用户
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
然后配置完后重启服务器
service vsftpd restart
测试登录
这样虚拟主机虚拟用户就实现成功了