Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2887758
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: LINUX

2010-12-07 19:45:04

1.生成虚拟用户口令库文件。文件格式:单数行为用户名,偶数行为口令:
#vi account.txt
hahazhu
123456
zhangguo
4321

2.生成口令库文件,并修改其权限:
#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#chmod 600 /etc/vsftpd/account.db

3.新建一个虚拟用户的PAM文件。加上如下两行内容:
#vi /etc/pam.d/vsftp.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib/security/pam_userdb.so db=/etc/vsftpd/account

4.建立虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:
#useradd -d /home/ftpsite virtual_user
#chmod 700 /home/ftpsite

经过该步骤的设置,/home/ftpsite就是virtual_user用户的主目录,该用户也是ftpsite目录的拥有者。除root用户之外,只有该用户具有对该目录的读、写和执行的权限。

5.编辑/etc/vsftpd/vsftpd.conf文件,使其整个文件内容如下所示(去掉了注释内容):
anonymous_enable=NO #禁止匿名用户登录
local_enable=YES #开启本地用户登录
local_umask=022 #新建文件权限
xferlog_enable=YES #开启日志记录功能
connect_from_port_20=YES #开启20端口数据传输
xferlog_std_format=YES #日志记录格式
listen=YES #监听
write_enable=YES #对文件有写的权限
anon_upload_enable=YES #允许匿名上传
anon_mkdir_write_enable=YES#允许匿名用户新建目录
anon_other_write_enable=YES #是否拥有其他权限
one_process_model=NO
chroot_local_user=YES
ftpd_banner=Welcom to my FTP server.
anon_world_readable_only=NO
guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftp.vu

上面代码中,guest_enable=YES表示启用虚拟用户;guest_username=virtual则是将虚拟用户映射为本地用户,这样虚拟用户登录后才能进入本地用户virtual的目录/ftpsite;pam_service_name=vsftp.vu指定PAM的配置文件为 vsftp.vu。

6.重新启动VSFTP:
#service vsftpd restart

7.以虚拟用户gou(Linux中并无该账号)进行测试:
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): gou
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.

在虚拟FTP服务器中,也可以对各个用户的权限进行设置。
方法是在/etc/vsftpd.conf文件中添加如下一行:
user_config_dir=用户配置文件目录

用户配置文件,比如为上述名为gou的用户创建一个配置文件(假设配置文件目录为/etc/vsftpd_user_conf):
#vi /etc/vsftpd_user_conf/gou
write_enable=NO
anono_upload_enable=NO

8.虚拟用户个人目录设置
大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/ftpsite,即都是guest用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。
一种作法是在虚拟用户的个人配置文件中使用local_root选项指定虚拟用户的自家目录。以gou为例,在第上步的基础上,首先/etc/vsftpd_user_conf/gou文件中加入:
local_root=/home/ftpsite/gou
/home/ftpsite下新建gou目录,并将权限设为virtual_user:

9.添加FTP用户的步骤
1.在account.txt中添加用户名和密码
2.运行如下命令,将用户名和密码添加到数据库中
db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
3.在/home/ftpsite中新建一个文件夹,与用户明相同
4.在vsftpd_user_conf文件夹下新建和用户名相同的文件,并在其中加入
local_root=/home/ftpsite/用户名
注:按照这个做,能实现虚拟用户的配置,不过,个人认为不要把单独的用户建立的ftpsite文件夹下,应该单独建立,只要他的文件夹拥有者权限是virtual_user就成.

范例:
1.在account.txt中添加用户名和密码(如添加一个test password)
2.运行如下命令,将用户名和密码添加到数据库中
db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
3.在/home中新建一个文件夹,与用户明相同(mkdir /home/test
chown virtual_user:virtual_user /home/test)
4.在vsftpd_user_conf文件夹下新建和用户名相同的文件,并在其中加入
local_root=/home/用户名
(如:local_root=/home/test)

注意:如果需要对虚拟用户做权限设置,配置文件参考
#vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=ftp
pam_service_name=vsftpd
listen=YES
listen_port=21
pasv_min_port=30000
pasv_max_port=30999
ftpd_banner=Welcom to my FTP server.
xferlog_enable=YES
xferlog_std_format=YES
local_umask=022
one_process_model=NO
anon_world_readable_only=NO
connect_from_port_20=YES
user_config_dir=/etc/vsftpd/userconf/


#vi wg_upload
local_root=/var/ftp/wg_upload/ #mkdir -p /var/ftp/wg_upload chown -R ftp:ftp /var/ftp/wg_upload
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022

#vi wg_down
local_root=/var/ftp/wg_upload/
write_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022

关联资料

在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出 PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。

被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。

如果只想提供主动模式,修改vsftpd.conf为:
port_enable=YES  
connect_from_port_20=YES
pasv_enable=NO
########################
#pasv_min_port=30000
#pasv_max_port=30999

这里只给出日志这块的参数设置
##################log settings###################
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog
#
#log in two files /var/log/xferlog and /var/log/vsftpd.log
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
#log time setting

这里只给出日志这块的参数设置(很不错的参数)
##################log settings###################
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog
#
#log in two files /var/log/xferlog and /var/log/vsftpd.log
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
#log time setting
use_localtime=YES #时间的精确

##################################2009/0921补充#################
download_enable=YES\NO
改变用户下载权限

、创建用户数据库
(1)创建用户文本文件

先建立用户文本文件vsftpd_virtualuser.txt,添加两个虚拟帐号,公共帐号ftp及客户帐号vip
touch /etc/vsftpd/vsftpd_virtualuser.txt
vim /etc/vsftpd/vsftpd_virtualuser.txt
格式:
虚拟帐号1
密码
虚拟帐号2
密码



















保存退出。

(2)生成数据库
保存虚拟帐号和密码的文本文件无法被系统帐号直接调用哈~我们需要使用db_load命令生成db数据库文件
db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db
注:
rhel5默认只安装db4-4.3.29-9.fc6.i386.rpm
db4-devel-4.3.29-9.fc6.i386.rpm
要使用db_load需要将db4-utils-4.3.29-9.fc6.i386.rpm包安装上哈~否则会出现错误:
找不到db_load命令
/etc/vsftpd/vsftpd_virtualuser.txt是虚拟用户登录文件,/etc/vsftpd/vsftpd_virtualuser.db生成的数据库文件。这两个文件的路径和文件名都可以随意设置,但是为了便于管理,路径最好设置为vsftpd的路径。


(3)修改数据库文件访问权限

数据库文件中保存着虚拟帐号的密码信息,为了防止非法用户盗取哈,我们可以修改该文件的访问权限。生成的认证文件的权限应设置为只对root用户可读可写,即600
chmod 600 /etc/vsftpd/vsftpd_virtualuser


2、配置PAM文件
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块.PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc /pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
修改vsftpd对应的PAM配置文件/etc/pam.d/vsftpd,将默认配置使用“#”全部注释,添加相应字段。
修改成下图效果:

注:我是新建一个文件,命名为vsftp.vu(名字随便),在里面输入
auth      required /lib/security/pam_userdb.so db=/etc/vsftpd/virtual_login
account   required /lib/security/pam_userdb.so db=/etc/vsftpd/virtual_login
两行内容,保存并关闭。然后在vsftpd.conf文件中修改
pam_service_name=vsftpd

pam_service_name=vsftpd.vu

3、创建虚拟帐号对应的系统用户
对于公共帐号和客户帐号,因为需要配置不同的权限,所以可以将两个帐号的目录进行隔离,控制用户的文件访问。公共帐号ftp对应系统帐号ftpuser, 并指定其主目录为/var/ftp/share,而客户帐号vip对应系统帐号ftpvip,指定主目录为/var/ftp/vip
chmod -R 500 /var/ftp/share/ :公共帐号ftp只允许下载,修改share目录其他用户权限为rx可读可执行。
chmod -R 700 /var/ftp/vip/ :客户帐号vip允许上传和下载,所以对vip目录权限设置为rwx,可读可写可执行。
如果不设置可执行用户登录会出不能更改目录错误。

注意上图,需要先建立虚拟用户对应的本地用户

4、建立配置文件
设置多个虚拟帐号的不同权限,若使用一个配置文件无法实现此功能,需要为每个虚拟帐号建立独立的配置文件,并根据需要进行相应的设置。
(1)修改vsftpd.conf主配置文件
配置主配置文件/etc/vsftpd/vsftpd.conf添加虚拟帐号的共同设置并添加user_config_dir字段,定义虚拟帐号的配置文件目录
禁用匿名用户登录并启用本地用户登录设置
anonymous_enable=NO
local_enable=YES


将所有本地用户限制在家目录中,NO则不限制
chroot_local_user=YES
pam_service_name=vsftpd:配置vsftpd使用的PAM模块为vsftpd
user_config_dir=/etc/vsftpd/vuserconfig:设置虚拟帐号的主目录为/vuserconfig
max_clients=300:设置FTP服务器最大接入客户端数为300个
max_per_ip=10:设置每个IP地址最大连接数为10个
(2)建立虚拟帐号配置文件
在user_config_dir指定路径下,建立与虚拟帐号同名的配置文件并添加相应的配置字段哈~
首先建立公共帐号ftp的配置文件


guest_enable=yes:开启虚拟帐号登录
guest_username=ftpuser:设置ftp对应的系统帐号为ftpuser
#以上两行是必须的,下面两行视具体情况而定。
anon_world_readable_only=no:允许匿名用户浏览器整个服务器的文件系统anon_max_rate=50000:限定传输速率为50KB/s

vip用户配置同ftp,只是在权限方面限制的比较少就可以了,详细的配置信息可以参考其他的vsftpd.conf文件的配置文章。

阅读(1531) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~