本章目录
1 开场白
2 选择wu-ftpd
3 安装
4 配置
5 测试
6 TODO
7 结束语
8 参考文献
1 开场白
在五年之前,我还觉得Ftp这个东西很神秘。那时候,我身边的大部分人,甚至以为http就是互联网的全部。我们从网站下载文件,用的大多也是http连接。但是,事实上,ftp(File
Transfer Protocol,文件传输协议)这个服务已经存在很长时间了,如果要提供文件下载,除了使用http的方式连接外,我们完全可以提供ftp服务,这样可以节省一些服务器资源,比如连接数什么的。ftp是专门设计用来在两台电脑之间传输数据的,可以避免太多的远端执行。尤其是,当传输的文件比较大时,ftp会比http节省资源。另外, ftp可非常方便地上传文件,而http则没有那么方便快捷。
2 选择wu-ftpd
用apt-cache search
命令看一下,都有什么ftp服务器可以选择:
# apt-cache search ftpd
你会发现,Debian为我们制作了很多个ftpd服务器软件包,包括atftpd、bsd-ftpd、ftpd、oftpd、muddleftpd、proftpd、twoftpd、 vsftpd、wu-ftpd等等。其中应用最广泛的,应该是wu-ftpd了,这是目前最流行的一种免费FTP服务器软件,目前绝大多数的FTP站点都是由wu-ftpd来架设的,它是当初由华盛顿大学wuarchive.wustl.edu开发出来的,是一个以效率以及稳定性为考量的程序。wu- ftp如此流行,一个重要的原因是因为它强大的功能,例如:
◆ 可控制不同网域的机器对 FTP服务器的存取权限和访问时段。
◆ 使用者在下载文件时,可自动对文件进行压缩或解压缩工作。
◆ 可以记录文件上传或下载的过程。
◆ 可以限制最高访问人数,以维持系统的最佳运行效率。
◆ 可显示相关的信息,以便用户了解当前的接收状态。
◆ 可暂时关闭FTP服务器,以便系统维护。
目前Debian提供的wu-ftpd版本是2.6.2。好,我们就选择这个wu-ftpd了!
3 安装
安装很简单,用下面的命令安装:
# apt-get install wu-ftpd
它会问你,你想设置一个匿名ftp账号吗?输入y,回车。
接着让你输入ftp根目录,默认是/home/ftp,我们就用默认的吧。
然后它问你,你想创建一个目录,用来让用户上传文件吗?输入y,创建一个。
安装程序会创建一个新的用户ftp,并把这个用户加入到一个新创建的组ftp中去。
然后它会说:
Anonymous FTP users will
only see UID and GID numbers,instead of names, because the libnss_files.so
library hasn't installed.
It is not installed by default, since there is no easy way to find out
what version we need to install.
If you want to install it manually, it should be palced in
/home/ftp/lib,owned by root, and with permissions of 444 (r--r--r--)
(它说由于无法判断所需的版本, libnss_files.so没有安装,要手工安装的话,到/home/ftp/lib去找。这块我还没捣鼓明白,还请高手赐教)。这里需要对初学者说明一下,系统从/etc/passwd这个文件里面读取资料,得到UID和GID,来决定用户对文件的存取权限。一会儿我们会讲到,在ftpaccess 这个配置文件里,可以为某些UID的用户或者某些GID的组设置权限。
4 配置
其实,在安装完之后,不需要做任何配置,我们的ftp服务器已经可以使用了。如果你跟我一样是个急性子,在进行配置之前你就可以尝试登录了。这时, Debian上的普通用户,还有匿名用户都可以访问它,也可以向incoming目录上传文件,只不过看不到已经上传的文件。但是我们仍然需要做一些配置,因为我们需要定制自己的安全性。
为了确保提供FTP服务不会给我们的系统带来安全隐患,我们首先要采取以下措施:
#
chmod 555 /home/ftp
# chmod 111 /home/ftp/bin/*
# chmod 555 /home/ftp/lib/*
# chmid 444 /home/ftp/etc/*
4.1 配置文件介绍
wu-ftpd的配置文件放在/etc/wu-ftpd下面,主要有:
ftpaccess —— 这个是wu-ftpd的主配置文件,控制存取权限
ftpconvertions —— 这个文件定义了文件压缩/解压缩转换方案
ftpservers —— 用来设置多个IP地址和域名,以对应到不同的虚拟主机
ftpusers —— 凡是写入这个文件里面的用户,都不能连接ftp服务器
msg.denu —— 拒绝访问时,显示给用户的信息
msg.nodns —— 当DNS查询失败时,显示给用户的信息
msg.toomany —— 当连接数过多时,显示给用户的信息
pathmsg ——
当用户使用了非法路径/文件名时,显示给用户的信息
welcome.msg ——
当用户建立连接时,显示给用户的欢迎信息
在/usr/share/doc/wu-ftpd/examples下面,有一些配置文件的样本,大家可以参照一下。
4.2 修改/etc/wu-ftpd/ftpaccess配置
这个文件是wu-ftpd的主配置文件,许多重要的选项都包含在这里面,比如,要想让Debian上的用户可以访问,就必须在这个文件里面的Class段落里面做出定义。
下面我们按照ftpaccess文件的顺序,一段一段地介绍。平常不大用的,或者我不懂的,就不介绍了:-),要不然篇幅会非常大。
4.2.1 管理员的email地址
# 这个不多说了
email ftpadmin@misconfigured.host
4.2.2 UID/GID设置
# 设置哪些UID/GID可以、不可以使用FTP服务。这里的%-99我没搞明白,请高手指教!
#deny-uid %-99
#deny-gid %-99
#allow-uid ftp ftpadmin
#allow-gid ftp ftpadmin
4.2.3 登录失败数
#
下面设置登录5次失败后,断开连接
loginfails 5
4.2.4 目录限制
#
除了用户自己的根目录,让用户看不到别的东西。这个很关键!
#
你可以在修改这项之前先登录ftp服务器看看,然后去掉了这个#之后再登录看看,大不一样哦
restricted-uid kanaka
4.2.5 不可执行SITE GROUP/SITE GPASS
# private决定了用户是否可以执行SITE
GROUP/SITE GPASS命令
# 用这两个指令切换到/etc/ftpgroup的群组。一般而言我们不会用到这个功能,以避免安全漏洞。
#private no
4.2.6 定义用户类别——class
由class定义的用户和IP地址才能够登录进来。FTP 服务器上有三种类型的使用者,分别是“real”——表示在该FTP服务器上有合法帐号的用户;“guest”——表示另行定义的某些使用组的使用者; “anonymous”——权限最低的匿名用户。有了这三种使用者以后,在ftpaccess文件中就可以根据不同的使用者设置不同的存取权限。但是,只有三种定义一般是不够的,我们可以根据class的语法定义更多的控制命令。
语法是:
class
<class 名称>
<种类>
<用户地址>
[<用户地址>……]
其中:<class 名称>则可自行设定,<种类>就是上面说的三种,<用户地址>是指ftp上来的用户会用到的IP地址。
以下是一些例子:
#
下面这一行时系统默认的,它定义了一个名为all的class,包含三种人,允许所有IP地址的连接
class all real,guest,anonymous *
# 下面这个叫做local的class说,只有real的用户可以从本机机器连上来
class local real localhost loopback
# 下面这个叫remote的class,包含了从任何地方上来的guest和anonymous用户,但是real用户不算
class remote guest,anonymous *
# 下面这个叫rmtuser的class包含了从外面来的(除了example.com)真实用户
class rmtuser real !*.example.com
4.2.7
为各个类别的用户设置最大连接数
#
可以为每一个类别定义最大连接数,并显示不同的错误信息。下面允许30个连接。
limit all 30 Any /etc/wu-ftpd/msg.toomany
4.2.8 设置readme文件
# readme命令:指定用户登录或进行其它操作(如更换目录)时FTP服务器提示用户阅读的文件。
readme README* login
readme README* cwd=*
4.2.9 是否使用压缩
# 下面定义的允许从local和remote登录的机器在传输文件时,
# 可以执行compress压缩文件或使用tar命令将多个文件打包成一个文件。
compress yes local remote all
tar yes local remote all
4.2.10 记录日志
#
如果去掉前边的注释符号,它就会记录相应的信息。
#log commands anonymous,guest,real
#log security
#log syslog
log transfers anonymous,guest,real inbound,outbound
4.2.11 超时设置
#
下面设置:如果超过30秒没有动作,就断开anonymous的连接
limit-time anonymous 30
4.2.12 一些命令的权限
rename no anonymous # rename
权限?
delete no anonymous # delete 权限?
overwrite no anonymous # overwrite 权限?
chmod no anonymous # chmod 权限?
umask no anonymous # umask 权限?
4.2.13 匿名用户上传权限
#
全给他们加上井号,不让匿名用户上传文件
#upload /home/ftp * no
#upload /home/ftp /pub/incoming yes ftp daemon 0666 nodirs
由于ftpd是被inetd调用的,所以,我们修改了配置文件后,不需要重新启动wu-ftpd。
对于普通ftp应用,修改一下上面这个文件就足够了。如果你还有更高的要求,就继续往下看。
4.3 修改/etc/wu-ftpd/ftpusers
我们已经说过了,只要写进这个文件里面的用户,是不能登录我们的ftp服务器的。
限制这些用户使用FTP服务器主要是基于系统安全的考虑,避免权利过大的用户(如root、ftpadm)登录FTP服务器和避免使用系统命令作为帐号(如shutdown、sync),以避免系统管理上的困惑。我们可以根据自己使用的需要,向该文件中增加或删除用户。
注意这个文件是/etc/ftpusers的快捷方式。下面是默认的ftpusers的内容:
# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).
root
daemon
bin
sys
sync
games
man
lp
news
uucp
nobody
4.4
修改/etc/wu-ftpd/ftpconversions文件
ftpconversions文件主要定义用户从FTP服务器中下载文件时对文件进行格式转换的规则。例如压缩、解压缩、打包和开包等操作,这样用户就不必为.tar.gz、.tgz、.Z、.z之类的文件伤脑筋了。 ftpconversions文件的格式初看上去很复杂,不过不用担心,我们基本上不用动它,debian为我们准备的这个配置,已经能够满足我们的使用需要了。下面让我们来看看ftpconversions文件的内容:
:.Z: : :/usr/bin/compress -d -c %s :T_REG|T_ASCII:O_UNCOMPRESS:uncompress
: : :.Z:/usr/bin/compress -c %s:T_REG:O_COMPRESS:compress
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:gunzip
: : :.gz:/bin/gzip -c9 %s:T_REG:O_COMPRESS:gzip
:.bz2: : :/usr/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:bunzip2
: : :.bz2:/usr/bin/bzip2 -c9 %s:T_REG:O_COMPRESS:bzip2
:.zip: : :/usr/bin/zip -q -r -9 - %s:T_REG|T_DIR:O_TAR|O_COMPRESS:zip
: : :.zip:/usr/bin/unzip -q -c - %s:T_REG|T_DIR:O_TAR|O_UNCOMPRESS:unzip
: : :.tar:/bin/tar -chf - %s:T_REG|T_DIR:O_TAR:tar
: : :.tar.Z:/bin/tar -chZf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+compress
: : :.tar.gz:/bin/tar -chzf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+gzip
: : :.tgz:/bin/tar -chzf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+gzip
: : :.tar.bz2:/bin/tar -chIf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+bzip2
: : :.ltar:/bin/tar -cf - %s:T_REG|T_DIR:O_TAR:tar
: : :.ltar.Z:/bin/tar -cZf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+compress
: : :.ltar.gz:/bin/tar -czf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+gzip
你可能想我一样看花了眼,不过好在我们不用深究,反正这个文件基本上把常用的压缩,打包命令都包括在内了,只要它存在,FTP服务程序就会根据用户的需要执行压缩或打包的命令。
例如,用户想下载目录Howto中所有的文件,那么他不必使用mget命令,而只要使用get
Howto.tar.gz,这时wu-ftpd就会将该目录打包压缩并发送到用户的机器上了。所以使用该文件可以完成压缩传递的数据量,减少传输时间等作用。
这里有一点需要注意,这个文件中定义的可执行文件的位置/bin指的都是/home/ftp/bin而不是Linux的/目录下的bin,所以请检查 /home/ftp/bin目录中有无上述命令,如果没有还需要将这些程序复制到该目录中。我看了一下,由于我仅仅安装了Debian的基本系统,所以 bzip2这个命令是没有的,我们可以用at-get
install bzip2命令来下载和安装它,然后把bzip2命令复制到/home/ftp/bin就可以了。
5 测试
到这里,匿名FTP服务器的配置工作基本上就完成了,我们可以用ftp命令连接自己的服务器,检查合法用户和匿名用户的连接情况以及各个目录的权限是否正确。之后就可以准备FTP服务的开张了。
6 TODO
在下一个版本里面,我将描述如何用ftpmirror建立ftp服务器镜像。
7 结束语
本文是《Debian服务器设置入门》系列教程之第二章》,建议您按照顺序阅读,有问题可以和作者kanaka联系。
8 参考文献
本章参考了下面的文章:
《用wu-ftpd架设FTP服务器》一文,地址是http://www.lslnet.com/linux/docs/linux-3300.htm
《架设FTP服务器》一文,地址是http://www.linuxsir.com/bbs/showthread.php?s=&threadid=8455&highlight=wuftpd
很抱歉我没找到这两篇文章作者的名字,但是我们仍然应该心存感激。
《Debian服务器设置入门》系列教程之第三章:邮件服务器
第三章 在Debian上用Exim配置邮件服务器
本章目录
0 声明
1 简介
2 安装
3 配置
4 小测试
5 修改 From: 的地址
6 配置Fetchmail
7 修改exim的投递限制
8 综合测试
9 TODO
10 结束语
11 参考文献
0 声明
本文是在《通过exim建立家庭网络的邮件系统》一文的基础上修改的,作者:Jan
W. Stumpel, Oegstgeest, The Netherlands。
这篇章的地址是:http://211.167.66.225/~yzhao/lg-zh/lg-zh-issue8/stumpel.html
1 简介
我想现在一个再普通的单位,也会需要用到电子邮件。我所在的企业,已经到了无法离开email的地步——每当邮件服务器出现问题,我的电话都会被打爆。在M$平台上,邮件服务器市场基本上被两个软件占领:M$的Exchange和Lotus的Domino/Notes。这些软件所花费的费用,实在不小。而Unix平台上,我们有很多选择,而且都是免费的。
在Debian里面,我们不用Sendmail,也不用Qmail和Postfix,而是用Exim,这是Debian的缺省邮件服务器,连基本系统都附带了这个软件。理由我就不说了,反正,Debian推荐的,不会错。
1.1 我们将实现的功能
◆
局域网中的用户可以实现本地邮件的发送和转发。
◆ 发往局域网以外的邮件有正确From:<邮件地址>,以使外部的邮件能够正确的回复。
◆
电子邮件账号是所有本地子网用户所共享,但是要实现每个用户仅仅能够收到自己的邮件。
◆ exim作为邮件的收发代理(它比sendmail好配置的多)。
◆ mail作为linux端的邮件客户程序。
◆ Microsoft Outlook Express 作为Win2000端的邮件客户程序(同样你也可以使用其它的类似工具,比如Foxmail)。
◆ qpopper 作为POP3服务器, 用来把邮件从Linux系统中转移到Win2000机器上。
◆ fetchmail 用来从互联网上收取邮件。
我在两台机器上(分别安装Linux和Win2000系统)做的测试,当然,win9x/NT/XP都可以,而且两台机器都是Linux的话也当然可以。这个方案,应付一个中小型的办公室应该绰绰有余。
1.2 网络和命名
在这篇文章中我假定以下的名字(您实际应用时应该做写修改,以适应您的实际情况):
◆ 拥有者和系统管理员的名称 kanaka Leng。
◆ Linux机器名为 Debian。
◆ Win2000 机器名为 Notepad。 通常使用者为 ganghua Leng。
◆ kanaka 在 Debian 机器上的注册用户名为 kanaka。
◆ ganghua 在 Debian 机器上的注册用户名为 ganghua。
◆ ganghua 在 Notepad 机器上的注册用户名也为 ganghua。
她的在linux下的Debian机器和 Win2000上的口令也相同。
◆
我们公司的局域网通过宽带连接互联网,当然你通过普通拨号也可以。
◆ kanaka 和 ganghua 都使用电子邮件地址:kanaka@yeah.net。
◆ kanaka到POP3收信的口令为kanakapswd。
◆ ISP的发送邮件的邮件服务器为smtp.yeah.net。
◆ ISP的接受邮件的邮件服务器为pop3.yeah.net。
机器Debian和Notepad都属于一个域,域名为test.com。
这个域名是我们内部搞测试用的,我们并没有注册这个域名,
因而对于外部网络来说, 并不能直接识别这个域名。
此外,我还假设内部网络已经正常工作,
并且已经拥有使用daild实现的非永久拨号连接,或者宽带网连接。
在Debian机器上也没有安装DNS服务。/etc/resolv.conf中只是加入了ISP提供的两个DNS服务器的地址。同样的设置也要加在Notepad机器上的TCP/IP设置中。
1.3 邮件地址
在"To:"和"From:"中指定邮件地址是一封邮件的基本组成部分,
此外还有更多的内容。 举例来说:
To: ganghua Leng <kanaka@yeah.net>
'ganghua Leng'是一个"real-name part"(真实姓名部分)。
这是通过撰写电子邮件的程序加上的。
这个部分就是将邮件发送给ganghua本人的依据。 注意:如果在real-name
part中有句点存在, 邮件地址必须用"符号包围起来(例如:"kanaka
C.Leng")。 您可以用man mailaddr参考一下相关的帮助页。
2 安装
由于我们已经安装了Debian基本系统,而Debian基本系统里面含有exim和mail这两个软件,所以我们只需要安装这两个:fetchmail、fetchmailconf和qpopper。
#
apt-get install fetchmail fetchmailconf qpopper
其中,fetchmailconf是用来配置fetchmail的工具。
系统会有一些问题提问你。当问你是否以root身份运行system-wide
fetchmail时,答Yes。其他的都选默认值。
3 配置
3.1 配置Debian的hosts
Debian机器上的/etc/hosts文件内容如下:
127.0.0.1 localhost
192.168.1.1 Debian.test.com Debian
192.168.1.2 Notepad.test.com Notepad
3.2 配置exim
在Debian下,这一切都是由eximconfig程序来完成的。
#
eximconfig
程序将问到一些问题,你可以参考下面的回答:
◆ 你的系统是一个Internet主机(选择1,虽然你在局域网。这样你可以发邮件到互联网)。
◆ “显示的邮件域名”为test.com。
◆ 系统有其他的名称吗?你可以回答 Debian:localhost。
◆ 你不想转发任何非本地域的邮件。保持none,按回车。
◆ 你想转发的本地域地址为192.168.1.0/16。
◆ 处理向外转发的邮件的smarthost 地址为 smtp.yeah.net。
◆ 系统管理员的邮件为kanaka(非root)。
3.3 配置Win2000
3.3.1 hosts
在Notepad机器上的c:\winnt\system32\drivers\etc\hosts文件中的内容跟Debian机器中的/etc/hosts文件的内容一样。
127.0.0.1 localhost
192.168.1.1 Debian.test.com Debian
192.168.1.2 Notepad.test.com Notepad
3.3.2 邮件客户端
在Microsoft Outlook Express(或者你在Win2000使用的其他此类的邮件客户程序)。
必须都将Debian输入作为SMTP 邮件服务器和POP3服务器。 在“POP3账号名”和“POP3口令”输入框,
输入用户名ganghua和她在linux下的口令。 输入姓名为ganghua Leng;
电子邮件地址为 ganghua@test.com。
注意电子邮件地址必须以本地域做后面的地址。
4 小测试
通过上述的设置,本地的用户之间应该已经可以实现相互的发送和回复信件了。在Outlook
Express里面的测试我就不说了,我来说一下在Debian上面用mail来做测试。
#
mail kanaka
Subject:
This is my First test-mail!
Hi,kanaka,
This is the first time that I send a mail by exim.
.
Cc: kanaka@yeah.net
#
上面我们给本地的kanaka发了一封邮件,并抄送给了互联网上的kanaka@yeah.net。注意,要结束一封信的内容,在新的一行输入“.”就可以了。我在Win2000上用Outlook
Express就可以收到发给kanaka的信;而发给kanaka@yeah.net的信,我到freemail.yeah.net站点上去,也收到了。
现在test.com已经真正成为了一个具有邮件转发功能的本地域,而且可以发送邮件到互联网上的kanaka@yeah.net。但是,一个格式为From:kanaka@test.com的地址显然是无法被外部用户回复的,
因为对于外部网络来说, test.com是一个不存在的(因而不合法)的域名。因此,我们还需要修改From:的地址。
5 修改 From: 的地址
在往互联网上发送邮件的时候,为了他们可以正确的回复,我们必须把本地的From:地址格式改变成为一个合法的电子邮件地址。
借助于exim的"传送过滤器", 我们可以实现这一功能。
往外部转发的邮件经过这个传送过滤器以后, From:
中的地址就会被改变, 而对于本地邮件则没有什么影响。
下面的过滤器将实现这个恶作剧式的技巧,
首先我们确定我们要改变的地址永远包含在"<>"符号之内。
虽然不能完全保证, 但是通常的邮件程序:mail甚至Microsoft
Outlook Express都是生成这种格式的电子邮件地址。
5.1 创建outfit文件
我们来创建一个文件,/usr/bin/outfit,内容如下:
#!/usr/bin/perl
while (<STDIN>) {
if (/^From: /) {
s/<.*>/<'kanaka@yeah.net'>/;
print "$_"; last;
}
print "$_";
}
while (<STDIN>) { print "$_"; }
把这个文件放到/usr/bin目录中,命名为outfit,不要忘记把上面的电子邮件地址换成你自己的电子邮件地址!
然后,通过下面的命令chmod +x /usr/bin/outfit加上可执行的权限。
#
chmod +x /usr/bin/outfit
5.2 修改exim.conf
打开/etc/exim/exim.conf,找到下面一行:
driver = smtp
在它的下面加上两行,就成了:
driver = smtp
headers_remove = "sender"
transport_filter = "/usr/bin/outfilt"
通过上述对/etc/exim.conf文件的修改,无论何时发送一封电子邮件到本地域以外时,都可以被exim正确的投递了。如果你使用的是拨号网络,那么Exim(通过daild)每发送一次邮件,就会向外拨一次号。而我们公司的宽带24小时在线,所以邮件每次都是直接就发出去了。
6 配置Fetchmail
我们需要运行fetchmailconfig,来在你的主目录里产生一个叫.fetchmailrc的文件,否则你就不能使用fetchmail。
fetchmial将从互联网的邮件服务器上取回邮件(并转交给exim再做本地投递)。
#
fetchmailconfig
fetchmialconf must be run
under X
你看到了吧,它说fetchmialconf这个程序比如在X下面运行。唉!我们要把debian做服务器用,而服务器根本不需要安装X的,我们不会为了配置fetchmail再去安装一个X系统和一个窗口管理器吧!好吧,那么我们就手工写这个文件吧,其实也很简单。
由于我们是要把邮件接收到kanaka在本地的信箱里面,所以应该在kanaka的主目录里面产生这个.fetchmailrc,所以我们切换到kanaka用户,再进行操作:
# su
kanaka
$ cd
$ nano
.fetchmailrc
然后,输入以下内容,存盘退出即可:
set postmaster "postmaster"
poll pop3.yeah.net with proto POP3 user "kanaka@yeah.net" password "kanakapswd"
.fetchmailrc文件可以在不同用户之间相互拷贝,只要把文件的属主设置成相关的用户即可。不过把用户的邮件密码用明码写在这个文件中显然是一种不明智的方式。
或许应该有更好的方法,请大家告诉我啊,呵呵。
然后,使用fetchmail命令来把邮件从互联网上拖到本地来:
$
fetchmail
1 message for kanaka@yeah.net at
pop3.yeah.net (1648 octets).
reading message kanaka@yeah.net@pop3.yeah.net:1 of 1 (1648 octets) .
flushed
然后,你可以在win2000的Outlook Express里面,从本地接收这些邮件。
7 修改exim的投递限制
Exim 缺省的一次投递邮件的最大数量为100封。
你可以根据你们单位的实际情况,修改这个值。如果需要取消这个限制,就把它改为0,不过小心受到攻击:
smtp_accept_queue_per_connection = 0
8 综合测试
你可以在Debian上和Win2000上多发几封邮件,做一下测试。
9 TODO
在下一个版本中,我们将描述如何使用.forward文件,实现转发,把信件正确的投递邮件给某个用户,而不是一下子都发给kanaka。
我们还将描述,如何建立一个webmail系统。
10 结束语
本文是《Debian服务器设置入门》系列教程之第三章,建议您按照顺序阅读,有问题可以和作者kanaka联系。
11 参考文献
本文在开头就声明,本文是在《通过exim建立家庭网络的邮件系统》一文的基础上修改的,作者:Jan
W. Stumpel, Oegstgeest, The Netherlands。
这篇章的地址是:http://211.167.66.225/~yzhao/lg-zh/lg-zh-issue8/stumpel.html
之所以这样,是因为,这篇文章对我们来说太珍贵了,除了她,我没有找到其他关于exim的资料。
非常感谢原文作者,以及翻译者!
《Debian服务器设置入门》系列教程之第四章:Samba服务器
第四章 在Debian上配置Samba服务器
本章目录
1 介绍
2 背景介绍
3 安装
4 小测试
5 快速入门
6 配置
7 测试
8 TODO
9 结束语
10 参考文献
1 介绍
如果某一个单位,他们的桌面计算机必须使用M$
Windows平台的话,那么他们很可能不可避免的需要Windows服务器产品,比如Windows
NT Server或者Windows 2000 Server,甚至Windows 2000 Advanced Server。要知道,要合法的拥有这些服务器的软件(按照微软的所谓许可协议购买连接数)的话,再加上昂贵的硬件费用,可并不是一比小费用。如果有一个途径,可以让你在普通硬件的基础上,免费实现Windows
NT/2000服务器的功能,你说,何乐而不为呢?
——这就是桑巴,一个免费的,强大的,灵活的,轻便的,samba。
2 背景介绍
如果你不是从第一章开始看我的文章,那么我得介绍一下这些情况:
我的有一台安装了win2000的机器,叫做notepad,它属于workgroup这个工作组。
我的Debian GNU/Linux安装在一台普通的台式计算机上,机器名字叫debian,域名叫test.com。
3 安装
3.1 软件版本
由于我们用的sid的sources.list,所以得到的是2.99版+3.0Alpha版的samba。其配置方法与以前版本有些不同。
3.2 安装
安装过程非常简单:
# apt-get install samba
系统会问你,请参考这些答案:
用debconf配置samba吗?Yes。
输入工作组名,或者域名:workgroup。
使用口令加密?Yes。
以什么方式运行samba?我们选择默认的daemons方式,让他在后台监听。
创建samba口令库?Yes。
4 小测试
你也许不相信,但是现在,你已经可以在Windows的网上邻居里面看到这台名字叫Debian的Linux主机了!
找到网上邻居的workgroup组,你会发现她确实已经在那里了。怎么样,振奋吧!
不过,你会发现,无论你输入什么用户名和口令,都无法通过验证。那是因为,我们还没有告诉samba,验证哪些用户和口令。
5 快速入门
Samba只有一个配置文件!
那就是/etc/samba/smb.conf。
下面这个只有几行的smb.conf,就可以让samba为我们工作!
[global]
log file = /var/log/samba/log.%m
[tmp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
6 配置
6.1 检查当前配置
我们的samba现在已经运行了,那么,它正在提供哪些服务呢?如果打开/etc/samba/smb.conf,你可能会觉得内容太多,看不过来了;那好,我们有个命令可以用:testparm。这个命令,可以让我们检查smb.conf的配置是否正确,而且还可以列出一个实际上有效的 smb.conf的内容:
# testparm
通过这个命令,你看到了吧,实际上发挥作用的配置,就是那么几行。
6.2 写一个最小的smb.conf
实际上,为了做实验,我们可以写一个更小的smb.conf,就向上一小节里面提到的那样。那个配置文件,可以让samba把/tmp共享,并且可以往里写文件。
好,我们不妨就采用上面这个文件吧,请你先将/etc/samba/smb.conf改名,比如改为smb.conf.backup,然后把上面的内容抄下来,保存为新的/etc/samba/smb.conf。
记住,要是修改后的smb.conf生效,需要重新启动samba:
# /etc/init.d/samba restart
6.3 创建用户
在我们创建用户之前,没有人能够访问samba服务器,就是说,在windows平台上,无论用什么用户名和口令,都无法访问网上邻居里面的debian这台机器。
我们需要在/etc/samba/目录下面,生成一个文件,名字叫:smbpasswd:
# touch /etc/samba/smbpasswd
然后,使用smbpasswd命令,添加samba用户:
# smbpasswd -a kanaka
New SMB password:
Retype new SMB password:
这时,kanaka就被写进了/etc/samba/smbpasswd文件,kanaka就可以从windows访问samba了。
7 测试
在你的windows里面,找到网上邻居的debian,用刚才创建的用户,访问它,并向tmp目录拷贝一个文件。怎么样,可以了吧。
8 TODO
这是本文的0.1版,纯粹针对初学者的。
在下一个版本,我将详细描述smb.conf的配置方法,来实现WinNT/2000服务器的功能。
9 结束语
本文是《Debian服务器设置入门》系列教程之第四章,建议您按照顺序阅读,有问题可以和作者kanaka联系。
10 参考文献
《Samba 配置》,地址是:http://www.linuxfocus.org/ChineseGB/March2002/article177.shtml
《使用 Linux 和 SAMBA替代Windows NT/2000 服务器》,地址是:http://www.linuxfocus.org/ChineseGB/May2002/article247.shtml
让我们一起感谢原文作者,以及翻译者!
《Debian服务器设置入门》系列教程之第五章:Samba服务器
第五章 在Debian上用Bind配置DNS服务器
本章目录
1 什么是DNS
2 为什么需要DNS
3 BIND介绍
4 配置
5 测试
6 TODO
7 结束语
8 参考文献
1 什么是DNS
初学者可能不理解DNS到底是什么,干什么用。我是在1998年大学毕业时才听说这个词的。那时我在聊天室碰到潍坊信息港的一个网管,我恬不知耻地说我也是个网管,他说也维护DNS吗?我说,DNS是什么?
——DNS,Domain Name Service,或者Domain Name Server,域名服务/域名服务器。
你在你的浏览器里面输入http://www.linuxsir.com之后,之所以可以上去,就是因为有了DNS。
简单地说,DNS把一串名字,转换成了IP地址。你可能会说:如果我直接使用IP地址,那就不需要DNS了吗?对!不过,请你接着往下看。
2 为什么需要DNS
2.1 互联网需要DNS
现在几乎整个互联网都是基于TCP/IP的。在这个世界里,不管你访问哪个网站、哪台机器,必须得知道它的IP地址才可以。好,我告诉你, 202.106.185.203这个地址,是新浪网的IP地址,你每次上网,都得再浏览器的地址栏里面输入http://202.106.185.203 才可以访问新浪。你可能会说:没问题,不就一串数字嘛,我记得住!可是,你想一下,在Internet上,有多少台主机啊!你可能会记住其中几台甚至几十台的IP地址,但是你肯定记不住全部。
正是由于IP地址不好记,人们才想了个办法,让你只需要记住名字,然后系统通过这个名字,到数据库里面去查找它的IP地址,然后再把查到的IP地址反馈给你,比如反馈给浏览器,最后,浏览器用这个由DNS给的IP地址去访问你想去的站点。
2.2 局域网需要DNS
那么,在局域网内部呢?需要DNS吗?
太需要了!你不要觉得,单位就这么几台机器,用hosts解析,不也一样吗?你可千万记住这个教训,当公司越来越大,hosts的维护量将大的惊人!我所在的公司,前不久就面临了这种尴尬。所以,一定要有一台DNS,然后在公司内部定义一个规范的主机命名规则,这才是个好网管,呵呵。
3 BIND介绍
Bind是使用最广泛的Domain Name Server,它是Berkeley
Internet Name Domain Service的简写,伯克里大学编写的。这个大学可真厉害,写了不少著名程序。
原本bind的版本一直在 4.8.x 4.9.x 左右,后来一口气跳到8.1.x,是因为大幅度改进了功能,并修复了漏洞。现在bind有两个版本在同时发展,bind
8.x 和 bind 9.x,最新版本是8.3.3和9.2.1。
3 安装
3.1 软件版本
目前debian的sid,同样提供了8版本的bind和9版本的bind,后者的软件包名字叫做bind9.deb,版本是最新的9.2.1版。
3.2 安装
安装过程非常简单:
# apt-get install bind9
4 配置
由于我们前面第三章在配置邮件服务器的时候,使用了hosts文件来解析IP地址,现在我们需要把它去掉,让系统通过DNS来解析它所需要的IP地址。
我们制作基本的配置。至于高级功能,我们将在本文的下一个版本里描述。
4.1 去掉hosts信息
如果你阅读过本文第三章,你就会知道,我有两台机器,一台笔记本电脑安装了win2000,名字叫notepad;另一台台式机装了Debian,机器名叫debian。他们都属于test.com这个域,这个域名没有在ISP那里注册,是我们内部用的。我分别编辑win2000机器上的\winnt\system32\drivers\etc\hosts这个文件和 debian机器上的/etc/hosts,去掉下面的这些行:
192.1.110.120 debian.test.com debian
192.1.110.122 notepad.test.com notepad
这时你可以在win2000机器上启动Outlook Express,做一下收取邮件的动作,它会说找不到debian.test.com——这就对了,因为hosts文件里面没有指向这个名字的IP地址,而且,我们也没有给win2000指定DNS服务器,所以它肯定找不到debian.test.com。
4.2 在客户机上设置DNS
在我的Win2000机器里面,在桌面上右击“网上邻居”选择属性,在出现的窗口中右击“本地连接”选择属性,然后双击TCP/IP,在右下角的“首选DNS”里面,输入192.1.110.120。这是我的 Debian机器在局域网上的IP地址。如果你用的是win98,那么情况差不多,在一个叫做DNS的标签里面设置首选DNS。我很久不用98了,差不多忘了。
如果你是个急性子,你会发现,诶?怎么设上了DNS了,我的Outlook
Express还是说找不到debian.test.com?呵呵,别急别急,我们的DNS服务器还没弄好呐!
4.3 在Debian上设置DNS
我们要事先把Debian机器的DNS指向它自己。修改/etc/resolv.conf,修改成:
search test.com
nameserver 192.1.110.120
你不会把我的IP地址也抄上吧,呵呵。
4.4 配置DNS服务器
4.4.1 应用环境
我们把实验环境重新描述一下。
◆一个C类网段地址 (本例中假定是192.1.110.0)
◆企业域名为 test.com,没有在ISP注册。(主域名服务器地址
192.1.110.120,主机名为 debian.test.com)
◆企业网通过路由器与Internet连接
假如你的应用环境与上述条件不同,也请往下看,本文会在上述例子的基础上针对以下情况作修正:
◆多个网段
◆封闭的内部网
◆只能访问局部公共网的情况(如169网、上海热线等)
我们将使用一个叫做rndc的工具,rndc可以用于启动、中止、重启动、刷新DNS数据、输出DNS数据等多种调试功能。
4.4.2 配置named.conf
DNS 服务器的主体是域名服务器进程
named ,named 启动后向DNS客户机提供域名解析服务,把域名转换成IP地址。
named 启动时需要读取一个初始化文件,缺省情况下是
/etc/bind/named.conf,这是bind的基本配置文件,不过这里面并不包含DNS数据。
注意,你也许会在网上找到一些教程,这些教程有的是以
bind 4.x为蓝本的,所以它的named.conf里面的注释符号是分号“;”,但是自动bind
8开始,语法变了。下面我们来说一下:
; 这是bind 4.x的注释,前面用分号
//不过从bind 8开始,有三种注释符号可以用:
C样式, C++样式, 或者shell样式:
/* 这是C样式的注释符号 */
// 这是 C++样式的注释符号
# 这是shell样式的注释符号
请你先把默认的/etc/bind/named.conf备份一下,我将给大家写一个简单的named.conf,用于做Caching-only的DNS配置。
// 指定 named 从
/var/cache/bind 目录下读取 DNS 数据文件。
// 这个目录用户可自行指定并创建,指定后所有的DNS
数据文件都存放在此目录下。
options {
directory "/var/cache/bind";
};
// 指定 named 作为 test.com
域的主域名服务器。
// db.test 文件中包含所有 *.test.com
形式的域名转换数据。
zone "test.com" in {
type master;
file "db.test";
};
// 指定 named 作为 192.1.110
网段地址转换主服务器。
// db.192.1.110 文件中包含了所有 192.1.110.*
形式的地址到域名的转换数据。
zone "110.1.192.in-addr.arpa" in {
type master;
file "db.192.1.110";
};
// 指定 named
作为127.0.0网段地址转换主服务器。
// db.127.0.0 文件中包含了 127.0.0.*
形式的地址到域名的转换数据。
//(127.0.0网段地址是局域网接口的内部
loopback 地址)
zone "0.0.127.in-addr.arpa" in {
type master;
file "db.127.0.0";
};
// 指定 named 从
db.cache 文件中获得 Internet 的顶层“根”服务器地址。
zone "." in {
type hint;
file "db.cache";
};
要注意第二和第三个区域中的网段地址是倒写的,另外,各个区域所使用的数据文件的文件名也是可以自行决定的。
请把上面的内容保存为你的/etc/bind/named.conf。
4.4.3 准备数据文件
上面的那个named.conf,相信你已经看明白了。那里面提到,在/var/cache/bind这个目录下面,应该有DNS数据文件db.test、db.192.1.110、db.127.0.0
还有 db.cache。下面我们就要建立这些文件。
4.4.3.1 建立 db.test 文件
根据 /etc/bind/named.conf 的定义,我们在
/var/cache/bind 目录下建立 db.test,其中应该包括所有在 test.com
域内的主机节点。但在机器数量较多时,为了调试方便,建议一开始只把几台节点的数据放入文件,待
named 正常工作后再把其他节点的数据补充进去。下面是 db.test的例子:
@ IN SOA debian.test.com. root.debian.test.com. (
200211131 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
3600000 ; expire, seconds
86400 ) ; minimum, seconds
NS debian.test.com.
MX 10 debain.test.com.
; 域名服务器列表
test.com. IN NS debian.test.com.
; 计算机名称和地址
localhost.test.com. IN A 127.0.0.1
debian.test.com. IN A 192.1.110.120
notepad.test.com. IN A 192.1.110.122
; 别名
www IN CNAME debian.test.com.
ftp IN CNAME debian.test.com.
其中第一行是 SOA
记录,定义了域名数据的基本信息,依次是 DNS 服务器名、DNS
管理员邮件地址,括号内的第一个数字是文件版本号,每次本文件内容修改后,必须更改此号。其余数字与DNS服务器直接的数据交换有关,在这里我们不需要改动。
括号后面有一条NS记录和一条MX记录,定义了域名服务器本身的域名和username@test.com
形式邮件地址所对应的邮件服务器名字。
在此以下是各种域名/地址转换数据,其中A记录是DNS域名到IP地址的记录,是必须有的。
CNAME定义了一些主机的别名,比如我们将debian.test.com作为公司的www和ftp服务器,所以我们提供了 www.test.com和ftp.test.com作为debian.test.com的别名,用户只需要根据习惯就可以访问公司的www、ftp服务器了,如果将来我们换用别的主机作www和ftp服务器,只需要修改CNAME记录就可,对用户没有影响。
注意: CNAME 记录最后的带域名的主机名后必须带一个“.”。
复制这个文件到bind的工作目录/var/cache/bind,这个目录是我们刚才在/etc/bind/named.conf里面定义的。
4.4.3.2 建立 db.127.0.0
文件
这是个反向
DNS数据文件。
反向数据文件是这样用的:知道 IP地址,查询主机名。每个网段分别有一个数据文件。
反向 DNS 数据文件中的主要部分是 PTR 记录,PTR
记录中的 IP 地址都只有主机号,named 会根据 named.conf
的定义自动加上前面的网络号,注意后面的主机名要附加一个“.”
对于内部网段 127.0.0 通常只有一个地址,即 127.0.0.1
loopback 地址,db.127.0.0 内容如下:
@ IN SOA debian.test.com root.debian.test.com. (
2002111300 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS debian.test.com.
1 IN PTR localhost.
把这个文件到复制/var/cache/bind目录下面。
4.4.3.2 建立 db.192.1.110 文件
把所有相同网段的主机 IP地址和主机名,都写在里面:
@ IN SOA debian.test.com root.debian.test.com. (
2002111300 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS debian.test.com.
; 所有主机都写在这儿
120 PTR debian.test.com.
122 PTR notepad.test.com.
同样,要把这个文件到复制/var/cache/bind目录下面。
4.4.3.3 建立 db.cache 文件
默认情况下,我们在安装bind9的时候,应该有个文件在/etc/bind/db.root,这个文件就是我们的想要的根的定义。由于我们在
named.conf中指定的文件名是 db.cache,所以我们把它复制为db.cache:
# cp /etc/bind/db.root /var/cache/bind/db.cache
5 测试
我们使用rndc这个工具来控制bind。
5.1 让新配置文件生效
因为我们刚才改了配置,所以,需要重新加载一下:
# rndc reload
然后还需要重新配置一下:
# rndc reconfig
如果有问题,你可以使用debian为我们准备的脚本重新启动bind:
# /etc/init.d/bind9 restart
5.2 在win2000机器上测试
在win2000上(就是我们的notepad.test.com),使用Outlook
Express,收发邮件。
看,正常了吧!证明,我们的win2000通过192.1.110.120这台DNS服务器,找到了debian.test.com这台机器的IP地址了。
5.3 测试工具介绍
在debian上,我推荐大家使用dig或者host来测试DNS设置,因为nslookup快要退休了,以后版本的软件可能不再提供nslookup这个工具了。要使用这些工具,需要安装dnsutils:
# apt-get install dnsutils
然后,就可以使用dig来测试DNS了:
# dig -x 192.1.110.120
第一次运行,可能比较慢,别着急,等一会。
6 TODO
这是本文的0.1版,纯粹针对初学者的,仅仅实现了最普通的功能。
在下一个版本,我将深入讲解DNS的设置。
7 结束语
本文是《Debian服务器设置入门》系列教程之第五章,建议您按照顺序阅读,有问题可以和作者kanaka联系。
8 参考文献
《在Linux上建立DNS服务器》,曹江华,2001年12月27日。地址是:http://www.ccidnet.com/html/tech/os/2001/12/27/92_3895.html
让我们一起感谢原文作者