注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

过于理智的傻瓜

这是结束 也是开始

 
 
 

日志

 
 

vsftpd架设匿名FTP,本地用户和虚拟用户mysql登录  

2009-11-21 13:02:15|  分类: vsftpd |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本文对本地用户、虚拟用户目录进行了限制,每个用户拥有自己独立的目录。

本文中所使用的参数具体意义请参数回贴。

配置不外就是修改vsftpc.conf,并指定用户目录,权限等。

对虚拟用户则用pam验证方式。

另:mkdir建立目录,chown更改权限。vi编辑文件。这些命令请参考man文档

vsftpd类别:

1、PORT FTP

首先会建立控制频道,默认值是port 21,也就是跟port 21 建立联机,并透过此联机下达指令。

第二,由FTP server 端会建立数据传输频道,默认值为20,也就是跟port 20 建立联机,并透过port 20 作数

据的传输。

2、PASVFTP

首先会建立控制频道,默认值是port 21,也就是跟port 21 联机,并透过此联机下达指令。

第二,会由client 端做出数据传输的请求,包括数据传输port 的数字。

3、差别:

PORT FTP 当中的数据传输port 是由FTP server 指定,

而PASV FTP 的数据传输port 是由FTP client 决定。

通常我们使用PASV FTP,是在有防火墙的环境之下,透过client 与server 的沟通,决定数据传输的port。

vsftpd安装篇:

1、rpm安装:

代码:
[root@Linux_win vsftpd]#rpm -ivh vsftpd-1.1.3-8.i386.rpm

2、tar.gz的安装

解压后查看README和INSTALL文档

安装前的条件:

进入vsftpd目录

编辑 "builddefs.h"文件,里面定义了pam功能,tcp_wrappers功能,ssl功能,根据需要定义pam或tcpwrapper功能,以消ssl功能

然后键入 "make" .将编译出相应的二进制文件,你可以用以下命令查看

[chris@localhost vsftpd]$ ls -l vsftpd

-rwxrwxr-x 1 root root 61748 Sep 27 00:26 vsftpd

a、增加“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。

代码:
[root@Linux_win vsftpd]# useradd nobody

useradd: user nobody exists

b、建立“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。

代码:
[root@hpe45 root]# mkdir /usr/share/empty/

mkdir: cannot create directory '/usr/share/empty': File exists

c、匿名服务帐号:“ftp”用户和一个有效的匿名目录(默认为/var/ftp)。

代码:
[root@Linux_win vsftpd]# mkdir /var/ftp/

[root@Linux_win vsftpd]# useradd -d /var/ftp ftp

d、更改目录的所有者为root,并让ftp用户对自己的主目录不可写

代码:
[root@Linux_win vsftpd]# chown root.root /var/ftp

[root@Linux_win vsftpd]# chmod og-w /var/ftp

编译VSFTPD

代码:
[root@Linux_win vsftpd]# tar zxvf vsftpd-1.2.0.tar.gz

[root@Linux_win vsftpd]# cd vsftpd-1.2.0

[root@Linux_win vsftpd]# make

安装编译好的VSFTPD

执行“make,make install”将编译好的二进制文件、手册等复制到相应目录。可能需要手动执行以下复制:

代码:
[root@Linux_win vsftpd]# cp vsftpd /usr/local/sbin/vsftpd

[root@Linux_win vsftpd]# cp vsftpd.conf.5 /usr/local/share/man/man5

[root@Linux_win vsftpd]# cp vsftpd.8 /usr/local/share/man/man8

如果不存在man5和man8目录,要先建立这两个目录

代码:
[root@Linux_win vsftpd]#mkdir /usr/local/share/man/man5

[root@Linux_win vsftpd]#mkdir /usr/local/share/man/man8

make不会自己copy配置文件,如果make install有错,则必须手工更改

[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc

为本地用户设置PAM

如果允许本地用户登录VSFTPD,执行以下操作:

代码:
[root@Linux_win vsftpd]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd

3、pam_mysql安装

如果使用mysql的二进制包,那么必须加个开始包,且要修改Makefile文件,指定mysql的lib位置。

代码:
[root@Linux_win vsftpd]# tar xvzf pam_mysql-0.5.tar.gz

[root@Linux_win vsftpd]# cd pam_mysql

[root@Linux_win vsftpd]# make

[root@Linux_win vsftpd]# cp pam_mysql.so /lib/security

4、mysql安装。请查看其它文档

vsftpd启动篇

vsftpd 有两种运行方式,一种是standalone 一种是 via an inetd (或者 inetd or xinetd).

1、如何启动

1)系统自带的

代码:
[root@Linux_win software]# service vsftpd restart

2)源包安装:

[root@Linux_win software]# /安装路径/vsftpd &

代码:
[root@Linux_win vsftpd]# /sbin/service xinetd restart  

或 

[root@Linux_win vsftpd]# /usr/local/sbin/vsftpd &

2、standlone启动

具体的运行方式由参数listen决定。当listen参数值为YES时,VSFTPD单独运行,我们可以使用脚本/etc/rc.d/init.d/vsftpd来启动、关闭以及重启VSFTPD。命令如下:

  

代码:
/etc/rc.d/init.d/vsftpd start|stop|restart

3、xinetd启动,首先要将vsftpd.conf配置文件中的listen参数值改为NO。

其次,生成一个/etc/xinetd.d/vsftpd文件

代码:
[root@Linux_win vsftpd]#vi /etc/vsftpd/vsftpd.conf或vi /etc/vsftp.conf

listen=NO

代码:
[root@Linux_win vsftpd]vi /etc/xinetd.d/vsftpd

内容如下:

service vsftpd

{

disable = no

socket_type = stream

wait = no

user = root

server = /usr/sbin/vsftpd

port = 21

log_on_success += PID HOST DURATION

log_on_failure += HOST

}

通过修改disable值为no或yes,并重新启动xinetd,从而启动或停止VSFTPD。

配置安全匿名服务器

所要做的就是用vi修改vsftpd.conf文件

代码:
[root@Linux_win vsftpd]#vi /etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf

修改后的vsftpd.conf文件看附件:

引用:
#使用单独模式,并指定监听的IP地址

listen_address=ip address

#只允许匿名访问,不允许本地用户访问

anonymous_enable=YES

local_enable=NO

#取消写权限

write_enable=NO

anon_upload_enable=NO

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

#启用详细的日志记录格式,设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。

xferlog_enable=YES

xferlog_file=/var/log/vsftp.log

#对连接进行控制,还有超时时间,那就根据具体情况再说了。

connect_from_port_20=YES

pasv_min_port=50000

pasv_max_port=60000

#控制FTP最大并发数,限定每个IP地址的并发数。

max_clients=numerical value

max_per_ip=numerical value

#限定下载速度

anon_max_rate=80000

#使用ftpd_banner取代VSFTPD默认的欢迎词,免得泄漏相关信息

ftpd_banner=Welcome to this FTP Server

#只让匿名用户浏览可阅读的文件,不可以浏览整个系统

anon_world_readable_only=YES

#隐藏文件的所有者和组信息,匿名用户看到的文件的所有者和组全变为ftp

hide_ids=YES

代码:
附:vsftpd.conf

[root@Linux_win vsftpd]# cat vsftpd.conf

listen=YES

listen_address=192.168.1.2

anonymous_enable=YES

local_enable=NO

write_enable=NO

anon_root=/home

anon_upload_enable=NO

anon_other_write_enable=NO

anon_mkdir_write_enable=NO

anon_world_readable_only=YES

#dirmessage_enable=YES

ftpd_banner=welcome to this FTP server

xferlog_enable=YES

#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES

#pasv_mix_port=50000

#pasv_max_port=60000

#xferlog_std_format=YES

max_clients=10

max_per_ip=10

hide_ids=YES

#chroot_list_enable=YES

#chroot_list_file=/etc/vsftpd/chroot_list

#chroot_local_user=NO

#pam_service_name=/etc/pam.d/vsftpd

#guest_enable=YES

#guest_username=vsftpdvirtual

#virtual_use_local_privs=NO

#user_config_dir=/etc/vsftpd/vsftpd_user_conf

配置可上传匿名服务器

[root@Linux_win vsftpd]#vi /etc/vsftpd/vsftpd.conf

修改文件,改后如下

代码:
[root@Linux_win ftp]# cat /etc/vsftpd/vsftpd.conf

listen=YES

listen_address=192.168.1.2

anonymous_enable=YES

local_enable=NO

write_enable=YES

#anon_root=

anon_upload_enable=YES

anon_other_write_enable=YES

anon_mkdir_write_enable=YES

#anon_world_readable_only=YES

#dirmessage_enable=YES

ftpd_banner=welcome to this FTP server

xferlog_enable=YES

#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES

#pasv_mix_port=50000

#pasv_max_port=60000

#xferlog_std_format=YES

max_clients=10

max_per_ip=10

hide_ids=YES

#chroot_list_enable=YES

#chroot_list_file=/etc/vsftpd/chroot_list

#chroot_local_user=NO

#pam_service_name=/etc/pam.d/vsftpd

#guest_enable=YES

#guest_username=vsftpdvirtual

#virtual_use_local_privs=NO

#user_config_dir=/etc/vsftpd/vsftpd_user_conf

代码:
[root@Linux_win ftp]# mkidr /var/ftp/upload

[root@Linux_win ftp]# chmod o+w /var/ftp/upload

anon_root参数指定的目录或默认的/var/ftp主目录,ftp匿名用户不可有写权限,否则会出错。

办法是在/var/ftp下建立一个新目录,使得该目录对ftp匿名用户可写。才能上传。

或不用匿名上传,而使用本地用户或虚拟用户 。

配置本地用户

修改vsftpd.conf

代码:

[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd.conf

listen=YES

listen_address=192.168.1.2

anonymous_enable=NO

local_enable=YES

#local_root=

write_enable=YES

#anon_root=

#anon_upload_enable=YES

#anon_other_write_enable=YES

#anon_mkdir_write_enable=YES

#anon_world_readable_only=YES

#anon_umask=777

#dirmessage_enable=YES

ftpd_banner=welcome to this FTP server

xferlog_enable=YES

#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES

#pasv_mix_port=50000

#pasv_max_port=60000

#xferlog_std_format=YES

max_clients=10

max_per_ip=10

hide_ids=YES

#limit all users in it's owner dir

#chroot_local_user=YES

#or limit some

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

#use ownwer conf file

user_config_dir=/etc/vsftpd/vsftpd_user_conf

pam_service_name=/etc/pam.d/vsftpd

#guest_enable=YES

#guest_username=vsftpdvirtual

#virtual_use_local_privs=NO

由于上面了用户列表,因此须建立chroot_list文件,

代码:
[root@Linux_win vsftpd]# touch /etc/vsftpd/chroot_list

并加入以下内容,查看chroot_list文件内容,结果如下

代码:
[root@Linux_win vsftpd]# cat /etc/vsftpd/chroot_list

sam

gem

配置文件中指定了用户配置文件,因此建立此文件

代码:
[root@Linux_win vsftpd]# mkdir /etc/vsftpd/vsftpd_user_conf

并根据用户名建立文件

代码:
[root@Linux_win vsftpd]# touch sam

[root@Linux_win vsftpd]# touch gem

[root@Linux_win vsftpd]# ls -l /etc/vsftpd/vsftpd_user_conf

总用量 8

-rw-r--r--    1 root     root           21  1月  8 00:25 sam

-rw-r--r--    1 root     root           25  1月  8 00:17 gem

并在sam,gem文件加加入以下内容,可用vi编辑并保存,下面的虚拟用户也一样,不过只须更改文件内容就可以了

代码:
[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/sam

local_root=/home/sam

代码:
[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/gem

local_root=/home/gem

本地用户验证要用pam文件,内容是默认的。

代码:
[root@Linux_win vsftpd]# cat /etc/pam.d/vsftpd

#%PAM-1.0

auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers

onerr=succeed

auth       required     pam_stack.so service=system-auth

auth       required     pam_shells.so

account    required     pam_stack.so service=system-auth

session    required     pam_stack.so service=system-auth

配置虚拟用户(mysql)

  VSFTPD的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而

VSFTPD的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读

写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。

  VSFTPD的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了

系统的安全性。VSFTPD可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器

中,如MySQL等。VSFTPD验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证

时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正

如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。

  配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等

。在后面的例子中,假定存在虚拟用户win和wingger.

1、在系统中添加vsftpdvirtual用户,作为虚拟用户在系统中的代表。

代码:
[root@Linux_win vsftpd]# useradd vsftpdvirtual

  当虚拟用户登录后,所在的位置为vsftpdvirtual的自家目录/home/vsftpdvirtual。

2、配置文件vsftpd.conf: 加入以下内容

guest_enable=YES

guest_username=vsftpdvirtual

virtual_use_local_privs=YES|NO

3、虚拟用户的权限配置。

virtual_use_local_privs参数,

当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。所有虚拟用户的权限使用local参数。

当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,所有虚拟用户的权限使用anon参数。

这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。

由于本人的vsftpd为1.1.3,只好用virtual_use_local_privs=NO了:

因此匿名用户的设置即是虚拟用户的设置,在改参数权限时,同时也要修改目录权限

如:让用户不能浏览目录,但仍可以对文件操作且虚拟用户目录的权限改为只能由vsftpdvirtual操作:

代码:
[root@Linux_win vsftpd]# chown vsftpdvirtual.vsftpdvirtual /home/vsftpdvirtual

[root@Linux_win vsftpd]# chmod 700 /home/vsftpdvirtual

由于这些设置对匿名用户生效。最好是禁止匿名用户登录。

在VSFTPD-1.2.0以上版本,当virtual_use_local_privs=YES时,只需write_enable=YES,虚拟用户就可以就拥

有写权限。应该与本地用户使用相同,有兴趣的可以去验证。

如果不同用户使用不同的目录,须加入权限

代码:
chown vsftpdvirtual.vsftpdvirtual /home/win

chown vsftpdvirtual.vsftpdvirtual /home/wingger

4、用MySQL保存虚拟用户

  1、虚拟用户的用户名/口令的保存。这部分在MySQL数据库中完成。

首先,创建数据库vsftpdvirtual以及表users,并插入虚拟用户win、wingger。执行以下命令:

代码:
[root@Linux_win vsftpd]# #mysql -uroot -p

mysql>create database vsftpdvirtual;

mysql>use vsftpdvirtual;

mysql>create table users(name char(16) binary,passwd char(16) binary);

mysql>insert into users (name,passwd) values ('win',password('123456'));

mysql>insert into users (name,passwd) values ('wingger',password('123456'));

mysql>quit

然后,授权vsftpdvirtual只能读vsftpdvirtual数据库的users表。执行以下命令:

代码:
[root@Linux_win vsftpd]# mysql -u root mysql -p

mysql>grant select on vsftpdvirtual.users to vsftpdvirtual@localhost identified by '123456';

mysql>quit

验证刚才的操作是否成功可以执行下面命令:

代码:
[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -p123456 ftpdvirtual

mysql>select * from users;

如果成功,将会列出wing、wingger和加密后的密码。

如下所示:

引用:
mysql> select * from users;

+---------+------------------+

| name | passwd |

+---------+------------------+

| win | 23932fe477657768 |

| wingger | 23932fe477657768 |

+---------+------------------+

2 rows in set (0.00 sec)

  2、设置PAM认证。这里我们要用到一个利用mysql进行pam验证的开源项目(http://sourceforge.net/proj

ects/pam-mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz。在编译安装之前,要确保mysql-devel

的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:

代码:
[root@Linux_win vsftpd]# tar xvzf pam_mysql-0.5.tar.gz

[root@Linux_win vsftpd]# cd pam_mysql

[root@Linux_win vsftpd]# make

[root@Linux_win vsftpd]# cp pam_mysql.so /bli/security

接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件,加入以下内容:

引用:
  auth required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual

table=users usercolumn=name passwdcolumn=passwd crypt=2

  account required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost

db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2

具体可查看vsftpd源包里的EXAMPLE中的例子。

附:虚拟用户文档

1、vsftpd.conf配置文件

代码:

[root@Linux_win vsftpd]# cat vsftpd.conf

listen=YES

listen_address=192.168.1.2

anonymous_enable=NO

local_enable=YES

write_enable=YES

#anon_root=

anon_upload_enable=YES

anon_other_write_enable=YES

anon_mkdir_write_enable=YES

#anon_world_readable_only=YES

#anon_umask=777

#dirmessage_enable=YES

ftpd_banner=welcome to this FTP server

xferlog_enable=YES

#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES

#pasv_mix_port=50000

#pasv_max_port=60000

#xferlog_std_format=YES

max_clients=10

max_per_ip=10

hide_ids=YES

#limit all users in it's owner dir

#chroot_local_user=YES

#or limit some

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

#use ownwer conf file

user_config_dir=/etc/vsftpd/vsftpd_user_conf

pam_service_name=/etc/pam.d/vsftpd

guest_enable=YES

guest_username=vsftpdvirtual

#virtual_use_local_privs=NO

代码:
2、[root@Linux_win vsftpd]# cat /etc/pam.d/vsftpd

#%PAM-1.0

#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers

onerr=succeed

#auth       required    pam_stack.so service=system-auth

#auth       required    pam_shells.so

#account    required    pam_stack.so service=system-auth

#session    required    pam_stack.so service=system-auth

auth       required     /lib/security/pam_mysql.so user=vsftpdvirtual    passwd=123456 

host=localhost   db=vsftpdvirtual table=users  usercolumn=name  passwdcolumn=passwd  crypt=2

account    required     /lib/security/pam_mysql.so user=vsftpdvirtual     passwd=123456   

host=localhost   db=vsftpdvirtual table=users  usercolumn=name  passwdcolumn=passwd  crypt=2

代码:
3、[root@Linux_win vsftpd]# cat /etc/vsftpd/chroot_list

win

wingger

代码:
4、[root@Linux_win vsftpd]# ls -l /etc/vsftpd/vsftpd_user_conf

总用量 8

-rw-r--r--    1 root     root           21  1月  8 00:25 win

-rw-r--r--    1 root     root           25  1月  8 00:17 wingger

代码:
5、[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/win

local_root=/home/win

[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/wingger

local_root=/home/wingger

代码:
6、drwx------    6 vsftpdvirtual vsftpdvirtual    4096  1月  8 00:16 vsftpdvirtual

drwxrwxrwx    5 vsftpdvirtual vsftpdvirtual     4096  1月  8 01:47 win

drwxrwxrwx    3 vsftpdvirtual vsftpdvirtual     4096  1月  8 20:19 wingger

7、版本:(vsFTPd 1.1.3)、pam_mysql-0.5.tar.gz、mysql3.23.54

8、[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -pchenwy vsftpdvirtual

mysql> select * from users;

+---------+------------------+

| name | passwd |

+---------+------------------+

| win | 23932fe477657768 |

| wingger | 23932fe477657768 |

+---------+------------------+

2 rows in set (0.00 sec)

 

 

  评论这张
 
阅读(180)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018