File Transfer Protocol

#####################################mysql

FTP简介sql

vsftpd基本使用数据库

明文传输带来的安全隐患vim

安全通讯方式安全

vsftpd + PAM + mysql实现虚拟用户bash

#####################################
服务器

FTP简介
session

   文件传输服务位于应用层,监听21/tcp端口,数据传输模式为自适应,没有交叉编码能力Mine,遵循原文件自己格式,基于TCP协议实现,它有两个链接,命令链接和数据链接,它的工做模式有两种,主动模式和被动模式。app

主动模式tcp

被动模式


vsftpd基本使用

特性

   文件服务权限等于文件系统权限和文件共享权限的交集

   支持虚拟用户

       家目录在/var/ftp目录下,/目录被锁定为其家目录

   支持匿名用户

   支持系统用户

       家目录目录在/home/username目录下,/目录没有锁定,能够切换 lcd

   支持基于PAM实现用户认证

安装

yum install vsftpd
service vsftpd start
chkconfig vsftpd on
/etc/vsftpd                        配置文件
/etc/init.d/vsftpd                 服务脚本
/usr/sbin/vsftpd                   守护进程
/etc/pam.d/*                       配置文件
/lib/security                      认证模块
/var/ftp                           文件目录,不容许除root用户以外的其余用户具备写权限

经常使用选项

anonymous_enable=YES            启用匿名用户anonymous
local_enable=YES                启用系统用户
write_enable=YES                开启写入
anon_upload_enable=YES          开启上传
anon_mkdir_write_enable=YES     开启目录建立
anon_other_write_enable=YES     开启其余写权限,例如delete等……
dirmessage_enable=YES           开启目录进入欢迎提示
    vim /var/ftp/upload/.message      当用户切换到此目录时候会显示
xferlog_enable=YES             开启传输日志
xferlog_file=/var/log/vsftpd.log      定义传输日志存储位置和名称
#chown_uploads=YES              是否开启修改用户上传以后修改用户属主
#chown_username=whoever         修改成谁?
#idle_session_timeout=600       命令链接超时时间
#data_connection_timeout=120    数据链接超时时间
#ascii_upload_enable=YES        文本模式上传
#ascii_download_enable=YES      文本模式下载
chroot_list_enable=YES          禁锢用户至本身家目录
chroot_list_file=/etc/vsftpd/chroot_list经过用户列表禁锢那些用户
#chroot_local_user=YES          禁锢全部用户至本身家目录,须要注释上面两项
listen=YES                      vsftpd是否工做为一个独立守护进程类型;
        独立守护进程适合于 (访问量大,在线时间长的服务)
        瞬时守护进程 (访问量比较小,在线时间不长的服务)
pam_service_name=vsftpd         基于pam的认证
  /etc/vsftpd/ftpusers (文件中用户不能登陆,清空/etc/vsftpd/user_list后才真正由此文件控制)
userlist_enable=YES            文件的用户不容许登陆(/etc/vsftpd/user_list)
userlist_deny=NO               仅容许文件中的用户能够登陆(/etc/vsftpd/user_list)
tcp_wrappers=YES
max_clients                    最多容许几个IP访问
max_per_ip                     一个IP最多几个请求

举例:让匿名用户能够上传文件

anon_upload_enable=YES    开启
mkdir /var/ftp/upload
setfacl -m u:ftp:rwx /var/ftp/upload/
getfacl /var/ftp/upload/


明文传输带来的安全隐患

使用客户端链接FTP服务器

在服务器端使用tcpdum命令抓包

tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 192.168.1.30


安全通讯方式

ftps:ftp+ssl/tls

sftp:OpenSSH,SubSystem,sftp(SSH)

建立私有CA

cd /etc/pki/CA
mkdir certs newcerts crl
echo 01 > serial
(umask 077;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   生成证书颁发请求
openssl ca -in vsftpd.csr -out vsftpd.crt          签署证书

修改配置文件etc/vsftpd/vsftpd.conf支持ssl、tsl功能

# ssl or tls
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

客户端软件登录

本文中使用FlashFXP做为FTP客户端

点击链接

成功链接

在服务器端抓包发现是明文

tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 192.168.1.30



vsftpd + PAM + mysql实现虚拟用户

1、安装所须要程序

事先安装好开发环境和mysql数据库;

yum -y install mysql-server mysql-devel
yum -y groupinstall "Development Tools" "Development Libraries"

安装pam_mysql-0.7RC1

tar zxvf  pam_mysql-0.7RC1.tar.gz
cd  pam_mysql-0.7RC1
./configure --with-mysql=/usr --with-opensslrpm包的mysql
make
make install

安装vsftpd

yum -y install vsftpd

2、建立虚拟用户帐号

准备数据库及相关表首先请确保mysql服务已经正常启动。然后,按须要创建存储虚拟用户的数据库便可,这里将其建立为vsftpd数据库。

mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd';
mysql> flush privileges;
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)
    -> );

添加测试的虚拟,用户pam_mysql的password()函数与MySQL的password()函数可能会有所不一样。

insert into users (name,password) value ('bob','123'),('tom','321'),('lucy','333');

3、配置vsftpd

创建pam认证所需文件vi /etc/pam.d/vsftpd.mysql

auth required /usr/lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /usr/lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0

修改vsftpd的配置文件,使其适应mysql认证,创建虚拟用户映射的系统用户及对应的目录

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=YES
anon_mkdir_write_enable=NO
chroot_local_user=YES

修改成NO,验证不经过SSL

force_local_data_ssl=NO
force_local_logins_ssl=NO

然后添加如下选项

guest_enable=YES        启用来宾用户
guest_username=vuser    来宾用户为

并确保pam_service_name选项的值以下所示

pam_service_name=vsftpd.mysql

4、启动vsftpd服务并测试

启动服务

service vsftpd start
chkconfig vsftpd on            自动启动

查看端口开启状况

netstat -tnlp |grep :21

查看数据库

FTP客户端工具登陆验证pam是否生效

5、配置虚拟用户具备不一样的访问权限

为虚拟用户使用配置文件目录

vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir

建立所须要目录,并为虚拟用户提供配置文件

mkdir /etc/vsftpd/vusers_dir/
touch /etc/vsftpd/vusers_dir/bob /etc/vsftpd/vusers_dir/tom

配置虚拟用户的访问权限;全部虚拟用户的家目录为/var/ftproot;全部的虚拟用户映射到vuser中,而vuser属于匿名用户,所以虚拟用户的访问权限是经过匿名用户指令生效的。

bob能够上传、建立、删除

vim /etc/vsftpd/vusers_dir/bob
anon_upload_enable=YES      (配置文件中已经开启,这里不写也能够)
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

tom不能够上传

vim /etc/vsftpd/vusers_dir/tom
anon_upload_enable=NO

lucy能够上传

主配置文件中匿名上传已启用anon_upload_enable=YES,因此不须要作任何修改

bob测试

tom测试

lucy测试

相关文章
相关标签/搜索