#####################################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测试