在redhat5部署FTP服务

实验环境介绍:

操作系统:Redhat5.8_X64bit

实验平台:VMware Workstation


一、基于匿名用户的FTP服务部署

1、匿名FTP

   访问匿名的FTP服务器时不需要密码,只需要用户名"ftp"和"anonymous"。

2、安装vsftpd软件

#yum install vsftpd
#rpm -ql vsftpd

3、启动vsftpd服务

#service vsftpd start
#chkconfig vsftpd on

4、测试ftp服务是否可以访问

[root@localhost ~]# ftp 192.168.3.3
Connected to 192.168.3.3.
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.3.3:root): ftp   //使用匿名用户登录(ftp或者anonymous)
331 Please specify the password.
Password:    -->密码“空”
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

5、调整匿名上传目录权限,并准备下载测试文件。

# ls -ld /var/ftp/pub/    -->查看修改前的权限
drwxr-xr-x 2 root root 4096Dec  5 2011 /var/ftp/pub/
# chown ftp /var/ftp/pub  -->将pub目录属主设置为ftp
You have new mail in/var/spool/mail/root
# ls -ld /var/ftp/pub/   -->确认修改后的权限
drwxr-xr-x 2 ftp root 4096Dec  5 2011 /var/ftp/pub/
# cp /etc/inittab /var/ftp/   -->复制一个文件到“/var/ftp/”目录,已提供下载测试使用。


6、修改vsftpd.conf配置文件,开放匿名用户访问、上传许可

# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES    //允许匿名用户访问
local_enable=NO       //若不需要启用本地用户,可将此配置项设为NO
write_enable=YES      //允许开放写权限
anon_umask=022        //设置匿名用户上传建立文件时的权限掩码
anon_upload_enable        //允许匿名上传文件
anon_mkdir_write_enable=YES    //允许匿名用户创建目录
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO      //未启用本地用户时,可以将用户列表功能禁用
tcp_wrappers=YES

7、重新启动vsftpd服务

#service vsftpd restart


8、在客户端访问FTP服务器(192.168.3.3),测试下载上传功能

[root@localhost ~]# ftp192.168.3.3    //登录vsftpd服务器
Connected to 192.168.3.3.
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.3.3:root): ftp    //以匿名用户进行认证,密码可为空或任意字符
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls     //查看FTP根目录下的文件、目录列表
227 Entering Passive Mode (192,168,3,3,20,191)
150 Here comes the directory listing.
-rw-r--r--    1 0        0      1666 Nov 25 07:57 inittab
drwxr-xr-x    2 14        0        4096 Nov 25 07:57 pub
226 Directory send OK.
ftp> get inittab     //下载服务器中的inittab文件到本地
local: inittab remote: inittab
227 Entering Passive Mode (192,168,3,3,145,227)
150 Opening BINARY mode data connection for inittab (1666bytes).
226 File send OK.
1666 bytes received in 0.016 seconds (99 Kbytes/s)
ftp> cd pub  //切换到服务器中用于上传文件的目录
250 Directory successfully changed.
ftp> put install.log  //上传本地文件到服务器上
local: install.log remote: install.log
227 Entering Passive Mode (192,168,3,3,239,137)
150 Ok to send data.
226 File receive OK.
56895 bytes sent in 0.034 seconds (1.6e+03 Kbytes/s)
ftp> ls   //查看上传目录中的文件属性
227 Entering Passive Mode (192,168,3,3,149,233)
150 Here comes the directory listing.
-rw-------    1 14     50   56895Nov 26 13:04 install.log
226 Directory send OK.
ftp> quit  //断开FTP连接并退出
221 Goodbye.
[root@localhost ~]# ls -lh inittab  //查看下载到本地的文件
-rw-r--r-- 1 root root 1.7K Nov 26 21:03 inittab
 
如果只是下载文件,也可以使用wget工具,指定服务器地址及文件路径即可进行下载
[root@localhost ~]# wget ftp://192.168.3.3/inittab
--2015-11-26 21:22:29--  ftp://192.168.3.3/inittab
           => `inittab'
Connecting to 192.168.3.3:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD not needed.
==> SIZE inittab ... 1666
==> PASV ... done.    ==> RETR inittab ... done.
Length: 1666 (1.6K)
 
100%[===================>] 1,666   --.-K/s   in0s      
2015-11-26 21:22:29 (4.24 MB/s) - `inittab' saved [1666]


注意:由于匿名FTP根目录”/var/ftp/”的默认权限为755,因此不要将目录的属主更改为ftp,否则匿名访问时可能会报错”500 OOPS:vsftpd:refusing to run with writable anonymous root”,导致访问失败。

二、基于本地用户的FTP服务部署

vsftpd可以直接使用Linux系统的本地用户作为FTP用户,提供基于用户名和密码的登录验证。使用本地用户登录FTP服务器后,默认将位于自己的宿主目录中,且在宿主目录中拥有读写权限,并允许切换到其他目录。使用chroot_local_user配置项可以将本地用户禁锢在宿主目录中(不允许切换到其他目录下),使用local_root配置项可以将本地用户的ftp根目录设置为同一个文件夹。

  下面配置一个基于本地用户并进行带宽、用户数限制的FTP服务器为例,操作步骤如下:

1、添加FTP测试用户(即本地用户),并准备下载测试文件。

[root@localhost ~]# useradd test1
[root@localhost ~]# passwd test1
[root@localhost ~]# ls -lh /etc/*.conf > /home/test1/etcconf.list


2、修改vsftpd.conf配置文件,开放本地用户。

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO  //若不需要启用匿名访问,可将此配置项设为NO
local_enable=YES    //允许本地用户访问
write_enable=YES    //允许开放写权限
local_umask=022     //设置本地用户上传建立文件时的权限掩码
chroot_local_user=YES  //为安全起见,建议将用户禁锢于宿主目录中
max_client=20        //限制并发客户连接数为最多20个
max_per_ip=2         //限制来自同一IP的客户连接数最多为2个
local_max_rate=102400   //本地用户下载、上传限速为100KB/s  
pasv_enable=YES     //允许被动模式并设置端口范围
pasv_min_port=24500
pasv_max_port=24600
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
:wq 保存退出


如果希望vsftpd服务只对特定的本地用户开放,可以使用userlist_enable、userlist_deny配置项并结合用户列表文件'/etc/vsftpd/user_list'实现

例如:结合user_list文件配置仅允许本地用户test1访问vsftpd服务器。

#vim /etc/vsftpd/user_list
test1          //添加此行,并清空其他内容
#vim /etc/vsftpd/vsftpd.conf  //修改或添加以下两行配置项
userlist_enable=YES
userlist_deny=NO


3、重新启动vsftpd服务

[root@localhost ~]# service vsftpd restart

4、在客户端访问FTP服务器(192.168.3.3),测试下载及上传功能

[root@localhost ~]# ftp 192.168.3.3   //登录vsftpd服务器
Connected to 192.168.3.3.
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.3.3:root): test1  //test1用户登录
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd   //查看当前目录
257 "/"
ftp> ls  //查看FTP根目录下的文件、目录列表
227 Entering Passive Mode (192,168,3,3,95,218)
150 Here comes the directory listing.
-rw-r--r--    1 0        0            2831 Nov 27 12:19 etcconf.list
226 Directory send OK.
ftp> get etcconf.list  //下载服务器中的etcconf.list文件到本地
local: etcconf.list remote: etcconf.list
227 Entering Passive Mode (192,168,3,3,95,248)
150 Opening BINARY mode data connection for etcconf.list (2831 bytes).
226 File send OK.
2831 bytes received in 0.00064 seconds (4.3e+03 Kbytes/s)
ftp> put install.log   //上传本地文件到服务器上
local: install.log remote: install.log
227 Entering Passive Mode (192,168,3,3,95,203)
150 Ok to send data.
226 File receive OK.
56895 bytes sent in 0.038 seconds (1.5e+03 Kbytes/s)
ftp> ls   //查看上传目录中的文件属性
227 Entering Passive Mode (192,168,3,3,95,250)
150 Here comes the directory listing.
-rw-r--r--    1 0        0            2831 Nov 27 12:19 etcconf.list
-rw-r--r--    1 502      502         56895 Nov 27 13:23 install.log
226 Directory send OK.
ftp>


三、建立基于虚拟用户的vsftpd服务

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

vsftpd服务的虚拟用户数据库时使用Berkeley DB格式的数据库。建立该数据库文件需要用到db_load命令工具。

[root@localhost ~]# yum install db4-utils 
//安装此包获得db_load命令


2、建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行为上一行中的用户所对应的密码。

[root@localhost ~]# vim /etc/vsftpd/vusers.list  (文件名可以随便取)
mike     
123
john
456

3、然后用db_load工具将列表文件转化为DB数据库文件

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@localhost vsftpd]# file vusers.db   //查看文件类型
vusers.db: Berkeley DB (Hash, version 8, native byte-order)
[root@localhost vsftpd]# chown 600 /etc/vsftpd/vusers.*  //降低文件权限以提高安全性
db_load选项说明:
     -f:用于指定用户名/密码列表文件
     -T:允许非Berkeley DB的应用程序使用从文本格式转换的DB数据文件
     -t hash:指定读取数据文件的基本方法
关于db_load命令的详细说明可参阅"cat /usr/share/doc/db4-utils-4.3.29/utility/db_load.html
"文件。


4、建立FTP访问的根目录及虚拟用户对应的系统账号

   vsftpd虚拟用户需要有一个对应的系统用户账号(该账号无需设置密码及登录shell),该用户账号的宿主目录作为所有虚拟用户登录后的共同FTP根目录。

[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual //建立映射账号virtual
[root@localhost ~]# chmod 755 /var/ftproot/     //更改FTP根目录权限
[root@localhost ~]# ls -lh /boot >/var/ftproot/vutest.file  //建立测试文件


5、建立PAM认证文件

   PAM配置文件主要用于为程序提供用户认证控制,vsftpd服务使用默认的PAM配置文件为“/etc/pam.d/vsftpd”,可以参考该文件的格式建立新的PAM配置文件,用于虚拟用户认证控制。

[root@localhost ~]# vim /etc/pam.d/vsftpd.vu  //添加下面几行内容
#%PAM-1.0
auth       required      pam_userdb.so db=/etc/vsftpd/vusers
account    required      pam_userdb.so db=/etc/vsftpd/vusers

注意:db指向的数据库文件vusers(省略.db扩展名)

6、修改vsftpd.conf配置文件,添加虚拟用户支持

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES       //使用虚拟用户需要启用本地用户
write_enable=YES
anon_umask=022     //设置虚拟用户所上传文件的默认权限掩码
guest_enable=YES     //启用用户映射功能
guest_username=virtual   //将映射用户指定为virtual
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

7、为不同的虚拟用户建立独立的配置文件

    通过前面几个步骤,实际上已经可以重新启动vsftpd并提供服务,使用虚拟用户账号可以登陆FTP服务器下载文件。本步骤将介绍为个别虚拟用户设置不同的访问权限,

1)、修改vsftpd.conf主配置文件,添加用户配置目录支持。

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir  //添加此行配置项,指定用户配置目录位置

2)、为mike、john建立的配置目录文件

[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir/   //创建用户配置目录
[root@localhost ~]# cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# vim john    //为john用户建立独立的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@localhost vusers_dir]# touch mike      //为mike用户建立空配置文件(无额外权限设置)

8、重新启动vsftpd服务

[root@localhost ~]# service vsftpd restart

9、使用虚拟用户账号访问FTP服务

 在客户端使用虚拟用户mike、john分别登录FTP服务器进行下载、上传文件测试,结果如下:

  • 使用mike用户可以登录测试vsftpd服务器,并可以浏览、下载文件,但是无法上传文件。

  • 使用john用户可以登录vsftpd服务器,且可以浏览、下载文件,也可以上传文件。

  • 使用匿名用户或者其他系统用户时,将不能登录该vsftpd服务器。