linux-vsftp 虚拟用户

首先简单介绍下基本原理:

vsftp的用户有三种类型,分别是匿名用户、系统用户、虚拟用户
某种意义上来说,匿名用户也是系统用户,只系统用户的一个映射。而公开的ftp(比如虚拟主机),都不会使用系统用户作为ftp的帐号,而更多的采用了虚拟用户,这样能保证系统的安全性
使用虚拟帐号,也就需要一个存放虚拟帐号的容器,可以是一个文本列表,也可以是活动目录,而更多的是使用数据库来存放
在vsftp中,无论系统用户还是虚拟用户,都是使用pam作为用户验证手段的,而在pam中默认是不支持mysql模块的,所以要手动编译安装mysql模块
整体思路是这样的:

以pam为用户认证的中间层调用和验证mysql中的虚拟用户数据。在vsftp中开启虚拟用户认证,认证方法调用pam中的mysql认证和授权模块,将虚拟用户存放于mysql中。

#实验环境
#[root@rhel6 vsftpd]# uname -a
Linux rhel6.6 3.8.13-44.1.1.el6uek.x86_64 

1、是否安装ftp
[root@rhel6 ~]# rpm -qa|grep ftp

2、安装vsftp 和 mysql
[root@rhel6 ~]# yum install ftp vsftpd mysql-server mysql-devel pam-devel

3、在PAM中默认是没有mysql认证模块的,所以要下载源码自己手动安装
[root@localhost ~]# tar -xf pam_mysql-0.7RC1.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/pam_mysql-0.7RC1
[root@localhost pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/bin/mysql_config
[root@localhost pam_mysql-0.7RC1]# make && make install

4、创建虚拟用户对应的系统用户

useradd  -d /home/infra -s /sbin/nologin infra
chown infra:infra /home/infra
chmod 700 /home/infra

5、创建vsftp的数据库
[root@localhost ~]# service mysqld start
[root@localhost ~]# mysql -uroot -p

CREATE DATABASE vsftpd;

然后创建一个用户表
mysql> use vsftpd
mysql> create table users (
id int AUTO_INCREMENT NOT NULL,
name char(20) NOT NULL UNIQUE KEY,
passwd char(48) NOT NULL,
primary key(id)
);
  
insert into users(name,passwd) values ('user1','user1');
insert into users(name,passwd) values ('user2','user2');

然后创建vsftpd的数据库账户,为了安全,只授予查询权限

mysql> GRANT select on vsftpd.* to infra@localhost identified by '123456';
mysql> GRANT select on vsftpd.* to infra@127.0.0.1 identified by '123456';

6、编辑vsftp配置文件,参考我的配置

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 

6、修改vsftp主配置文件:采用虚拟用户形式
[root@rhel6 ~]#  cat /etc/vsftpd/vsftpd.conf | grep ^[^#]
anonymous_enable=NO
local_enable=YES
write_enable=YES
download_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
pasv_enable=NO
xferlog_file=/var/log/xferlog
vsftpd_log_file=/var/log/vsftpd.log
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
listen=YES
pam_service_name=vsftpd.infra
guest_enable=YES
guest_username=infra
user_config_dir=/etc/vsftpd/userconfig
userlist_enable=YES
tcp_wrappers=YES
virtual_use_local_privs=YES

#说明
pam_service_name=vsftpd.infra
#虚拟认证方式

guest_enable= YES/NO(NO)
启用虚拟用户。默认值为NO

guest_username=infra
这里用来映射虚拟用户。默认值为ftp

user_config_dir=/etc/vsftpd/userconfig
#配置每个用户配置文件的目录

virtual_use_local_privs=YES/NO(NO)
当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。

7、建立pam认证文件
vi /etc/pam.d/vsftpd.infra

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

8、虚拟用户目录设置
cd /etc/vsftpd/
mkdir userconfig
为每个用户写入相关配置:
vi userconfig/user1
写入
local_root=/var/ftp/user1 #指定用户的登陆目录

vi userconfig/user2
写入
local_root=/var/ftp/user2

创建用户的登陆目录
mkdir -p /var/ftp/user1
mkdir -p /var/ftp/user2
chown -R infra:infra /var/ftp

启动vsftp
service vsftpd start

9、iptables 设置ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT 
iptables -A INPUT -p tcp --dport 20 -j ACCEPT 

service iptables save

[root@rhel6 ~]# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  10.120.249.144       10.120.249.144      
ACCEPT     all  --  127.0.0.1            127.0.0.1           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:1521 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

#说明
设置ftp方式为主动方式
connect_from_port_20=YES
pasv_enable=NO

#主动方式过程
1、s端需要开启20\21端口
2、c端一个随机端口连接s端21,随机端口范围(1024-65536)c(x)->s(21)
3、s端收到命令后,返回一个ack,s(21)->c(x)
4、s端用自己的20端口与c端x+1端口连接,s(20)->c(x+1)
5、c端给s端返回act,c(x+1)->s(20)

10、测试登录
[root@rhel6 vsftpd]# ftp 10.120.249.144
Connected to 10.120.249.144 (10.120.249.144).
220 (vsFTPd 2.2.2)
Name (10.120.249.144:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,120,249,144,225,6).
150 Here comes the directory listing.
-rw-r--r--    1 501      502          1036 Nov 18 22:56 linux 加swap.txt
drwxr-xr-x    2 501      502          4096 Nov 18 22:56 创建目录
226 Directory send OK.
ftp> 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22193071/viewspace-1339197/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22193071/viewspace-1339197/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值