做了好久的实验,网上的好些文章都是或多或少没说明白问题。这里把我的实验过程记下来,可能也会帮助到一些朋友。

情况:

开发、美工、运维组都有相关的资料需要更新、保存(上传、下载、删除、建立目录等),且各个组相互不能进入其他的资料区,看同事们也喜欢用ftp工具,就用linux下的vsftpd搭建服务吧。考虑到安全问题,采用虚拟用户登录。

规划:

开发组:develop

美工组:design

运维组:operate

ip地址:192.168.1.105

用户名也暂且这样定吧,密码和用户名相同

好了,开始:

一、准备

1、安装vsftpd软件:

[root@client ~]# yum install vsftpd –y

2、采用的是pam验证模块,所以得安装相关软件

[root@client ~]# yum install pam –y

3、采用文本帐号,生成相应数据库文件,得有db4包支持

[root@client ~]# yum install db4 db4-devel db4-utils –y

4、建立账户文件(/etc/vsftpd/vsftpd_login.txt)

[root@client ~]# vim /etc/vsftpd/vsftpd_login.txt

[root@client ~]# cat /etc/vsftpd/vsftpd_login.txt

p_w_picpath

5、将文本文件内容加载到数据库

[root@client ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db

-T选项允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用-T。

-t用来指定转译载入的数据库类型。可以指定的数据类型有Btree、Hash、Queue和Recon数据库。这里选择Hash。

p_w_picpath

查看一下生成的db文件:

[root@client ~]# ll /etc/vsftpd/vsftpd_login*

p_w_picpath

6、设定验证文件,指定验证模块和需要验证的db文件

[root@client ~]# vim /etc/pam.d/vsftpd

只需要添加下面两行,其他的注释掉吧

p_w_picpath

二、创建系统账户

这里存在两个账户:

vsftpd服务的宿主用户,默认为root。可以自己建一个用户作为vsftpd的宿主用户,也可不用管。这里还是建立一个vsftpd用户吧,没必要登录。

vsftpd虚拟的宿主用户,就像develop需要有系统相关权限,就映射成系统的ftp_develop用户(待会建立)的权限,所以这些用户也没有必要登录系统。

我想把develop、design、operate三个组都放到/var/ftp下,就当是虚拟宿主用户的家目录权限去控制访问吧

1、vsftpd服务的宿主用户:

[root@client ~]# useradd -s /sbin/nologin vsftpd

2、三个组对应的虚拟宿主用户:

[root@client ~]# useradd -d /var/ftp/develop -s /sbin/nologin ftp_develop
[root@client ~]# useradd -d /var/ftp/design -s /sbin/nologin ftp_design
[root@client ~]# useradd -d /var/ftp/operate -s /sbin/nologin ftp_operate

p_w_picpath

查看是否建立文件路径:

[root@client ~]# ls /var/ftp/
p_w_picpath

三、改主配置文件 /etc/vsftpd/vsftpd.conf

关键的一些解释一下:

anonymous_enable=NO
设定不允许匿名访问

local_enable=YES
设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问

write_enable=YES
设定可以进行写操作

local_umask=022
设定上传后文件的权限掩码

anon_upload_enable=NO
禁止匿名用户上传

anon_mkdir_write_enable=NO
禁止匿名用户建立目录

xferlog_enable=YES
设定开启日志记录功能

connect_from_port_20=YES
设定端口20进行数据连接

chown_uploads=NO
设定禁止上传文件更改宿主

xferlog_file=/var/log/vsftpd.log
vsftpd的服务日志。注意,该文件必须要手动touch出来,必须注意给与该用户对日志的写入权限(vsftpd服务宿主用户),否则服务将启动失败

xferlog_std_format=YES
设定日志使用标准的记录格式

nopriv_user=vsftpd
vsftpd服务的宿主用户vsftpd。必须注意与该服务相关的读写文件的读写权限问题

async_abor_enable=YES
设定支持异步传输功能

ascii_upload_enable=YES
ascii_download_enable=YES
设定支持ASCII模式的上传和下载功能

ftpd_banner=Welcome to blah FTP service.
设定vsftpd的登陆标语

chroot_list_enable=NO
限定在自己的FTP主目录里边,待会儿可以设置

pam_service_name=vsftpd
设定PAM服务下Vsftpd的验证配置文件名。刚刚修改的是/etc/pam.d/下的vsftpd文件,可以自己新建文件,目录要正确

userlist_enable=YES
设定userlist_file中的用户将不得使用FTP
tcp_wrappers=YES
设定支持TCP Wrappers

 

好了,需要修改新增的如下:(具体根据需要而定)

anonymous_enable=NO
不允许匿名用户登录
anon_upload_enable=NO
不允许匿名用户上传
anon_mkdir_write_enable=NO
不允许匿名用户建立目录

chown_uploads=NO
设定禁止上传文件更改宿主。

xferlog_file=/var/log/vsftpd.log
设定Vsftpd的服务日志保存路径

async_abor_enable=YES
设定支持异步传输功能。

ascii_upload_enable=YES
ascii_download_enable=YES
设定支持ASCII模式的上传和下载功能也都开启吧

ftpd_banner=Hello baby,Welcome to blah FTP service.

^_^,开个banner吧

chroot_list_enable=NO
限定在ftp主目录

nopriv_user=vsftpd

支撑Vsftpd服务的宿主用户

guest_enable=YES
设定启用虚拟用户功能
virtual_use_local_privs=YES
设定虚拟用户的权限符合他们的宿主用户
user_config_dir=/etc/vsftpd/vsftpd_config
设定虚拟用户个人Vsftp的配置文件存放路径。/etc/vsftpd/vsftpd_config里面的文件都是虚拟用户的专用配置文件,注意:配置文件名必须和虚拟用户名相同

那我们就专门为虚拟用户建立一个配置文件目录吧

四、建立虚拟用户配置文件及后期处理

[root@client ~]# mkdir /etc/vsftpd/vsftpd_config
[root@client ~]# cd /etc/vsftpd/vsftpd_config/

[root@client vsftpd_config]# touch {develop,design,operate}

p_w_picpath

[root@client vsftpd_config]# vim develop

guest_enable=YES (在centos下yes必须为小写字母)
guest_username=ftp_develop
local_root=/var/ftp/develop
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=100000

p_w_picpath

这里可以通过系统用户权限和参数配置达到各种限制,为了方便,三个组权限都一样吧,那就copy了

p_w_picpath

p_w_picpath

注意:还有日志文件没有处理哦

[root@client vsftpd_config]# touch /var/log/vsftpd.log
[root@client vsftpd_config]# chown vsftpd.vsftpd /var/log/vsftpd.log

p_w_picpath

五、测试与排错

实验之前已关闭selinux和iptables。

1、重启服务,未报错

p_w_picpath

2、本地登录测试、上传测试

匿名用户无法登录;ok

p_w_picpath

指定用户呢,可以登录上传文件(注意是不同用户,上传的不同文件)

p_w_picpath

p_w_picpath

p_w_picpath

注意vsftpd.conf里面还有一项可能会导致一些问题哦:userlist_enable=YES (这里是yes)

查看一下文件 /etc/vsftpd/user_list

p_w_picpath

如果有问题可以看看这个文件~

3、下载测试

这里以develop为例测试,其它配置一样,结果也是一样的,可以下载

Linux下:

p_w_picpath

Windows下:

p_w_picpath

OK,完成所要的功能了。暂时就这样吧,先睡了