基于OpenBSD的ftp服务器Pure-FTPd

在OpenBSD环境下搭建各种服务器的相关讨论。

版主: lionuxchenjun天地乾坤

主题已锁定
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

基于OpenBSD的ftp服务器Pure-FTPd

帖子 leo » 2010-01-21 11:53

基于OpenBSD的ftp服务器
1.简介及主页
主页地址:http://www.pureftpd.org/project/pure-ftpd
简介太长了,就摘录一段吧:
Pure-FTPd is actively supported, and it was always designed with security in mind, and the code is always re-audited as new kind of vulnerabilities are discussed.
The server can run with privilege separation for paranoid security. It can even run 100% non-root, with its built-in chroot() emulation and virtual accounts.
Transmission of cleartext passwords and commands can be avoided : Pure-FTPd has optional support for an SSL/TLS encryption layer using the OpenSSL library.
2.安装Pure-FTPd-1.0.22
安装方法
这里以i386平台下的当前版OpenBSD为例:

代码: 全选

# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/i386/ 
# pkg_add pure-ftpd-1.0.22.tgz
libiconv-1.13: complete 
pure-ftpd-1.0.22: complete 
--- pure-ftpd-1.0.22 -------------------
In order to start Pure-FTPd at boot-time, add something like this to
/etc/rc.local:
(此处提示:如果想在系统启动时自动运行pure-ftpd,则需要在/etc/rc.local里面加入如下内容。)

代码: 全选

if [ -x /usr/local/sbin/pure-ftpd ]; then
echo Starting Pure-FTPd
/usr/local/sbin/pure-ftpd -A -B -H -u1000
fi
#

启动Pure-FTPd-1.0.22

代码: 全选

# /usr/local/sbin/pure-ftpd
如果你是使用真实环境安装的OpenBSD,你可以按下[Ctrl]+[Alt]+[F2}切换到2号终端,用ftp命令检测一下Ftp服务器,也可以先将pure-ftpd打入后台运行,在本终端内测试;如果你在虚拟系统中安装的OpenBSD,也可以自行使用任意的ftp客户端程序对pure-ftpd服务器进行检测,本例以root身份进行登录:

代码: 全选

# ftp 127.0.0.1
Connected to 127.0.0.1.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 10:32. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (127.0.0.1:root): 【Enter】
331 User root OK. Password required
Password:此处键入你的密码
530 Login authentication failed
ftp: Login root failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
这表明pure-ftpd已经可以正常工作了。

Pure-FTPd随系统自动启动
在我们配置pure-ftpd以前,请先阅读一下官方的说明文件,我们摘录如下:

代码: 全选

Unlike many daemons, Pure-FTPd doesn't read any configuration file (but for
LDAP and SQL). Instead, it uses command-line options. For instance, the '-H'
flag is designed to speed up highly loaded servers, by avoiding DNS lookups.
To enable this, just add it to the server name:
/usr/local/sbin/pure-ftpd -H
Alternative long options are also supported. Here's an equivalent of the
previous command:
/usr/local/sbin/pure-ftpd --dontresolve
But you can use traditional configuration files over command-line
options. Adding a parser for configuration files in the server is a bad
idea. It slows down everything and needs resources for nothing.
If you want to use a configuration file with Pure-FTPd, you can, through
a wrapper. That wrapper will parse a file and convert it to command-line
options. Then, the server will be started with these options.
Please have a look at the 'configuration-files' directory. Copy the sample
configuration file called 'pure-ftpd.conf' to a suitable location, say /etc:
cd configuration-files
cp pure-ftpd.conf /etc
Edit /etc/pure-ftpd.conf according to your needs.
Then, to start the server, just run the following command:
chmod 755 pure-config.pl
./pure-config.pl /etc/pure-ftpd.conf
This is a simple Perl script that will run /usr/local/sbin/pure-ftpd with
the right options, according to the configuration file.
And because there's a Python vs. Perl friendly war since ages, we also
provide a Python version of this program ('pure-config.py').
Should any of these config tools contain a wrong path or fail otherwise,
please file a bug report.
好了,你自己决定怎样做了吗?如果你想继续设置配置文件,请继续阅读,如果你想使用命令行,以下的内容也许你可以忽略了。
如果想在OpenBSD系统启动时自动运行Pure-FTPd,在/etc/rc.local文件里加上如下两行:

代码: 全选

if [ -x /usr/local/sbin/pure-ftpd ]; then
echo Starting Pure-FTPd
/usr/local/sbin/pure-ftpd -A -B -H -u1000
fi
到这一步你需要先配置一下pure-ftpd了,但是你要先找到配置文件,让我们来find一下:

代码: 全选

# find *|grep pure-ftpd.conf
usr/local/share/examples/pure-ftpd/pure-ftpd.conf.sample 
找到这个示例的配置文件后,我们先将其换个名字备份到/etc目录下,/etc目录是所有配置文件的存放地址。

代码: 全选

# cp /usr/local/share/examples/pure-ftpd/pure-ftpd.conf.sample /etc/pure-ftpd.conf
# 
再对/etc/pure-ftpd.conf这个文件做适当的修改。

--------------------------------------------------------------------------------
############################################################
# #
# Configuration file for pure-ftpd wrappers #
# #
############################################################
# If you want to run Pure-FTPd with this configuration
# instead of command-line options, please run the
# following command :
#
# /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf
#
# Please don't forget to have a look at documentation at
# http://www.pureftpd.org/documentation.shtml for a complete list of
# options.
# 将所有登录用户限制在自己的目录里
ChrootEveryone yes
# 如果前面ChrootEveryone的选项被设置成了 "no", 属于下列组的用户将不会被Chroot在自己的目录内,
# 而其他用户将被Pure-FTPd限制在自己的目录内。如果你不想限制任何人,请直接注释掉
# “ChrootEveryone” 和 “TrustedGID”这两句。(除非你有LYP)
# TrustedGID 100

# 打开对崩溃客户端的兼容性
BrokenClientsCompatibility no

# 同时最大用户数量
MaxClientsNumber 50

# 后台运行进程
Daemonize yes

# 每个IP地址最大的连接数
MaxClientsPerIP 8

# 如果你想记录所有的客户端命令,将这里设置成 "yes"。
# 通过复制该指令也可以记录服务器的反应。
VerboseLog no

# 即使客户端没有发送"-a"指令也显示“.”文件。
DisplayDotFiles yes

# 不允许认证的用户登录 - 也就是如果设置为"yes",则ftp服务器仅接受匿名用户的访问。
AnonymousOnly no

# 如果设置为"yes",则ftp服务器不允许匿名用户连接到服务器,只接受经过认证的用户。
NoAnonymous no

# Syslog 选项 (auth, authpriv, daemon, ftp, security, user, local*)
# 默认选项是 "ftp". 如果设置为"none" 则在日志中不记录服务器的访问及回应信息。
SyslogFacility ftp

# 签语饼在英文中叫“FORTUNE COOKIE”,是一种甜脆的元宝状小点心,烘成金黄或杏黄色,
空心内层藏着印有睿智、吉祥文字的纸条,食用时轻轻将其拦腰掰开,便会得到印有中英文的签
语。签语条是一张长6厘米,宽1.3厘米的纸条,它是由大豆油墨、日本进口环保纸张组成;签语
饼带着智慧、故事、情感的文化已在北美、欧洲等地风靡多年。(此处摘自网络,尚未验证。)
# Display fortune cookies

# 命运(签语)文件的位置
# FortunesFile /usr/share/fortune/zippy

# 不在日志文件中解析主机名称。日志文件不太详尽,但更节省带宽。
# 如果你没有自己的DNS服务器或者你的服务器很忙碌,请将其设置为"yes"。
DontResolve yes

# 最大的空闲时间,单位为分钟(默认是15分钟)
MaxIdleTime 15

# LDAP配置文件(请参阅README.LDAP)
# LDAP configuration file

# LDAP配置文件的位置
# LDAPConfigFile /etc/pureftpd-ldap.conf

# MySQL配置文件(请参阅README.MySQL)
# MySQL configuration file (see README.MySQL)

# MySQL配置文件的位置
# MySQLConfigFile /etc/pureftpd-mysql.conf

# Postgres配置文件(请参阅README.PGSQL)

# Postgres configuration file

# Postgres配置文件的位置
# PGSQLConfigFile /etc/pureftpd-pgsql.conf

# PureDB配置文件(请参阅README.Virtual-Users)

# PureDB user database

# PureDB配置文件的位置
# PureDB /etc/pureftpd.pdb


# pure-authd socket的路径(请参阅README.Authentication-Modules)
# Path to pure-authd socket

#ExtAuth的位置
# ExtAuth /var/run/ftpd.sock

# 如果你想启用PAM认证, 去掉下行中的注释符(ob不采用PAM认证)
# PAMAuthentication yes

# 如果你只想采用简单的Unix认证 (/etc/passwd) , 去掉下行的注释符
# UnixAuthentication yes

# 请注意,这里的 LDAPConfigFile, MySQLConfigFile, PAMAuthentication 以及
# UnixAuthentication 只能使用一次, 但是你可以把它们可以混合在一起使用。例如:
# 如果你想先使用MySQLConfigFile认证, 然后再使用UnixAuthentication,首先
# pure-ftp会询问 SQL 服务器, 如果因为因为SQL库里没有这个用户导致认证失败,
# pure-ftp将会接着尝试用 /etc/passwd 和 /etc/shadow对用户进行认证;但如果
# 因为用户密码错误导致认证失败,则认证链将会直接在这里结束。认证链会依据配置
# 文件提供的顺序依次进行认证。

# 'ls' 递归限制。前面的参数是最大的显示文件数量,后面的参数是最多的子目录个数(深度)。
LimitRecursion 2000 8

# 设定匿名用户是否可以创建新目录 ?
AnonymousCanCreateDirs no

# 如果系统负荷高于下面的设定值则pure-ftp会禁止匿名用户下载文件。
MaxLoad 4

# 接受的被动连接(passive connection)的端口范围 - 主要是考虑到防火墙设置。
# PassivePortRange 30000 50000

# 强制某个IP地址使用PASV/EPSV/SPSV 回复。 - 考虑NAT。
# 具有动态IP地址的网关在这里也可以使用域名。(?)
# ForcePassiveIP 192.168.0.1

# 匿名用户的上传下载比率
# AnonymousRatio 1 10

# 对所有用户设置上传下载比率。
# UserRatio指令会覆盖AnonymousRatio的设定值。
# UserRatio 1 10

# 禁止下载所有者为 "ftp"的文件, 换句话说,也就是:
# 禁止下载那些已经上传到服务器上但未被管理员确认的文件。
AntiWarez yes

# 监听的IP地址/端口 (默认是所有IP地址和21端口)。
# Bind 127.0.0.1,21

# 允许匿名用户使用的最大带宽,以KB/s计算。
# AnonymousBandwidth 8

# 所有用户使用的最大带宽(包括匿名用户) ,以KB/s计算。
# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.(这段的意思是否为同时使用
# AnonymousBandwidth和 UserBandwidth来限制带宽则无论哪个都是是毫无意义的?)
# UserBandwidth 8

# 设置文件权限掩码。 <文件的umask>:<目录的umask> 。
# 如果你有妄想症请设置为177:077 。
Umask 133:022

# 设置认证用户登录的UID最小值。
MinUID 100

# 允许认证用户采用FXP方式传输。
AllowUserFXP no

# 允许匿名和非匿名用户采用匿名FXP方式传输。
AllowAnonymousFXP no

# 即使TrustedGID设置为“yes”,并且那些TrustedGID用户可能是文件的拥有者,
# 但如果这里设置成"no",则他们仍然只能访问但不能删除/改写以点('.')开头的文件。
ProhibitDotFilesWrite no

# 禁止“读取”以点开头的文件 (.history, .ssh...)
ProhibitDotFilesRead no

# 永不重写文件。当向服务器上传文件时,如果服务器上已经存在一个同名文件时,
# 将不会重写这个文件,例如服务器上存在一个名为file的文件,则上传
# 的文件将自动重命名为file.1, file.2, file.3, ...
AutoRename no

# 不允许匿名用户上传新文件 (如果设置为no表示允许上传)
AnonymousCantUpload no

# 仅有这里指定IP地址的可以采用非匿名连接,你可以使用这项指令开几个公网
# IP的匿名FTP,而使用防火墙保护的指定IP对ftp服务器进行远程管理。
# 你也可以指定一个经过认证的non-routable(私有)的本地IP(像10.x.x.x),
# 将一个公网只允许匿名登录的FTP服务器设置到另一个IP地址。
#TrustedIP 10.1.1.1

# 如果你想在日志上的每行显示PID,就去掉下面选项的注释号。
#LogPID yes

# 为传送建立一个额外的类似Apache格式的日志文件:
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# 这个日志文件可以被www流量分析娥软件进行处理。
# AltLog clf:/var/log/pureftpd.log

# 为统计报告提供一个额外经过格式优化的日志文件。
# AltLog stats:/var/log/pureftpd.log

# 以标准的W3C的格式生成一个额外的日志文件(兼容于绝大多数商业日志分析程序)
# AltLog w3c:/var/log/pureftpd.log

# 禁止CHMOD命令,用户不能改变其文件的所属权限。
#NoChmod yes

# 允许用户继续上传文件,但是“不”允许其删除服务器上的文件。
#KeepAllFiles yes

# 如果有用户的根目录尚未创建则自动创建这些用户的根目录(Chroot)
#CreateHomeDir yes

# 启用虚拟配额,第一个数是最大文件数量,
# 第二个数是最大的文件大小,以Mb计算,
# 所以1000:10 限制每个用户1000个文件和最大文件为10Mb。
#Quota 1000:10

# 如果你的pure-ftpd以支持独立运行的方式编译。你可以修改pid文件的位置。
# 默认位置是 /var/run/pure-ftpd.pid
#PIDFile /var/run/pure-ftpd.pid

# 如果你的pure-ftpd以支持pure-uploadscript的方式编译,
# 这样可以当新文件上传时pure-ftpd可以将写入信息记录到
# /var/run/pure-ftpd.upload.pipe以便pure-uploadscript
# 可以阅读它并产生一个脚本来处理上传。
#CallUploadScript yes

# 当服务器允许匿名上传时这个选项很有用处。 因为/var/ftp位于/var目录下。
# 它可以节省下一些空间并保护日志文件,当分区使用空间大于X%,
# 新的上传将被禁止。

MaxDiskUsage 99

# 如果你不想让用户重命名服务器上的文件将这个选项设置成'yes'。
#NoRename yes

# 出于抗 '用户误操作' 的考虑 : 例如用户经常犯的一个错误是输入 'chmod 0 public_html',
# 这个命令是有效的,但是这样会导致经验不足的用户误锁住自己的文件,
# 会使管理FTP服务器的技术人员因这种低级错误而浪费大量的时间,
# 如果你确信你的客户具备基本的unix相关知识,那么是否启用这个选项是无关紧要的。
# 如果你提供给客户的是hosting服务,那么你最好启用这个选项。
CustomerProof yes

# 每个用户(名)的同时发生线程数限制。这仅在编译pure-ftpd时带有peruserlimits 选项时才有效。
# (绝大多数二进制再发行版涵盖了这个选项) 。
# 格式为 : <每用户的最大线程数>:<最多的匿名用户线程数>
# 例如, 3:20 代表同一个经过认证的用户最多可以使用三个线程,同时最多允许20个匿名线程。
# PerUserLimits 3:20

# 当上传一个文件时,而且服务器上已经存在同名的该文件的老版本文件,
# 那么这个老版本文件不会被删除或新文件以残缺的方式存在于服务器上,(这里指上传过程中文件不完整)
# 上传的文件先被保存为一个临时文件,当上传完成时,系统会自动用新文件替换旧文件。
# 例如,当上传一个大型的PHP脚本时,服务器仍然用旧文件进行服务,一旦新文件传送完毕,
# 服务器马上切换成新文件提供服务。
# 这个选项不兼容于virtual quotas。
# NoTruncate yes

# 这个选项有三个有效值 :
# 0 : 不能使用 SSL/TLS 加密层 (默认)。
# 1 : 接受传统的和加密的线程。
# 2 : 仅接受密码模式的连接,包括匿名连接。
# 不要盲目地去掉这里的注释符,请您先确认 :
# 1) 你的服务器编译时提供了 SSL/TLS 支持 (--with-tls),
# 2) 设置了一个有效的认证方式,
# 3) 只有兼容的客户端程序才能够访问ftp服务器。
# TLS 1

# 在独立运行模式下只监听IPv4地址 (换而言之禁用IPv6地址的访问)
# 默认情况下IPv4和IPv6全接受。
# IPV4Only yes

# 在独立运行模式下只监听IPv6地址 (换而言之禁用IPv4地址的访问)
# 默认情况下IPv4和IPv6全接受。
# IPV6Only yes

# 支持UTF-8 格式的文件名 (RFC 2640)
# 定义服务器文件系统的字符集以及为不使用UTF-8客户端的远程用户选择默认的字符集。
# 此功能仅在编译pure-ftpd时包含了rfc2640支持时才有效。
# FileSystemCharset GB2312
# ClientCharset GB2312

天地乾坤
钾 K
帖子: 17
注册时间: 2010-02-27 13:23

帖子 天地乾坤 » 2010-03-01 6:54

虽然麻烦点,但是安全好用哦,特别是家里两台电脑互传文件时。总之我觉得比smb方法好!当然了青菜萝卜各有所爱。

wosl2001
钾 K
帖子: 13
注册时间: 2011-01-09 17:16

帖子 wosl2001 » 2011-01-09 17:50

sftp更省事
尘羽星翔!

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2011-01-10 10:46

sftp的速度有限制,要传送大量的文件SFTP并不合适,况且OpenSSH的主要功能和目的还是ssh到server上。

主题已锁定

在线用户

正浏览此版面之用户: 没有注册用户 和 2 访客