科技小能手 2017-11-12 961浏览量
#####################################
FTP简介
vsftpd基本使用
明文传输带来的安全隐患
安全通信方式
vsftpd + PAM + mysql实现虚拟用户
#####################################
FTP简介
文件传输服务位于应用层,监听21/tcp端口,数据传输模式为自适应,没有交叉编码能力Mine,遵循原文件本身格式,基于TCP协议实现,它有两个连接,命令连接和数据连接,它的工作模式有两种,主动模式和被动模式。
主动模式
被动模式
vsftpd基本使用
特性
文件服务权限等于文件系统权限和文件共享权限的交集
支持虚拟用户
家目录在/var/ftp目录下,/目录被锁定为其家目录
支持匿名用户
支持系统用户
家目录目录在/home/username目录下,/目录没有锁定,可以切换 lcd
支持基于PAM实现用户认证
安装
1
2
3
4
5
6
7
8
9
|
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用户之外的其他用户具有写权限
|
常用选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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最多几个请求 |
举例:让匿名用户可以上传文件
1
2
3
4
|
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
1
2
3
4
5
|
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生成自签证书
|
生成证书颁发请求并签署
1
2
3
4
5
|
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功能
1
2
3
4
5
6
7
8
9
|
# 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实现虚拟用户
一、安装所需要程序
事先安装好开发环境和mysql数据库;
1
2
|
yum -y install mysql-server mysql-devel
yum -y groupinstall "Development Tools" "Development Libraries"
|
安装pam_mysql-0.7RC1
1
2
3
4
5
|
tar zxvf pam_mysql-0.7RC1. tar .gz
cd pam_mysql-0.7RC1
. /configure --with-mysql= /usr --with-opensslrpm包的mysql
make make install
|
安装vsftpd
1
|
yum -y install vsftpd
|
二、创建虚拟用户账号
准备数据库及相关表,首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。
1
2
3
4
5
6
7
8
9
10
11
|
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()函数可能会有所不同。
1
|
insert into users (name,password) value ( 'bob' , '123' ),( 'tom' , '321' ),( 'lucy' , '333' );
|
三、配置vsftpd
建立pam认证所需文件vi /etc/pam.d/vsftpd.mysql
1
2
|
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认证,建立虚拟用户映射的系统用户及对应的目录
1
2
|
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod go+rx /var/ftproot
|
请确保/etc/vsftpd.conf中已经启用了以下选项
1
2
3
4
5
6
|
anonymous_enable=YES local_enable=YES write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=NO chroot_local_user=YES |
修改为NO,验证不通过SSL
1
2
|
force_local_data_ssl=NO force_local_logins_ssl=NO |
而后添加以下选项
1
2
|
guest_enable=YES 启用来宾用户 guest_username=vuser 来宾用户为 |
并确保pam_service_name选项的值如下所示
1
|
pam_service_name=vsftpd.mysql |
四、启动vsftpd服务并测试
启动服务
1
2
|
service vsftpd start chkconfig vsftpd on 自动启动 |
查看端口开启情况
1
|
netstat -tnlp | grep :21
|
查看数据库
FTP客户端工具登录验证pam是否生效
五、配置虚拟用户具有不同的访问权限
为虚拟用户使用配置文件目录
1
2
|
vim /etc/vsftpd/vsftpd .conf
user_config_dir= /etc/vsftpd/vusers_dir
|
创建所需要目录,并为虚拟用户提供配置文件
1
2
|
mkdir /etc/vsftpd/vusers_dir/
touch /etc/vsftpd/vusers_dir/bob /etc/vsftpd/vusers_dir/tom
|
配置虚拟用户的访问权限;所有虚拟用户的家目录为/var/ftproot;所有的虚拟用户映射到vuser中,而vuser属于匿名用户,因此虚拟用户的访问权限是通过匿名用户指令生效的。
bob可以上传、创建、删除
1
2
3
4
|
vim /etc/vsftpd/vusers_dir/bob
anon_upload_enable=YES (配置文件中已经开启,这里不写也可以) anon_mkdir_write_enable=YES anon_other_write_enable=YES |
tom不可以上传
1
2
|
vim /etc/vsftpd/vusers_dir/tom
anon_upload_enable=NO |
lucy可以上传
1
|
主配置文件中匿名上传已启用anon_upload_enable=YES,所以不需要做任何修改 |
bob测试
tom测试
lucy测试
本文转自 ftmoonfans 51CTO博客,原文链接:http://blog.51cto.com/soulboy/1290981
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
分享数据库前沿,解构实战干货,推动数据库技术变革