RHEL5下搭建FTP文件传输服务


RHEL5下搭建FTP文件传输服务


FTP全名是FileTransfer Protocol(文件传输协议) C/S架构

FTP可以跨越平台,也可以运行在Internet上面,在linux下面FTP可以通过很多软件来实现,我们linux下面最常用的FTP服务器架设使用vsftpd(Very Secure FTP Daemon)软件,支持15000个用户的并发访问。Vsftpd是一个基于GPL发布的FTP服务器软件,其中vs是指very secure的缩写,由此可以看出,本软件的的初衷是为了服务的安全。


下面是关于FTP这个服务的属性

FTP服务相关软件

IIS Serv-U Vsftpd proftpd pureftpd

FTP客户端相关软件

ftp命令 CuteFTPFlashFTP LeapFTP Filezilla gftp kuftp

VSFTP的守护进程

/usr/sbin/vsftpd

FTP的脚本

/etc/init.d/vsftpd

FTP的端口

TCP协议的20,21端口与客户端进行通信

20用于建立数据连接,传输文件数据。

21用于建立控制连接,并传输FTP控制命令。

用户控制列表文件

/etc/vsftpd/ ftpusers   文件中的用户禁止登录FTP服务器(黑名单)

/etc/vsftpd/ user_list  文件中的用户可能被禁止或允许登录FTP服务器,具体看vsftpd.conf的设置


主配置文件

/etc/vsftpd/vsftpd.conf


FTP的工作模式:

主动模式:

被动模式:


主动模式与被动模式的优缺点:

主动FTPFTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTPFTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

022502578.png

根据传输文件是否进行字符转换分为:

文本模式(又称为ASCII)以文本序列传输数据,用的较多

二进制模式(又称为Binary模式)以二进制序列传输数据


FTP用户类型;

匿名用户:anonymous或ftp

本地用户:帐号名称、密码等信息保存在passwd、shadow文件中

虚拟用户:使用独立的帐号/密码数据文件(将FTP帐号与系统帐号的关联性降低)


下面来具体搭建FTP服务

搭建yum仓库:

[root@crushlinux ~]# mount /dev/cdrom /mnt

[root@crushlinux ~]# cat/etc/yum.repos.d/rhel-debuginfo.repo

[rhel-Server]

name=Red Hat Enterprise Server

baseurl=file:///mnt/Server

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[root@crushlinux ~]# yum -y install vsftpd

[root@crushlinux ~]# cat/etc/vsftpd/vsftpd.conf

常用的匿名FTP配置项

anonymous_enable=YES            是否允许匿名用户访问

anon_umask=022                  匿名用户所上传文件的权限掩码

anon_root=/var/ftp              设置匿名用户的FTP根目录

anon_upload_enable=YES          是否允许匿名用户上传文件

anon_mkdir_write_enable=YES     是否允许匿名用户允许创建目录

anon_other_write_enable=YES     是否允许匿名用户有其他写入权(改名,删除,覆盖)

anon_max_rate=0                 限制最大传输速率(字节/秒)0为无限制


常用的本地用户FTP配置项

local_enable=YES                是否允许本地系统用户访问

local_umask=022                 本地用户所上传文件的权限掩码

local_root=/var/ftp             设置本地用户的FTP根目录

chroot_list_enable=YES                      表示是否开启chroot的环境,默认没有开启

chroot_list_file=/etc/vsftpd/chroot_list

表示写在/etc/vsftpd/chroot_list文件里面的用户是不可以出chroot环境的。默认是可以的。

Chroot_local_user=YES                             表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。

local_max_rate=0                限制最大传输速率(字节/秒)0为无限制


常用的全局配置项

listen=YES                      是否以独立运行的方式监听服务

listen_address=192.168.4.1      设置监听FTP服务的IP地址

listen_port=21                  设置监听FTP服务的端口号

write_enable=YES                是否启用写入权限(上传,删除文件)

download_enable=YES            是否允许下载文件

dirmessage_enable=YES                     用户切换进入目录时显示.message文件

xferlog_enable=YES                          启用日志文件,记录到/var/log/xferlog

xferlog_std_format=YES                           启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式

connect_from_port_20=YES        允许服务器主动模式(从20端口建立数据连接)

pasv_enable=YES                 允许服务器被动模式

pasv_max_port=24600             设置被动模式服务器的最大端口号

pasv_min_port=24500             设置被动模式服务器的最小端口号

pam_service_name=vsftpd         用户认证的PAM文件位置(/etc/pam.d/vsftpd.vu)

userlist_enable=YES             是否启用user_list列表文件

userlist_deny=YES               是否禁用user_list中的用户

max_clients=0                   限制并发客户端连接数

max_per_ip=0                    限制同一IP地址的并发连接数

tcp_wrappers=YES                是否启用tcp_wrappers主机访问控制

chown_username=root                               表示匿名用户上传的文件的拥有人是root,默认是关闭的

ascii_upload_enable=YES                          表示是否允许用户可以上传一个二进制文件,默认是不允许的

ascii_download_enable=YES           这个是代表是否允许用户可以下载一个二进制文件,默认是不允许的

nopriv_user=vsftpd                  设置支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户

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

ftpd_banner=Welcome toAwei FTP servers 设定Vsftpd的登陆标语

guest_enable=YES                设置启用虚拟用户功能

guest_username=ftpuser指定虚拟用户的宿主用户virtual_use_local_privs=YES设定虚拟用户的权限符合他们的宿主用户user_config_dir=/etc/vsftpd/vconf 设定虚拟用户个人Vsftp的配置文件存放路径


案例1:

1.创建测试文件

2.匿名用户ftp对/var/ftp/pub有写入权限

3.允许匿名用户浏览

4.允许用户(匿名,本地,虚拟)有上传权限

5.允许匿名用户有上传权限

6.允许匿名用户有上传文件夹权限

7.禁止匿名用户有删除,覆盖等权限

[root@crushlinux ~]# tar zcf/var/ftp/vsftpdconf.tar.gz /etc/vsftpd/

[root@crushlinux ~]# ls /var/ftp/

pub vsftpdconf.tar.gz

[root@crushlinux ~]# chown ftp/var/ftp/pub

[root@crushlinux ~]# ls �Cld /var/ftp/pub

[root@crushlinux ~]# vi/etc/vsftpd/vsftpd.conf

write_enable=YES

anon_umask=022

anonymous_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=NO


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

[root@crushlinux ~]# service vsftpdrestart

[root@crushlinux ~]# netstat -anptu |grep"vsftpd"

tcp       0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      2555/vsftpd  


使用ftp工具进行测试

[root@crushlinux ~]# ftp 192.168.200.129

Connected to 192.168.200.129.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authenticationtype

Name (192.168.200.129:root): ftp

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,200,129,49,66)

150 Here comes the directory listing.

drwxr-xr-x   2 14       0            4096 Dec 04  2009 pub

-rw-r--r--   1 0        0             823 Nov 20 16:28 vsftpdconf.tar.gz

226 Directory send OK.

ftp> lcd /opt

Local directory now /opt

ftp> get vsftpdconf.tar.gz

local: vsftpdconf.tar.gz remote:vsftpdconf.tar.gz

227 Entering Passive Mode(192,168,200,129,50,247)

150 Opening BINARY mode data connectionfor vsftpdconf.tar.gz (823 bytes).

226 File send OK.

823 bytes received in 0.0015 seconds(5.2e+02 Kbytes/s)

ftp> bye

221 Goodbye.

[root@crushlinux ~]# ls /opt/

vsftpdconf.tar.gz


使用lftp工具进行测试

[root@crushlinux test]# lftp 192.168.200.129-p 21 -u username,password

[root@crushlinux ~]# lftp 192.168.200.129

lftp 192.168.200.129:~> ls

drwxr-xr-x   2 14       0            4096 Dec 04  2009 pub

-rw-r--r--   1 0        0             823 Nov 20 16:28 vsftpdconf.tar.gz

lftp 192.168.200.129:/> lcd /root/

lcd 成功, 本地目录=/root

lftp 192.168.200.129:/> getvsftpdconf.tar.gz

823 bytes transferred

lftp 192.168.200.129:/> put install.log

put: Access failed: 553 Could not createfile. (install.log)

lftp 192.168.200.129:/> bye


使用wget工具进行测试

[root@crushlinux ~]# rm -rfvsftpdconf.tar.gz

[root@crushlinux ~]# wgetftp://192.168.200.129/vsftpdconf.tar.gz

[root@crushlinux ~]# ls

vsftpdconf.tar.gz


案例2:

1.创建测试帐号u1、u2、u3密码都为“user”

2.允许本地用户访问

3.将权限掩码设为077

4.将本地帐号禁锢在宿主目录中

5.只允许u1、u2两个用户可以登录


[root@crushlinux ~]# useradd u1

[root@crushlinux ~]# echo "user"|passwd --stdin u1

[root@crushlinux ~]# useradd u2

[root@crushlinux ~]# echo "user"|passwd --stdin u2

[root@crushlinux ~]# useradd u3

[root@crushlinux ~]# echo "user"|passwd --stdin u3


[root@crushlinux ~]# vi/etc/vsftpd/vsftpd.conf

write_enable=YES

anon_umask=022

anonymous_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=NO


local_enable=YES

local_umask=077

chroot_local_user=YES


dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd

userlist_enable=YES

userlist_deny=NO

tcp_wrappers=YES


[root@crushlinux test]# vi/etc/vsftpd/user_list

u1

u2

[root@crushlinux ~]# service vsftpdrestart


通过URL地址形式验证:ftp://username:password@IP

022545940.png


[root@crushlinux ~]# vi/etc/vsftpd/user_list

user1

user2

[root@crushlinux ~]# vi/etc/vsftpd/vsftpd.conf

userlist_enable=YES

userlist_deny=NO

[root@crushlinux ~]# service vsftpdrestart

[root@crushlinux ~]# touch/home/u{1,2,3}/test

[root@crushlinux ~]# ls /home/u{1,2,3}

/home/u1:

test


/home/u2:

test


/home/u3:

test



[root@crushlinux ~]# lftp 192.168.200.129-p 21 -u u1,user

lftp [email protected]:~> ls

-rw-r--r--    1 0       0               0 Nov 20 17:08 test

lftp [email protected]:~> bye

[root@crushlinux ~]# lftp 192.168.200.129-p 21 -u u2,user

lftp [email protected]:~> ls

-rw-r--r--    1 0       0               0 Nov 20 17:08test

lftp [email protected]:~> bye

[root@crushlinux ~]# lftp 192.168.200.129-p 21 -u u3,user

lftp [email protected]:~> ls

`ls' at 0 [重新连接前延时: 28]  

中断

lftp [email protected]:~> bye


案例3:

1修改vsftpd服务的监听地址,端口

1.1IP为:192.168.200.129

1.2端口为:2121

2使用vsftpd服务的被动模式

2.1下限端口为24500

2.2上限端口为24600

3限制vsftpd服务的并发数,传输速度

3.1限制并发客户连接最多200

3.2限制每个IP地址的连接数最多50

3.3限制匿名用户传输速率为50KB/s

3.4限制本地用户传输速率为200KB/s


[root@crushlinux ~]# netstat -naptu |grep"vsftpd"

[root@crushlinux ~]# vi/etc/vsftpd/vsftpd.conf

listen=YES

listen_address=192.168.200.129

listen_port=2121


pasv_enable=YES

pasv_min_port=24500

pasv_max_port=24600


max_clients=200

max_per_ip=50

anon_max_rate=50000

local_max_rate=200000


[root@crushlinux ~]# service vsftpdrestart

[root@crushlinux ~]# netstat -naptu |grep"vsftpd"

tcp       0      0 192.168.200.129:2121        0.0.0.0:*                   LISTEN      3552/vsftpd        


构建基于虚拟用户的FTP服务

创建账号数据

1.建立虚拟FTP用户的帐号数据库文件

2.创建FTP根目录及虚拟用户映射的系统用户

3.建立支持虚拟用户的PAM认证文件

添加虚拟用户支持

4.在vsftpd.conf文件中添加支持配置

5.为个别虚拟用户建立独立的配置文件

启动服务并测试

6.重新加载vsftpd配置

7.使用虚拟FTP账户访问测试


1.建立虚拟FTP用户的帐号数据库文件用到db_load工具先安装软件包

[root@crushlinux ~]# rpm -ivh/mnt/Server/db4-utils-4.3.29-10.el5.i386.rpm

warning:/mnt/Server/db4-utils-4.3.29-10.el5.i386.rpm: Header V3 DSA signature: NOKEY,key ID 37017186

Preparing...                ###########################################[100%]

 1:db4-utils             ########################################### [100%]

[root@crushlinux ~]# cd /etc/vsftpd/

[root@crushlinux vsftpd]# vi vusers.list    奇数行:用户名偶数行:密码

mike

123456

john

123456

jack

123456

通过db_load工具创建出BerkeleyDB格式的数据库文件

[root@crushlinux vsftpd]# db_load -T -thash -f vusers.list vusers.db

-f      指定数据原文件

-T      允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件

-t hash 读取文件的基本方法


为了安全起见对权限进行严格控制

[root@crushlinux vsftpd]# chmod 600/etc/vsftpd/vusers.*

[root@crushlinux vsftpd]# ll -h/etc/vsftpd/vusers.*

-rw------- 1 root root 12K 09-24 11:27/etc/vsftpd/vusers.db

-rw------- 1 root root  25 09-24 11:26 /etc/vsftpd/vusers.list



2.创建FTP根目录及虚拟用户映射的系统用户

[root@crushlinux vsftpd]# useradd -d/var/ftproot -s /sbin/nologin  virtual

[root@crushlinux vsftpd]# chmod 755/var/ftproot/

3.建立支持虚拟用户的PAM认证文件

[root@crushlinux vsftpd]# vi/etc/pam.d/vsftpd.vu

#%PAM-1.0

auth      required     pam_userdb.sodb=/etc/vsftpd/vusers

account   required     pam_userdb.sodb=/etc/vsftpd/vusers

对应第1步建立的vusers.db文件


4.在vsftpd.conf文件中添加支持配置

[root@crushlinux vsftpd]# vi/etc/vsftpd/vsftpd.conf

guest_enable=YES            启用用户映射功能

guest_username=virtual      指定映射的系统用户名称

pam_service_name=vsftpd.vu  指定新的PAM认证文件


5.为个别虚拟用户建立独立的配置文件

[root@crushlinux vsftpd]# vi /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_dir  用户配置目录支持

为用户mike、john建立独立的配置目录及文件

[root@crushlinux vsftpd]# mkdir/etc/vsftpd/vusers_dir

[root@crushlinux vsftpd]# cd/etc/vsftpd/vusers_dir

[root@crushlinux vusers_dir]# vi john

anon_upload_enable=YES

anon_mkdir_write_enable=YES

[root@crushlinux vusers_dir]# touch mike

[root@crushlinux vusers_dir]# touch jack

[root@crushlinux vusers_dir]# servicevsftpd restart

测试验证:

[root@crushlinux vusers_dir]# lftp192.168.200.129 -p 2121 -u john,123456

[root@crushlinux vusers_dir]# lftp192.168.200.129 -p 2121 -u mike,123456


你可能感兴趣的:(vsftpd,RHEL,虚拟用户)