vsftpd服务器同时支持匿名用户、本地用户、和虚拟用户三类用户帐号,使用虚拟用户帐号可以提供集中管理的ftp根目录,同时将用于ftp登录的用户名、密码与系统帐号区别开来,进一步增强ftp的安全性。

下面我们看一个实例:

公司对所有权互联网开放共享目录,允许下载产品信息,禁止上传。公司的合作单位能够使用FTP服务器进行上传和下载,但不可以删除数据。并且保证服务器的稳定性,进行适当优化设置??

分析:

公司的服务器对互联网都是公开的,考虑到安全性我们就可以使用vsftpd的虚拟用户帐号,而分析这个需求主要涉及到两类用户,一类是只能查看和下载不能上传,而另一类则是能查看、上传、下载但不可以删除数据,在就是为了服务器的性能我们可以根据用户的等级限制用户的连接数和下载速率!

解决方案:

1.建立虚拟用户的用户名/密码数据库

vim vusers.list

testftp                                        
1234                                            //当总提示密码错误时检查下此处是不是多了空格
vipftp
 

5678                                          //奇数行用户名,偶数行是密码

2.用db_load工具将其转化为DB数据库文件(适用db_load命令工具必须先安装db4-utils-4.3.29-9.fc6.i386.rpm)

db_load -T -t hash -f vusers.list vusers.db          //-T表示允许适用程序将文本转化为DB数据文件,-t指定读取数据的基本方法

                                                                              -f 指定转换文件

[root@localhost vsftpd]# chmod 600 vusers.*              //降低文件权限来提高安全性

3建立访问的根目录及虚拟用户对应的系统帐号

[root@localhost vsftpd]# useradd -d /var/ftp/share -s /sbin/nologin ftpuser
[root@localhost vsftpd]# useradd -d /var/ftp/vip -s /sbin/nologin vipuser
ll -ld /var/ftp/share/
drwx------ 4 ftp ftp 4096 10-27 13:27 /var/ftp/share/
[root@localhost vsftpd]# chmod -R 500 /var/ftp/share/                         //因为ftp用户只能查看和下载不能写入(上传)
 

[root@localhost vsftpd]# chmod -R 700 /var/ftp/vip/                            //vip用户可以下载上传等。。

[root@localhost ~]# touch /var/ftp/share/testftp.txt                                 
 

[root@localhost ~]# touch /var/ftp/vip/vipftp.txt                                          //建立测试文件

4.建立PAM认证文件

vim /etc/pam.d/vsftpd.vu

#%PAM-1.0                                                                                             //坚决不能省掉#%PAM-1.0这个内容
auth    required        pam_userdb.so db=/etc/vsftpd/vusers                 //db指向刚才转换过来的vusers.db,扩展名.db可以省略
account required        pam_userdb.so db=/etc/vsftpd/vusers
 

5建立配置文件

anonymous_enable=NO          
local_enable=YES                                   // 启用虚拟用户需要启用本地用户
guest_enable=YES                                 //启用用户名映射功能
guest_username=ftpuser                                 //将映射用户指定为ftpuser
chroot_local_user=YES                              //将本地用户禁锢在自己的宿主目录中
user_config_dir=/etc/vsftpd/vconfig            //为不同的虚拟用户建立独立的配置文件
max_clients=300                                        //最多允许300个客户端同时连接
 

max_per_ip=10                                           //来自同一IP最大连接数为10

anon_max_rate=50000                               //设置传输速率为50kb

anon_world_readable_only=NO                  //允许匿名用户浏览器整个服务器的文件系统,不写貌似浏览不到ftp资源

local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu                                        //指明PAM配置文件
userlist_enable=YES
tcp_wrappers=YES
 

6.为不同的用户建立独立的配置文件:

 mkdir /etc/vsftpd/vconfig

vim /etc/vsftpd/vconfig/vipftp

guest_enable=YES                      //这些就是独立配置文件的vipftp的内容
guest_username=vipuser
write_enable=YES
anon_upload_enable=YES                        //允许上传
anon_mkdir_write_enable=YES
anon_max_rate=100000                                  //传输速率100kb
anon_world_readable_only=NO                  //允许匿名用户浏览器整个服务器的文件系统,不写貌似浏览不到ftp资源

7.重新启动服务

service vsftpd restart

8.验证:

[root@localhost ~]# ftp 192.168.0.60
Connected to 192.168.0.60.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.60:root): testftp                                 //使用testftp登录测试
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls                                                                      
227 Entering Passive Mode (192,168,0,60,174,83)
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Oct 27 10:34 testftp.txt
226 Directory send OK.                                           //可以浏览资源
ftp> get testftp.txt
local: testftp.txt remote: testftp.txt
227 Entering Passive Mode (192,168,0,60,181,117)
150 Opening BINARY mode data connection for testftp.txt (0 bytes).
226 File send OK.                                                     //下载成功
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (192,168,0,60,165,227)
 

550 Permission denied.                                           //上传失败。权限拒绝。。

testftp的所有条件都满足。。。实验成功了!!!

[root@localhost ~]# ftp 192.168.0.60
Connected to 192.168.0.60.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.60:root): vipftp                                  //vipftp用户登录测试
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,0,60,104,76)
150 Here comes the directory listing.
drwx------    2 501      501          4096 Oct 27 10:40 cmd
drwx------    2 501      501          4096 Oct 27 10:42 kkkkkk
-rw-r--r--    1 501      501             0 Oct 27 10:35 vipuser.txt
226 Directory send OK.                                                  //能浏览资源
ftp> get vipuser.txt
local: vipuser.txt remote: vipuser.txt
227 Entering Passive Mode (192,168,0,60,197,75)
150 Opening BINARY mode data connection for vipuser.txt (0 bytes).
226 File send OK.                                               //下载成功
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (192,168,0,60,76,88)
150 Ok to send data.
226 File receive OK.
43957 bytes sent in 0.051 seconds (8.4e+02 Kbytes/s)              //上传成功
ftp> rm -rf vipuser.txt
 

550 Permission denied.                                                        //不能删除现有资源

呵呵。。是不是所有条件都满足了!!

任务完成!!