注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

c.pass 的博客

众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。

 
 
 

日志

 
 

FreeBSD配置FTP(上)  

2010-08-23 15:19:37|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

FTP 服务器

FTP (File Transfer Protocol) 是常用的网络协议,主要的功能是用来传输档案,我们时常从 FTP 站台

下载档案。本章将介绍如何使用 FreeBSD 架设 FTP 服务器,并说明各种 FTP 服务器的管理技巧。本章除

了 FreeBSD 内附的 FTP 服务器软件外,并将介绍笔者开发的 SmbFTPD。读完本章后,您将进一步了解下

列主题:

?FTP 协定的运作方法。
?如何使用 FreeBSD FTP。
?加强权限控制以建立安全的 FTP 服务器。
?安装设定 SmbFTPD。
?如何使用具 SSL 加密的 FTP。
?如何进行流量控制。
15.1 FTP 概论

FTP 是一个历史悠久的网络通讯协议,和大多数的网络协议一样,它采用 Client/Server 架构,各地的使

用者可以经由网络连到服务器上传或下载档案。FTP 协议比较特别的地方在于它在使用时必须建立二个联

机:一个用来传输指令、一个用来传输档案。

图 15-1


当我们使用 FTP 软件连到 FTP 服务器时,客户端会先连到服务器的连接埠 21,并建立一条「控制联机」

(Control Stream)。接下来,您会输入账号、密码等指令,这些指令及 FTP 的响应都是使用都是使用「控

制联机」。当您要下载档案时,或者是执行 ls 以列出目录中的档案时,档案或目录列表的下载是经另一

个联机「数据联机」(Data Stream)。「数据联机」和「控制联机」不同的是数据联机所传输的数据比较大

,而控制联机只是用来传输指令及简单的响应。

基本上,一个完整的 FTP 联机建立过程为:

?客户端打开自已机器大于 1024 的连接埠,并连到服务器的连接埠 21,建立「控制联机」。
?客户端开始对服务器下指令,告诉服务器客户端用来传输档案的连接埠为何。
?服务器从连接埠 20 连到客户端所开放的埠号 (大于 1024),以建立「数据联机」。
上述这种联机建立的方式是由服务器主动建立「数据联机」,我们称之为「主动模式」(Active Mode)。基

本上主动模式的运作在没有防火墙或 NAT 的情形下没有什么问题,但若客户端有防火墙,则可能会无法建

立联机。

图 15-2


因为「控制联机」是由客户端主动连到服务器,所以在客户端有防火墙或 NAT 时,还是可以连到服务器。

接下来在建立「数据联机」时,客户端会从「控制联机」中告诉服务器它的 IP 及埠号,请服务器连过来

。但是由于客户端有防火墙,所以服务器要连到客户端时会失败,而无法建立联机。

基本上,如果客户端使用的是 FreeBSD 的 NAT 不会有这种问题,FreeBSD 会自动做转换,但若是使用其

它的防火墙就不一定可以支持 FTP 的 Active Mode。

何谓 Passive Mode

要解决 FTP Active Mode 的问题,可以在联机时改用「被动模式」(Passive Mode)。所谓的被动模式就是

由服务器打开一个连接埠,被动地等客户端连过来建立「数据联机」。被动模式的联机建立过程为:

?客户端打开自已机器大于 1024 的连接埠,并连到服务器的连接埠 21,建立「控制联机」。
?客户端开始对服务器下指令,告诉服务器进入「被动模式」。
?服务器打开一个大于 1024 的连接埠,等待客户端的联机。
?客伺端打开自已机器大于 1024 的连接埠,并连到服务器以建立「数据联机」。
图 15-3


由于控制联机及数据联机都是由客户端主动连过去服务器,如此即可避开防火墙及 NAT 的问题。我们来看

看如何判断联机失败是否因为主动模式的原因:

# ftp ftp.freebsd.org
Trying 204.152.184.73...
Connected to
ftp.freebsd.org (204.152.184.73).
220 Welcome to freebsd.isc.org.
Name (
ftp.freebsd.org:alex): anonymous
331 Please specify the password.
Password:
230-
230-You have reached the freebsd.isc.org FTP server, serving the
230-full FreeBSD FTP archive over IPv4 (204.152.184.73) and IPv6
230-(2001:4f8:0:2::e) networks. This server is also known as:
230-
230-
ftp.freebsd.org
230- ftp4.freebsd.org
230- ftp4.us.freebsd.org
230-
230-This server is operated by Internet Systems Consortium (ISC),
230-on behalf of the FreeBSD Project, with hardware donations from
230-Apple, Intel and Iron Systems.
230-
230-Questions about this service can be sent to:
freebsd@isc.org.
230-
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
^C
ftp> passive
Passive mode on
ftp> ls
227 Entering Passive Mode (204,152,184,73,54,200)
150 Here comes the directory listing.
drwxrwxr-x 3 0 0 512 Apr 17 2003 pub
226 Directory send OK.
ftp>当您登入一台 FTP 服务器后,如果您输入 ls,却等了很久都没有响应,您可以输入 <Ctrl>+C 以中

断命令。接着输入 passive 以进入被动模式,再打 ls 就可以看到目录内容,则无法联机的问题一定是主

动模式的原故。

15.2 设定 FTP 服务器

FreeBSD 内建有 FTP 服务器的功能,如果您要使用内建的 ftpd,我们不需要特别进行任何安装的动作,

只要做好设定即可。本小节中,我们将介绍如何设定启动 FTP 服务器的功能,并进行一些基本的配置。

15.2.1 启动 FTP 服务器

我们有二种方式启动 ftpd,一种是使用 standalone daemon,另一种是使用 inetd。inetd 是 UNIX 系统

中一个强大的「超级服务器」,我们可以使用它来管理许多系统服务,例如 telnet、ssh、ftp 等。大部

份的系统服务都是使用 inetd 来启动,使用它的好处在于可以统一管理各种服务,并经由它来设定服务规

则,例如是否要阻挡某些 IP 来源等。不过,使用 inetd 的方式缺点是每次有联机要求时,inetd 的

daemon 必须依联机的种类去执行相对映的指令,所以速度比较慢。

另一种启动 FTP 的方式是使用 standalone daemon,也就是直接执行 FTP daemon,当它接收到新的联机

时,就 fork() 出来处理,这种方式联机建立的速度较快,比较适合专门的 FTP 服务器。

使用 inetd

我们先来介绍如何使用 inetd 的方式启动 FTP 服务器。首先,请编辑 /etc/inetd.conf,将 ftp 设定开

头的 # 移除:

ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l
ftp     stream  tcp6    nowait  root    /usr/libexec/ftpd       ftpd -l
 

接下来,我们必须使用下列指令重跑 inetd:

# kill -1 `cat /var/run/inetd.pid`现在您就可以开始使用 FreeBSD 的 FTP 服务了。

使用独立 Daemon

如果您要以独立的 daemon 方式启动 FTP,请先确定在 inetd.conf 中没有启动 FTP 服务。接下来,请在

新增一个档案 /usr/local/etc/rc.d/ftpd.sh 内容如下:

#!/bin/sh

ftpd_program="/usr/libexec/ftpd"
ftpd_flags="-D -l"

case $1 in
start)
 echo "Starting FTPD"
 $ftpd_program $ftpd_flags
;;
stop)
 echo "Stopping FTPD"
 killall ftpd
;;
restart)
 $0 stop
 sleep 1
 $0 start
;;
esac

编辑完后,我们必须将该档案变成可执行:

# chmod 755 /usr/local/etc/rc.d/ftpd.sh接下来,您就可以使用下列指令启动 FTPD 了:

# /usr/local/etc/rc.d/ftpd.sh tart如果您要停止 FTPD 服务,则使用下列指令:

# /usr/local/etc/rc.d/ftpd.sh stop15.2.2 编辑欢迎讯息

当我们联机到一个 FTP 站台时,我们可以看到二个欢迎讯息,一个是登入前的讯息,另一个是登入后的讯

息。以下列讯息为例:

# ftp localhost
Trying ::1...
Connected to localhost.alexwang.com.
220- Welcome to My FTP Server.
220-
220- This is a welcome message
220-
220- Nice to see you.
220 vmware.alexwang.com FTP server (Version 6.00LS) ready.
Name (localhost:alex):
331 Password required for alex.
Password:
230- This is the message of the day.
230-
230- It will be shown after user login.
230 User alex logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
开头为 220- 的就是登入前的讯息,我们称它为欢迎讯息。以 230- 为开头的是登入后的讯息,我们称它

为本日讯息 (Message of the day)。这二种讯息我们都可以自行设定。

如果您要设定的是登入前的讯息,请新增一个档案 /etc/ftpwelcome,并将您的讯息写入该文件中。以下

为上述范例中的讯息内容:

Welcome to My FTP Server.

This is a welcome message

Nice to see you.

您不需要写 220- 等数据,FTP 服务器会自动帮您加上这种代码。而登入后的讯息是存放在 /etc/ftpmotd

,您可以编辑该档以进行设定。

15.2.3 FTP 服务器管理

在启动 FTP 服务器时,我们可以加入一些参数以调整服务器的行为。例如,修改预设的连接端口、记录使

用者上传、下载的档案等等。有些参数必须要在使用独立的 daemon 方式启动时才有用,而有的参数在

inetd 模式下也可以使用。

下表为我们常用的参数:

参数 是否只能在 Daemon 模式下使用 意义
-a 是 当您有二张网络卡或是二个 IP 时,我们可以设定只接受联机到某一个 IP 的联机要求。例如:
ftpd -D -a 192.168.0.1

此范例表示只接受使用者联机到 192.168.0.1 这个 IP。
 
-d 否 记录 FTP 的除错讯息。除了加入这个参数外,您必须修改 /etc/syslog.conf,并加入下列内容以

记录 FTP 的讯息。

!ftpd
*.*                    /var/log/ftpd.log
 
-h 否 不要显示 FTP 服务器的主机名称、软件信息、版本等。
-l 否 记录 FTP 登入成功及失败的讯息。如果您使用二次 -l,则使用者上传、下载、删除、建立目录时

都会留下记录。预设的记录会留在 /var/log/xferlog 中。
-P 是 我们知道 FTP 预设会监听连接埠 21,以接受客户端的联机要求。不过如果您是以独立的 daemon

方式启动 FTP,则 可以使用 -P 加上连接埠号以改变预设连接埠。

另外,还有很多用来控制使用者权限的参数,我们会在下一小节中说明。您也可以使用 man ftpd 以查看

更多关于 ftpd 的参数。

如果您要修改 ftpd 启动的参数,在 inetd 模式下,您可以修改 /etc/inetd.conf,并在 ftp 设定的最

后面加入参数,如下列粗体字所示:

ftp  stream  tcp     nowait  root   /usr/libexec/ftpd    ftpd -l -l -d
ftp  stream  tcp6    nowait  root   /usr/libexec/ftpd    ftpd -l -l -d

上面的范例中,我们多加入了参数 -l -d,以记录更多 ftpd 的讯息。

如果您是以独立的 Daemon 方式启动 ftpd,则请修改 /usr/local/etc/rc.d/ftpd.sh:

#!/bin/sh

ftpd_program="/usr/libexec/ftpd"
ftpd_flags="-D -l -l -d"
...

我们只要修改 ftpd_flags 的部份,加入您所要的参数即可。

15.3 FTP 权限控制

预设的 FTP 启动后,使用者可以上传、下载任何他们有权存取的档案。在登入后,使用者可以进到任何系

统中的目录 (如果目录权限允许的话)。本小节将告诉您一些 FTP 读写权限的控制,让您可以更进一步控

制服务器的系统安全。

15.3.1 限制账号与联机来源

我们可以设定限制某些账号不可以使用 FTP 登入。使用者在登入 FTP 服务器时,有几个规则会拒绝该账

号登入:

?如果 /var/run/nologin 存在,则所有账号都不可以登入。这个档案可以用来暂时停止 FTP 服务。
?使用者一定要有密码才能登入,没有密码的使用者无法登入。
?使用者名称不可以出现在 /etc/ftpusers 中。
?使用者群组不可以出现在 /etc/ftpusers 中。
?使用者所使用的 shell 必须要时合法的 shell。合法的 shell 会被定义在 /etc/shells 中。
?除了匿名模式外,使用者名称不可以是 ftp 或 anonymous。关于匿名模式,我们会在下一小节中说明。
/etc/ftpusers 定义了不可以使用 FTP 服务的使用者及群组。我们来看一下该档案的内容:

# $FreeBSD: src/etc/ftpusers,v 1.13 2004/06/30 16:47:08 maxim Exp $
#
# list of users disallowed any ftp access.
# read by ftpd(8).
root
toor
daemon
operator
bin
tty
kmem
games
news
@guest
...

我们可以看到该档案中已经有一些使用者不可以登入 FTP。这些使用者都是系统预设的账号,我们也可以

经由修改它来加入其它使用者。

在 /etc/ftpusers 中,如果开头是 "@" 表示群组名称。例如上述档案内容中的 @guest 表示群组 guest

不可以登入系统。

除了控制使用者账号外,在「inetd」模式下,我们还可以控制联机来源。所有 FreeBSD 中由 inetd 所启

动的服务都可以经由修改 /etc/hosts.allow 以使用 TCP Wrappd 来限制联机来源。下列为预设的

/etc/hosts.allow 内容:

# Provide a small amount of protection for ftpd
ftpd : localhost : allow
ftpd : .nice.guy.example.com : allow
ftpd : .evil.cracker.example.com : deny
ftpd : ALL : allow

如果我们要限制某几个 IP 或网域不能使用 FTP,可以使用下列范例:

# Provide a small amount of protection for ftpd
ftpd : localhost : allow
ftpd : 210.122.13.5 : deny
ftpd : .evil.cracker : deny
ftpd : ALL : allow

我们在上述范例中拒绝 IP 210.122.13.5 及 evil.cracker 网域的主机使用 FTP,并在最后一行设定其它

来源都许可。

如果您要设定只有某些来源可以使用 FTP,而拒绝大多数的主机,则可以设定:

# Provide a small amount of protection for ftpd
ftpd : localhost : allow
ftpd : 192.168.0. : allow
ftpd : my.friend.com : allow
ftpd : ALL : deny

我们设定了只有本机 (localhost)、192.168.0.x、及 my.friend.com 才可以使用 FTP,其它联机都拒绝

15.3.2 限制上传下载权限

在使用者登入后,只要目录、档案权限许可,它们可以自由的上传、下载档案。如果您希望加以限制读写

的权限,可以在启动 FTP 时加上下列几个参数:

参数 意义
-o 限制所有使用者只能上传档案,而无法下载任何档案。
-r 限制所有使用者对于服务器内所有档案只能只读,不可以建立目录、上传、更改档名、或任何会动到档

案目录的指令。

上述的参数必须在启动 FTP 服务器时指定,请参考15.2.3 一节,针对 inetd 及独立的 Daemon 有不同的

设定方法。

15.3.3 chroot

一般使用者登入后,预设会进入自己的家目录中。使用者可以改变工作路径到系统的任何目录中。如果您

希望使用者登入后只能在自己的家目录中活动,而不能进入其它系统目录中,可以使用 chroot 的功能。

所谓的 chroot 就是将某一个目录变成使用者看到的根目录。例如,我们让使用者 alex 登入后,将

/home/alex 变成根目录。则 alex 在使用指令「cd /」时,还是会停留在 /home/alex。如果他使用指令

「pwd」查看目前所在路径,则会显示 /。如此一来,我们就可以确保使用者不会到处乱跑,进入一些不该

进入的地方。这个功能对于提升 FTP 的安全性有莫大的助益。

设定 chroot 的方法很简单,只要修改 /etc/ftpchroot 即可。chroot 的设定是以使用者、群组的基础,

以下是几个设定范例:

alex
@guest
john /var/ftp
@other /var/ftp

上述范例中的第一行是设定使用者 alex 登入后,以自己的家目录为根目录。第二行的 @guest 表示只要

是群组为 guest 的使用者,都以自己的家目录为根目录。而第三、四行分别表示使用者 john 及群组

other 都以 /var/ftp 为根目录。

只要我们善用 chroot 的功能,就可以加强保护系统其它目录,让没有权利的使用者不可以进入系统目录

中。建议您在开放 FTP 服务时,将所有使用者都加入 /etc/ftpchroot 中。

15.3.4 匿名的 FTP

我们平常在登入 FreeBSD 的 FTP 站台时,可以使用 anonymous 或是 ftp 这二个使用者登入,而且在登

入时,任何密码都可以通过。这种可以使用 anonymous 登入的 FTP 就叫作匿名 FTP。anonymous 及 ftp

这二个账号是预设的匿名账号,当使用者以匿名登入时,服务器会将匿名账号对映到系统内的真实使用者

ftp。所以,如果您要提供匿名的 FTP 服务,请使用下列指令新增使用者账号 ftp:

# pw adduser ftp
# mkdir /home/ftp
# chown ftp:ftp /home/ftp
我们建立了使用者 ftp 及其家目录 /home/ftp。使用 pw 指令所建立的使用者在 /etc/master.passwd 中

的密码字段预设为 *,表示不可以登入。这个使用者除了匿名 FTP 外,将不可以使用 telnet、SSH、或是

其它服务。

在新增了使用者 ftp 之后,我们就已经支持匿名 FTP 的功能了。现在您可以使用 anonymous 或 ftp 账

号登入,而且不需任何密码。由于开放了匿名 FTP 后,任何人都可以登入系统,所以匿名账号登入后一定

会使用 chroot,以将匿名使用者限制在家目录中。

除了强制使用 chroot 外,我们还可以在启动 FTP 时加上一些参数,以针对匿名使用者进行更多的限制。

下表为启动 FTP 服务时可以使用的参数:

参数 意义
-M 禁止匿名使用者建立新的目录。
-m 允许匿名使用者覆写一个存在的档案。预设启动 FTP 时,并不允许匿名使用者覆写已经存在的档案。

当使用者上传档案时,如果已经有同档名的档案存在,系统会自动为上传的档案改名。
-O 让匿名使用者只能上传档案,下载档案的功能会被取消。

匿名使用者权限除上表中的几个参数外,一样可以使用 -r、-o 等用来控制一般使用者权限的参数来控制

匿名使用者。

匿名的 FTP 服务器可以说是危险的开始,如果您没有对匿名的使用者进行权限控制,在开于匿名 FTP 后

,将会产生许多安全性的问题。最常见的就是您的 FTP 服务器会被做为档案交流的跳板或是病毒的集散地

。例如,当您的匿名 FTP 站台允许使用者上传、下载档案时,一定会有人将自己的档案上传到您的服务器

中,并告诉其它人可以到您的服务器中下载档案。此时,您的服务器莫名其妙就会变成别人的服务器,任

何人都可以用您的服务器、网络频宽来分享档案。所以,在匿名模式下,最好还是在启动 FTP 时加上参数

-r 以取消上传的功能吧。

15.4 SmbFTPD

SmbFTPD 是笔者从 FreeBSD 5.4 的 FTP daemon 修改而成的软件。FreeBSD 内建的 FTP 服务器比较简单

,它不支持流量控制、不支持 SSL 加密、对中文档名的支持也比较差。例如,您无法使用「许」、「功」

等中文字。SMbFTPD 除了拥有原本 FreeBSD ftpd 所有功能外,还有更多使用者权限控制、支持特殊中文

字、整合设定文件路径及更多功能。另外,它也支持 SSL/TLS 加密的功能,该功能是由 BSDftpd-ssl 移

植而来。

SmbFTPD 和一般 FTP daemon 最大的不同在于它使用类似 Samba 的数据夹权限设定,您可以设定让 FTP

使用者登入后所看到的目录跟使用 Windows 登入 Samba 时一模一样。也就是说 FTP 登入的使用者对于数

据夹的存取权限和使用 Windows 登入 Samba 一模一样。

而您也可以将 SmbFTPD 做为一般 FTP daemon 使用,或同时支持 Samba 模式。FreeBSD 的 FTP daemon

本来效能就很好,修改过的 SmbFTPD 效能也十分优越,而且程序文件本身体积很小。

?效能优越。
?档案很小 (约 70KB),占用内存空间小。
?支援 SSL/TLS 加密。
?可以更改 port。
?针对使用者、群组做流量控制。
?针对使用者、群组设定 chroot 的路径。
?类似 Samba 的数据夹权限,可以针对目录设定使用者的读写权限。
?限制 FTP 指令的使用,如上传、下载等。
?匿名使用者登入。
?诸多匿名使用者的权限控制。
?同时支持 Samba 权限控制模式及一般 FTP 模式。
?可以拒绝某些使用者 "ls" 出某一个 share 下的档案。
?可以拒绝某些使用者下载档案或是修改已存在的档案。
?可以让某个数据夹处于只能上传的模式。
15.4.1 安装 SmbFTPD

您可以到 http://www.twbsd.org/cht/smbftpd/index.php 下载最新版的 SmbFTPD,下载 SmbFTPD 后,解

压缩后进行该目录。接着您就可以执行下列指令进行编译:

# ./configure
# makeconfigure 指令会侦测您的系统,并依您的环境以决定编译时所要加入的功能。例如,是否支持

IPv6、SSL/TLS、TCP Wrapper、或是 PAM 等。

编译完成后,如果您支持 SSL/TLS,您必须有 SSL 凭证。如果您有安装 Apache+SSL,您也可以和 Apache

共享它的凭证。如果您要产生凭证,您必须再执行下列指令以产生凭证。

# make cert执行上述指令后,我们会先产生一个根凭证,再产生 FTP 所使用的凭证,接着再用我们产生

的根凭证为 FTP 用的凭证签章。全部都完成后,我们就可以使用下列指令来安装:

# make install和 FreeBSD 内建的 FTP 服务器一样,SmbFTPD 可以使用 inetd 或是独立的 Daemon 方式

启动。如果您要使用 inetd 的方式启动 SmbFTPD,请修改 /etc/inetd.conf 并加入下列内容:

ftp     stream  tcp     nowait  root    /usr/local/sbin/smbftpd smbftpd 

接下来请执行下列指令重跑 inetd:

# kill -1 `cat /var/run/inetd.pid`如果您要以独立的 Daemon 方式启动 SmbFTPD,请先在

/etc/rc.conf 加入下列这一行,以在开机时启动 SmbFTPD:

smbftpd_enable="Yes"

接下来就可以使用下列指令看看是否能启动 SmbFTPD:

# /usr/local/etc/rc.d/smbftpd.sh start如果您要停止 SmbFTPD:

# /usr/local/etc/rc.d/smbftpd.sh stopSmbFTPD 是由 FreeBSD 的 FTP Deamon 改写而成,所以有些设

定和 FreeBSD 的 FTPD 相同。例如登入前及登入后的讯息可以经由设定 /etc/ftpwelcome 及

/etc/ftpmotd 这二个档来达成。另外,您也可以设定 /etc/hosts.allow  以限制联机来源。不同的是,

不管是以独立的 Daemon 或是 inetd 方式启动 SmbFTPD,都可以使用 hosts.allow 的功能。

另外,SmbFTPD 将所有设定项目放在 /usr/local/etc/smbftpd/smbftpd.conf 中,您可以经由修改它来客

制化您的服务器。经由修改 smbftpd.conf,您可以设定使用不同的连接埠、更改服务器名称、设定最大联

机数目、目录权限、流量控制、SSL 设定等等。

下列几个小节中,我们将介绍一些比较特别的设定,关于更多选项及其详细的设定请参考 smbftpd.conf

一章中的说明。

15.4.2 限制登入账号

我们可以设定限制某些账号不可以使用 FTP 登入。使用者在登入 FTP 服务器时,除了账号密码要符合外

,还有几个规则会拒绝该账号登入:

?如果 /var/run/nologin 存在,则所有账号都不可以登入。这个档案可以用来暂时停止 FTP 服务。
?如果 smbftpd.conf 中 EmptyPasswdLogin 没有设为 Yes,则使用者一定要有密码才能登入,没有密码的

使用者无法登入。
?使用者名称及群组不可以出现在 smbftpd.conf 中的 NoLoginList 中。
?如果 smbftpd.conf 中 RequireValidShell 设为 Yes,则使用者所使用的 shell 必须要时合法的 shell

。合法的 shell 会被定义在 /etc/shells 中。
我们可以看到在 smbftpd.conf 中有三个选项控制了使用者可以登入与否:EmptyPasswdLogin、

NoLoginList、RequrieValidShell。 其中,NoLoginList 这个项目可以让我们设定不允许登入的使用者清

单。

我们在安装了 SmbFTPD 后,即限制了某些系统使用者登入。我们来看一下该选项的内容:

NoLoginList root,toor,daemon,operator,lp,bin,tty,shutdown,kmem,...

这个项目中,每个使用者或群组都是使用逗号分开。如果一个项目的开头是 "@" 表示群组名称。例如

@guest 表示群组 guest 不可以登入系统。

15.4.3 限制上下传频宽

SmbFTPD 支持针对不同的使用者设定不同的上下传频宽限制。smbftpd.conf 中的 MaxDownloadRate 及

MaxUploadRate 控制了使用者上下传的频宽。

这二个选项可以重复设定多次,以支持多个使用者及群组。MaxDownloadRate 及 MaxUploadRate 的格式如

下:

MaxDownloadRate @group|user rate其格式就是在选项后面加上群组或使用者名称,最后再加上频宽的限

制,频宽是以 KB/s 为单位。如果是群组名称,其开头必须加上 "@"。我们来看看下列的设定范例:

MaxDownloadRate @group100 100
MaxDownloadRate ftp 20
MaxDownloadRate @friends 1000

我们可以看到目前有三个控制下传频宽的项目。第一个项目表示群组为 group100 的使用者,其下载频宽

为 100 KB/s。第二个项目表示使用者 ftp 的下载频宽为 20 KB/s。如果您支持匿名的 FTP,匿名 FTP 使

用者对于系统而言实质账号是 ftp,您只要针对 ftp 使用者做设定即可套用在匿名使用者 anonymous 及

ftp 上。

15.4.4 匿名的 FTP

我们平常在登入 FreeBSD 的 FTP 站台时,可以使用 anonymous 或是 ftp 这二个使用者登入,而且在登

入时,任何密码都可以通过。这种可以使用 anonymous 登入的 FTP 就叫作匿名 FTP。anonymous 及 ftp

这二个账号是预设的匿名账号,当使用者以匿名登入时,服务器会将匿名账号对映到系统内的真实使用者

ftp。所以,如果您要提供匿名的 FTP 服务,必须先增加一个真实的使用者账号 ftp。

在新增了使用者 ftp 之后,我们还必须设定一下 smbftpd.conf 中关于匿名登入的项目。在 smbftpd 中

,关于匿名 FTP 的项目有:AnonymousLogin、AnonymousOnly。

AnonymousLogin 控制了是否要启用匿名使用者登入的功能。如果 AnonymousLogin 设为 Yes,表示可以使

用匿名使用者登入。另外,AnonymousOnly 控制了在允许匿名使用者登入后,是否还要允许一般使用者登

入。如果 AnonymousOnly 设为 Yes,则只有匿名使用者才可以登入,一般使用者都不可以登入哦。

请注意,虽然匿名使用者登入的账号有二个:anonymous 及 ftp。但我们不管是在设定流量、目录权限时

,都只要设定真实使用者 "ftp" 账号即可。

15.5 SmbFTPD 的目录权限控制

15.5.1 何谓 SMB Mode

SmbFTPD 和一般的 FTP 服务器最大的不同在于它的目录权限管理方式。SmbFTPD 有二种目录权限管理方式

:一般模式及 SMB 模式。一般模式下,SmbFTPD 的行为就和一般的 FTP 服务器一样,使用者登入后可以

看到所有的系统目录。

SMB 模式比较特别,它会依照您的设定产生一个虚拟的根目录,在根目录中,只会显示该使用者可以使用

的资料夹。如果您使用过 Samba,SmbFTPD 的 SMB 模式就和 Samba 的共享数据夹设定类似。例如,您可

以设定一个数据夹名为「音乐」,它的真实目录是在 /home/mp3,并可以设定哪些使用者可以存取此数据

夹、只读或可擦写、是否可以下载档案等等。

以下列数据夹设定文件为例:

[音乐]
path = /home/mp3
rw = alex
ro = @guest, john
disable_download = ftp

[upload]
path = /var/ftp
rw = ftp,alex
disable_ls = ftp
disable_download = ftp
 

上述的范例中,我们有二个共享数据夹:「音乐」及「upload」。其中,path 为该数据夹位于系统中的真

实目录。rw 为具有读写权限的使用者 清单,而 ro 为只读的使用者清单。在上述的设定下,使用者 alex

登入后,如果他在根目录中下「ls」指令,他将看到下列内容:

ftp> ls /
200 PORT command successful.
150 Opening ASCII mode data connection for 'file list'.
dr-x------ 1 root users 512  Feb  3 21:40 音乐
dr-x------ 1 root users 2048 Aug 28 03:18 upload
226 Transfer complete.
ftp>
 

我们可以看到使用者 alex 登入后,他所看到的根目录只有二个数据夹:「音乐」及「upload」。他的活

动范围也将只限于这二个数据夹,而无法进入系统中的其它目录。也就是说,如果 alex 输入指令「cd

/upload」则会进入「upload」这个数据夹中 (在系统中的真正路径是 /var/ftp)。

SMB 模式的好处在于您可以将不同目录集中设定成位于虚拟的根目录中,并针对这些目录设定不同使用者

的权限。使用者权限可以是只读、可擦写、禁止下载档案、禁止看到目录中的档案内容,您甚至可以设定

其一个资料夹为隐藏,「ls」时看不到该目录,但却可以「cd」进入目录中。

SMB 模式是一个比较有弹性的目录权限管理方式,您可以经由设定 SMB 模式达到多种不同的目录权限控制

我们还可以让某些使用者使用一般模式,某些使用者使用 SMB 模式。这些设定十分容易,我们将在下一小

节中做说明。
转载于:http://yangshuo123.blog.sohu.com/109872999.html

 

                                         首页:http://www.2345.com/?kwimmnl

  评论这张
 
阅读(1659)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017