vsftpd虚拟用户设置
工作中我们为了方便上传下载文件,提高工作效率和安全性,会经常使用ftp,并且是很多人使用,同时又分配不同的权限。那没么很显然直接使用本地用户是不可取的,也是无法实现不同权限的管理。下面就介绍一下vsftpd虚拟用户的配置。
一、概念介绍
本地用户:简单的说就是服务器真实存在的用户,也就是/etc/passwd 中所能看见的用户。
虚拟用户:顾名思义,不是真实存在的用户,是我们虚拟出来的,/etc/passwd 中是看不见的。
宿主用户:虚拟用户想要登录ftp,那么必须调用一个本地用户来登陆,那么这个用户就叫做宿主用户。
二、两种模式
主动模式(Port Mode):命令连接的建立是由客户端C的随机端口向服务端S的TCP 21端口请求连接产生;数据连接的建立是由:(命令端口的连接建立在成功后)客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口随机端口N在等着你进行数据连接),当服务端S收到这个Port命令后,就会利用服务器S自己的TCP 20端口向客户端打开的那个随机端口N进行请求连接,最终连接成功。
被动模式(Pasv Mode):命令连接的建立也是由客户端C的随机端口向服务端S的TCP 21端口请求连 接产生;(命令端口的连接建立在成功后)服务端S会发信息给客户端C,这个信息内容是(服务端S在本地打开了一个高位端口M,你现在去连接我吧),当客户端C收到这个信息后,就利用客户端自己的随机端口向服务端S的M端口进行连接,进而数据连接建立成功。
三、文件配置
1、安装工具
虚拟用户的验证文件是利用db_load工具生成的,那么我们先来安装这个工具。
可以利用rpm -qa | grep db4 来查看是否安装
若返回
db4-devel-4.3.29-10.el5_5.2
db4-4.3.29-10.el5_5.2
db4-utils-4.3.29-10.el5_5.2
db4-tcl-4.3.29-10.el5_5.2
db4-java-4.3.29-10.el5_5.2
说明已经安装。
如返回为空,可使用下面命令安装
yun install db4* -y
2、配置防火墙
编辑防火墙配置文件,加入以下内容。
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT(允许21端口通过防火 墙)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:35999 -j ACCEPT(设置ftp被 动模式的端口范围,只要不与其他服务端端口冲突,可随意定义端口范围)
重启防火墙
service iptables restart
查看配置是否生效
iptables -nL (L是大写的)
返回结果中含有以下字段代表成功
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 dpts:30000:35999
3、修改配置文件
为了保险起见,也是一个良好的习惯,我们先备份主配置文件,以便错误时恢复。
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
编辑主配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO 不允许匿名用户登录
local_enable=YES 允许本地用户访问 (注意:主要是为虚拟宿主用户,如果该项目设定为NO 那么所有虚拟用户将无法访问)
write_enable=YES 允许写入即上传 (如果为NO,所有用户将不能上传文件)
local_umask=022 上传文件默认权限 (022代表上传的文件权限为644)
dirmessage_enable=YES 开启目录标语
xferlog_enable=YES 开启日志 (生产中强烈建议开启)
connect_from_port_20=YES 设定数据连接端口为20
xferlog_std_format=YES 设定日志格式为标准格式
idle_session_timeout=300 设定会话超时时间 (300秒无操作强制断线)
data_connection_timeout=2 设定连接超时时间 (2秒无法连接将认为超时)
accept_timeout=5 设定请求超时时间 (5秒无法请求将认为超时)
connect_timeout=2 设定下一次连接时间 (1秒后重新连接)
async_abor_enable=YES 设定支持异步传输
ascii_upload_enable=YES 设定支持ASCII模式的上传
ascii_download_enable=YES 设定支持ASCII模式的下载
listen=YES 开启监听
listen_port=21 设定监听端口(可根据环境修改,但不可与其他服务端口冲突,连接是需指 定端口)
tcp_wrappers=YES 设定支持tcp_wrappers封装
local_root=/www/ 设定ftp的根目录为www (推荐网站的根目录)
guest_enable=YES 设定开启虚拟用户
guest_username=apache 设定虚拟用户的宿主用户 (推荐使用apache运行账户,可以避免很 多权限设置问题。如果你的apache运行账户为test,那么推荐这里使用test用户)
user_config_dir=/etc/vsftpd/vconf 设定虚拟用户个人vsftp的配置文件存放路径。(我们 将在这个目录下,为每一个虚拟用户设定一个配置文件)
virtual_use_local_privs=YES 设定虚拟用户与本地用户具有相同的权限
pam_service_name=vsftpd 设定PAM服务下vsftpd的验证配置文件名
chroot_local_user=YES 设定禁止用户登出家目录
max_clients=200 设定最大连接数
max_per_ip=10 设定最大ip数
pasv_enable=YES 开启被动模式
pasv_min_port=30000 设定被动模式最小端口
pasv_max_port=35999 设定被动模式最大端口
listen_address=192.168.168.203 设定访问ip限制
4、创建相应配置文件
建立虚拟用户名单文件:
touch /etc/vsftpd/virtusers
编辑虚拟用户名单文件:(第一行账号,第二行密码,注意:不能使用root做用户名,系统保 留)
vim /etc/vsftpd/virtusers
test1
123456
test2
123456
test3
123456
生成虚拟用户验证文件:
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
(如果不能使用此命令,请按照上文安装对应的程序包)
chmod 600 /etc/vsftpd/virtusers.db 修改虚拟用户验证文件权限
注意:修改虚拟用户时,需将原有的virtusers.db文件删除,并重使用db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db 生成虚拟用户验证文件。因为这条命令只能覆盖原有文件,并没有替换原有文件,当你由3个用户减少到2个时,没有删除virtusers.db文件,直接重新执行db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db命令,你会发现被删掉的用户依然可以登录。virtusers.db的实质就是一个二进制文件,我们可以用strings命令查看里面的内容,你会发现虽然virtusers里的用户已经被删除了,但virtusers.db中依然没存在。只是修改密码时不用删除virtusers.db文件,因为他会直接覆盖掉原来的密码,但是仍然推荐删除virtusers.db文件后重新生成。
建立虚拟用户个人vsftp的配置文件
mkdir /etc/vsftpd/vconf
创建对应的个人vsftp的配置文件,并以用户名称命名 (必须按照用户名称命名)
touch test1 test2 test3
编辑用户test1配置文件,其他用户相同,根据需求给予相应权限,不宜过大
local_root=/www/test1/ 虚拟用户的家目录 (必须在ftp根目录下)
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
5、配置验证文件
在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)
同样修改前先备份 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak
vim /etc/pam.d/vsftpd
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
注意:如果系统为64为,则上面的lib改为lib64,否则配置失败
四、重启vsftp服务
service vsftpd restart
使用test1、test2、test3用户进行登录测试和权限测试了,这里不再累述。
五、大功告成