首页 » 工作 » 正文

CentOS 下基于虚拟用户的 vsftpd 服务配置

发布者:站点默认
2011/11/9 浏览数(3,199) 分类:工作 评论(1)

目录

本文的配置方法不使用系统用户而采用 vsftpd 的虚拟用户来操作 ftp,虚拟用户在操作系统中并不存在,只用于登录管理 ftp,但虚拟用户登录成功后需要使用本地帐号来管理系统上的文件。关于 vsftpd 虚拟用户的介绍可以看看 kangzye 的文章《为vsftpd 建立虚拟用户》中开头的介绍。

一、添加本地用户及其权限

二、修改 vsftpd.conf

三、建立虚拟用户数据库

四、配置虚拟用户权限

五、修改 vsftpd 认证方式

六、完成,记得重启 vsftpd

七、常见问题

正文

一、添加本地用户及权限:

虚拟用户登录成功后会使用它的权限来管理系统上的文件,此用户不需要登录,所以“/sbin/nologin”,以用户名 ftpvser 为例:

useradd -d /home/ftpvuser -s /sbin/nologin ftpvuser

让 ftpvuser 对 ftp 根目录 /var/ftp 有读写权限:

chown ftpvuser.ftpvuser /var/ftp
chmod 700 /var/ftp

如果需要 apache 对此目录有操作权限,可以:

usermod -G ftpvuser apache
chmod 770 /var/ftp

二、修改 vsftpd.conf:

主配置文件为 /etc/vsftpd/vsftpd.conf,需要关闭匿名用户、开启虚拟用户及其它一些设置。

配置参考:(见文末)点击这里转到

三、建立用户数据库:

第一步:安装组件(用于使用其 db_load 命令生成虚拟用户数据库):

yum -y install db4-utils db4-devel

第二步:建立虚拟用户表:

创建用户表文件 /etc/vsftpd/vusers.txt (其实就是一个文本文档),内容为(一行用户名,下一行用户的密码,依次类推):

	demoer
	demoerPasswd
	user1
	user1Passwd

第三步:生成虚拟用户数据库

将第二步中创建的用户表生成为用户数据库文件(扩展名为“.db”)并设置权限为 600:

	db_load -T -t hash -f /etc/vsftpd/vusers.txt /etc/vsftpd/vusers.db
	chmod 600 /etc/vsftpd/vusers.db

第四步:删除虚拟用户表文件

最终需要的是生成的虚拟用户数据库文件,为了安全可以将 /etc/vsftpd/vusers.txt 删除:

rm -f /etc/vsftpd/vusers.txt

或将此文件修改为其他人不可读:

chmod 600  /etc/vsftpd/vusers.txt

四、配置虚拟用户权限:

建立用户控制文件夹 /etc/vsftpd/vusers,其下为以用户名命名的文件。创建文件 /etc/vsftpd/vusers/demoer,文件名必须与用户名相同,用于配置虚拟用户 demoer 的权限,内容:

	local_root=/var/ftp/demoer     # 用户 demoer 登录的主目录
	anon_umask=022                 # 如果需要 apache 也操作,为:002
	write_enable=YES               # 目录可写
	anon_world_readable_only=NO    # 不详
	anon_upload_enable=YES         # 启用上传
	anon_mkdir_write_enable=YES    # 允许修改
	anon_other_write_enable=YES    # 允许写之外的操作,比如“删除”

参考以上,为 user1 设置权限:(略)

五、修改 vsftpd 认证关系:
清空(记得先备份) /etc/pam.d/vsftpd,添加以下两行(后边的用户数据库文件不要加“.db”):

	
	auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vusers
	account required /lib/security/pam_userdb.so db=/etc/vsftpd/vusers

六、重启 vsftpd 服务:

重启 vsftpd 服务可以使用这两个办法的一个:

service vsftpd restart
/etc/init.d/vsftpd restart

七、常见问题:

0、列表错误

原因:检查是不是SELinux的问题,可以先关闭SELinux试试。

1、登录后怎么设置目录列表都为空

原因:local_root 指定的本地目录没有可执行权限,目录的 x 权限用于浏览目录,如果没有此权限用户就不可以将该目录下的文件列出来,所以就空了。参考命令:chmod 777 /var/ftp/demoer。

2、为用户设置了写权限,可依旧拒绝访问

原因:除了在 user_config_dir 设置的目录中为定义用户权限外,还需要在系统中为用户的 local_root 指定的目录设置好权限,如果本地系统都没权限 ftp user 无论如何也不会有权限的。

3、vsftp 和 apache 不能相互编辑、删除各自的文件

原因:apche 生成的、ftp 上传的文件和目录默认umask 为022,其他人是不能操作的。解决文件互操作最简单的办法是让 vsftpd 以 apache 的身份运行(vsftpd.conf 中 guest_username=apache)。

<完>

vsftpd.conf配置参考:

使用时请将行后的注释删除。

	#### 匿名用户:####
	anonymous_enable=NO         # 关闭匿名用户
	anon_upload_enable=NO       # 关闭匿名用户权限,下同
	anon_mkdir_write_enable=NO
	anon_other_write_enable=NO
	anon_world_readable_only=NO
	chown_uploads=NO            # 不更改上传文件的属主
	#chown_username=whoever     # 修改上传文件的为用户 whoerer 所有
	anon_max_rate=5120000       # 匿名用户上传速度

	#### 虚拟用户:####
	pam_service_name=vsftpd
	guest_enable=YES                   # 启用虚拟用户
	guest_username=ftpvuser            # 虚拟用户使用哪个本地帐号的权限
	virtual_use_local_privs=NO
	user_config_dir=/etc/vsftpd/vusers # 保存虚拟用户权限的目录

	#### 本地帐户:####
	local_enable=YES       # 启用本地用户,虚拟用户需要其为YES
	local_umask=022
	userlist_enable=YES
	userlist_file=/etc/vsftpd/user_list
	chroot_list_enable=YES
	chroot_list_file=/etc/vsftpd/chroot_list
	local_max_rate=5120000

	#### 帐户常规配置:####
	write_enable=YES
	chroot_list_enable=NO
	chroot_local_user=YES
	secure_chroot_dir=/usr/share/empty
	text_userdb_names=YES
	ftpd_banner=Welcome to FTP service.
	dirmessage_enable=YES
	message_file=.message

	#### 系统配置: ####
	nopriv_user=ftpvuser
	listen=YES
	listen_port=22212       # ftp 端口号,默认为 21
	use_localtime=YES
	ls_recurse_enable=NO
	idle_session_timeout=600
	data_connection_timeout=120
	accept_timeout=60
	connect_timeout=60
	tcp_wrappers=YES
	max_clients=100
	max_per_ip=10
	connect_from_port_20=YES
	pasv_enable=YES
	#pasv_promiscuous=NO
	pasv_min_port=5000    # 被动模式最小端口号(用于设置防火墙)
	pasv_max_port=5010    # 被动模式最大端口号(用于设置防火墙)

	port_enable=YES
	#port_promiscuous=NO

	#### 日志:########
	xferlog_enable=YES
	xferlog_std_format=NO
	log_ftp_protocol=YES
	xferlog_file=/var/log/ftpvuser.log

	#### 文件传输:####
	async_abor_enable=NO
	ascii_upload_enable=YES
	ascii_download_enable=YES

防火墙规则参考:

# 添加规则,22212为vsftpd服务端口,5000:5010为 ftp 被动模式时使用的端口范围
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22212 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 5000:5010 -j ACCEPT
iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# 保存防火墙规则
service iptables save
# 重启防火墙
service iptables restart

<End>

点击返回顶部
  1. 留言
  2. 联系方式