在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服务器。