您的位置:首页 > 运维架构 > Linux

Linux中搭建ftp服务器

2012-06-12 11:36 459 查看
一.ftp简介:

1.ftp 的协议

是基于应用层默认使用21(连接控制端口)与20(数据传输端口)的文件传输协议。提供网络中两个互联的计算机之间进行文件传输功能。

2.工作模式

(1.主动模式

首先,客户端首先使用端口x向服务器的21端口发送端口同步。并告诉服务器采用的active模式。并告诉服务器自己的数据传输端口是x+1然后,服务器要求客户端输入密码。之后,服务器主动连接客户端的x+1端口。然后得到客户端发来的确认信息。最后,客户端与服务器之间建立tcp的靠连接。

缺点:由于端口变化范围1024-65535,防火墙无法进行提前打开端口,所以无法通过防火墙。

(2.被动模式

首先,客户端首先使用端口x向服务器的21端口发送端口同步。并告诉服务器采用的pasv模式。然后,服务器告诉客户端自己开启的端口是y(不是主动模式下使用的20端口),等待客户端连接服务器的y端口。之后,客户端连接服务器y端口。

可以设置一个端口范围例如:1024-1048。在防火墙上允许目的端口为1024-1048的端口并指向ftp服务器的数据包通过。即可进行连接的建立。被动连接的工作模式和行为特性适用于ftp客户端与ftp服务器端有防火墙的连接。

二.ftp服务器的安装:

1.光盘镜像的挂载

在虚拟机中的setting 中设置dvd的镜像。如图:





新建挂载点 mkdir /mnt/cdrom/
挂载光盘镜像 mount /dev/cdrom /mnt/cdrom/

2.配置yum服务器

本地的yum服务器的脚本文件。位于/etc/yum.repos.d/ 目录下的server.repo文件。生成最初的server.repo文件 cp /etc/yum.repos.d rhel-debuginfo.repo /etc/yum.repos.d/server.repo

修改后的内容如下:

[rhel-server]

name=Red Hat Enterprise Linux server

baseurl=file:///mnt/cdrom/Server

enabled=1

gpgcheck=1

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

[rhel-vt]

name=Red Hat Enterprise vt

baseurl=file:///mnt/cdrom/VT

enabled=1

gpgcheck=1

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

[rhel-cluster]

name=Red Hat Enterprise Linux Cluster

baseurl=file:///mnt/cdrom/Cluster

enabled=1

gpgcheck=1

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

[rhel-clusterstorage]

name=Red Hat Enterprise Linux clusterstorage

baseurl=file:///mnt/cdrom/ClusterStorage

enabled=1

gpgcheck=1

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

3.安装vsftpd服务器。

yum install vsftpd

启动ftp 服务器 service vsftpd start

设置ftp服务器开机自动启动。 Chkconfig vsftpd on

4.新建用户

新建用户 useradd user1

为用户配置密码 echo “123456” |passwd --stdin user1

如果创建其他用户类似。

三.ftp服务器的本地权限和网络权限。

1.本地权限

用户,用户组,other 对目录及文件的操作权限。 例如:在/var/ftp/目录下 执行 chmod o+wt pub //t表示在同一个目录中只能由该文件的所有者对文件进行删除的操作。设置本地权限。

*注:在后面进行虚拟账号设置时一定要注意修改虚拟账号所指向的目录文件的本地权限。是否为其他用户可读模式。按照需要再进行其他权限的操作。

2.网络权限 针对通过网络登陆的用户所设置的权限。如下:

anon_umask = 077 默认 上传文件 umask 屏蔽为 077

//屏蔽掉所属组,其他用户的权限而仅保留所有者的读,写,运行权限

anon_other_write_enable = yes

//允许匿名账号修改,删除

chroot_list_enable=yes //本地账户列表生效

chroot_list_file=/etc/vsftpd/chroot_list

//放置在该文件中的用户不能切换自己的家目录。每一行一个账号。

四.配置文件 /etc/vsftpd/ 目录下的vsftpd.conf 是vsftpd 的主配置文件。常用的配置选项如下:

1.dirmessage_enable=YES //目录消息功能生效。在某一目录下编辑消息文件 .message 文件。当下一次利用ftp登录,登录到相关目录时。系统会自动弹出消息文件。

2.xferlog_enable=yes //启用日志功能存储路径在 /var/log/xferlog

3.xferlog_std_format=YES //存储格式为标准格式。

4.connect_from_port_20=yes

//主动连接时使用 20端口。被动连接时用不到20端口的。

5.chown_upload=YES

//修改上传者的身份。不生效的情况下默认所有者及所属组均为ftp。

6.idle_session_timeout=600 //空闲会话超时

7.data_connection_timeout=120 //连接超时

8.asscii_upload_enable=yes

// 数据的上传方式修改为asscii, 系统默认使用 二进制传递数据

9.asscii_download_enable=yes

// 数据的下载方式修改为asscii,系统默认使用 二进制传递数据

10.ftpd_banner=Welcome to blah FTP

//ftp服务器的条幅。登录ftp服务器时,输入账号之前显示的欢迎信息。

11.deny_email_enable=yes

//使用email账户登录。缺点:系统会将一些ftp信息发送到邮箱中。增加了系统的风险。

12.banned_email_files=/etc/vsftpd/banned_emails

13.userlist_enable = YES //用户列表(验证前直接deny)

*目录/etc/vsftpd/ 下的ftpusers 文件中记录的用户,允许验证,但结果就是不允许通过。user_list 文件中记录的用户,不允许输入密码,直接拒绝。后一种较安全的一种方式。

*在配置文件中添加如下:

14.userlist_deny=NO

//user_list 中记录的用户首先不被拒绝。即允许其进行登录,实现白名单的功能。其他用户默认拒绝。

15.tcp_wrapper=YES

//利用系统中的简易的防火墙。该防火墙由两部分组成。分别为 host.allow 和 host.deny

当一个请求过来时,首先查看这个防火墙的第一个/etc/host.allow (一般符合就允许通过 )。如果不符合就查看第二个/etc/host.deny (一般符合就拒绝)。如果都不匹配就默认允许。(一个好的防火墙会将重点放在hosts.allow文件的修改上。在host.deny文件中默认所有都拒绝。这样更安全。例如 vsftpd:all:deny 。意思为“基于vsftpd服务:任意来源ip地址:执行操作是拒绝。”)

pasv_max_port //被动可供连接的最大端口

pasv_min_port //被动可供连接的最小端口

chroot_local_user=YES //本地用户不能进行目录的切换,生效

五.OPENCA认证服务器的配置

1.修改 /etc/pki/tls/ 下的openssl.cnf 文件

修改45行 指定 CA 服务器的主目录是 /etc/pki/CA

为方便进行简单配置的通过修改88-90行的match规则

在命令行模式下使用 “:88,90 s/match/optional”

此处的目的是放宽环境限制。

2.在ca认证服务器的主目录(/etc/pki/CA)下需要新建的目录有三个 certs , crl ,newcerts 命令如下:

mkdir certs crl newcerts

新创建的文件夹是 index.txt cacert.pem serial 命令如下:

touch index.txt serial 在serial中写入初始数据。

echo "01" >serial 在serial文件中写入数据“01”

3. 创建ca 私钥

openssl genrsa 1024 >private/cakey.pem

4.修改证书权限为r,w 可读可写。

chmod 600 private/cakey.pem

5. 创建ca 证书 (自己请求自己不需要制作请求文件)

openssl req -new -x509 -key private/cakey.pem -out

cacert.pem -days 3650

六.ftp上的ftps配置

1. 在ftp服务器上新建存放的目录

mkdir /etc/vsftpd/certs

2. 在该目录中新建钥匙

openssl genrsa 1024 >vsftpd.key

3. 根据钥匙制作请求文件

openssl req -new -key vsftpd.key -out vsftpd.csr

4. ftp服务器的证书制作

openssl ca -in vsftpd.csr -out vsftpd.cert

5. ftp服务器 + 证书

在ftp的主配置文件在/etc/vsftpd/vsftpd.conf中添加如下内容:

ssl_enable=YES //开启ssl验证服务

force_local_logins_ssl=YES //开启登录使用ssl加密

force_local_data_ssl=YES //开启数据的ssl加密传输

数据

ssl_tlsvl=YES //标准的传输

ssl_sslv3=YES //不同版本的传输

ssl_sslv2=YES

rsa_cert_file=/etc/vsftpd/certs/vsftpd.cert

//指明证书文件的位置及名称

rsa_private_key_file=/etc/vsftpd/certs/vsftpd.key

// 指明私钥文件的位置及名称

这样就可以进行测试了!我是用的是flashFXP软件。

加密连接建立的过程 如下





FlashFXP中安装的证书





安全的ftp构建完毕!

七.ftp架构实例。

1.要求如下:

为ftp服务器分配一个单独的存储空间。一块单独的硬盘上。在ftp上提供匿名账号和虚拟账号登录。其中对匿名账号限速100k/s。虚拟账号限速1M/s。同时在线的用户数进行限制为20。同一账号不能同时打开三个以上的窗口。为个人账户分配10M的磁盘配额。

2.对于要求的分析操作步骤大致如下:

(1.对文件系统的修改配置:

新增硬盘—》分区—》格式化---挂载 /mnt/ftppart

公共目录 /mnt/ftppart/public o+r

个人目录 /mnt/ftppart/home/ 10M

(2.对配置文件的修改:

速度 匿名 100k/s 本地 1M/s

同时在线用户数 20

每用户连接数 3

3.配置ftp服务器

(1.首先将虚拟机关机 poweroff,然后为虚拟机添加一块硬盘。如下:





(2.启动后对硬盘进行分区使用fdisk -l 对硬盘的标识进行查询

使用 fdisk /dev/sdb //进行分区

n //新建分区

p //新建主分区

分区号 1-4 :1

分区的起始位置 //默认,直接回车

w //保存对于新建分区的配置

(3. 完成分区的划分后使用 partprobe /dev/sdb 重新读取了分区表了。

(4. 对新建分区进行格式化

mkfs -t ext3 /dev/sdb1 //文件类型为ext3。

(5. 新建光盘挂载点

mkdir /mnt/ftppart

(6.挂载硬盘

mount /dev/sdb1 /mnt/ftppart/

(7.查看硬盘的挂载情况

使用 df -h //查看硬盘的挂载情况及使用情况

(8.挂载安装vsftpd主程序

挂载光盘 mount /dev/cdrom /mnt/cdrom/

(9.安装vfsftpd软件 在/mnt/cdrom/Server/目录下使用

rpm -ivh vsftpd-2.0.5-16.e15.i386.rpm

(10.切换到主目录/mnt/ftppart/目录下。进行新建用户设置。

*新建目录 mkdir public

*在public中新建两个文件 touch 文件1 文件2

*新建两个本地用户 user1 user2 命令如下:

useradd user1

useradd user2

*为用户配置口令 echo "123456" |passwd --stdin user1

echo "123456" |passwd --stdin user2

*修改/etc/passwd 文件中 user1 user2 两个用户的家目录的路径位置

*修改新建用户时的默认家目录

修改方式如下:useradd -D -b /mnt/ftppart/home

查看分区情况:useradd -D查看useradd的相关参数信息

(11.修改用户的磁盘配额 首先修改文件系统表是 /etc/目录下的 fstab文件。

*在最后一行添加的内容如下:

/dev/sdb1(分区名) /mnt/ftppart(挂载点) auto(连接系统类型) default,usrquota 0 0

*使用口令 mount -o remount /dev/sdb1 进行重新挂载。类似于挂载点重新刷新。

*产生所有用户的配额文件

在 /mnt/ftppart/ 目录下使用 quotacheck -augv -c

扫描的快慢受文件的大小及磁盘的大小影响。

在 quotachek 目录下生成 aquota.user 文件

使用edquota -u user1(用户名,必须是已经存在的用户)

使用edquota -p user1 user2

最后使用 edquota /dev/sdb1 启用磁盘配额功能

添加到开机脚本中echo “quotaon /dev/sdb1”>>/etc/rc.d/rc.local

(12.ftp 配置文件配置

修改 /etc/vsftpd/vsftpd.conf 添加如下内容

anon_root=/mnt/ftppart/public 匿名账号的根目录

anon_max_rate=100000 匿名账号的最大传输速率100k。默认大为为b

local_max_rate=1000000 本地文件的最大传输速率1M

max_clients=20 最大在线用户数

max_per_ip=2 同一个源ip的连接最多两个用户在自己的家目录内有任意的权限。

八.新建虚拟用户 1.本地用户与虚拟用户的简介

*本地账号 //可以登录系统的用户

*虚拟账号 //不存在的用户称之为虚拟用户

实现原理是使用虚拟账号登录ftp,再系统中设置将虚拟账号与服务器账号关联到一起。

2.步骤如下:

(1. 在/mnt/cdrom/Server/ 安装db工具

yum install db4-utils -y

(2.在 /etc/vsftpd/ 目录下 新建 文件vuser.txt

vim vuser.txt 添加内容如下

lisi //账号

123456 //密码

zhangsan //账号

123456 //密码

保存并退出!

(3.在/etc/vsftpd/目录下 使用 db_load -T -t hash -f vuser.txt vuser.db 生成db文件

(4.修改接口配置

在目录/etc/pam.d/下的 vsftpd

修改为,如下:

查看man手册man /usr/share/doc/pam-0.99.6.2/txts/

README.pam_userdb

该模块是用于检查用户名和口令对。

复制新的文件 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.vu

修改vsftpd.vu新内容为,如下

auth required pam_userdb.so db=/etc/vsftpd/vuser //验证用户

account required pam_userdb.so db=/etc/vsftpd/vuser

//验证口令

修改接口后告诉vsftpd

vim /etc/vsftpd/vsftpd.conf

修改

pam_service_name=vsftpd.vu //接口

guest_enable=YES //来宾账号生效

guest_username=user1 //来宾账号名字

user_sub_token=$USER

local_root=/mnt/ftppart/home/$USER //为虚拟账号设置单独的目录

local_root=/mnt/ftppart/public //设置默认的公共账号

登录截图如下:





用户lisi登录





用户zhangsan登录





ftp服务器部分就可以到这里了!!!

嗯,韩宇说的对!!!
本文出自 “交流群“143420878”” 博客,请务必保留此出处http://donghao123.blog.51cto.com/4879169/896131
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: