洞洞! | 原喵空间

正文

Linux

作者:系统
{"name":"Linux","sizeType":1,"icon":"","order":9999}

回复

redhat linux下如何安装Gcc

作者:xiaowuhello
redhat下如何安装Gcc 今天安装软件的时候,提示没有gcc 如是,我开始安装gcc 在linux的源安装光盘里面 [root@mail Server]# ll | grep gcc 出来了 gcc-4.1.2-48.el5.i386.rpm [root@mail Server]# rpm -ivh gcc-4.1.2-48.el5.i386.rpm 提示缺少glibc-devel- 继续glibc-devel-2.5-49.i386.rpm 依然提示少文件…… 后来发现需要依赖以下文件…… 必须按照顺序来安装…… kernel-headers-2.6.18-194.el5.i386.rpm glibc-headers-2.5-49.i386.rpm glibc-devel-2.5-49.i386.rpm libgomp-4.4.0-6.el5.i386.rpm gcc-4.1.2-48.el5.i386.rpm 错误类似如下 [root@mail Server]# rpm -ivh gcc-4.1.2-48.el5.i386.rpm warning: gcc-4.1.2-48.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 error: Failed dependencies: glibc-devel >= 2.2.90-12 is needed by gcc-4.1.2-48.el5.i386 libgomp >= 4.1.2-48.el5 is needed by gcc-4.1.2-48.el5.i386
查看回复

Linux环境下邮件服务器的分析比较

作者:xiaowuhello
Linux环境下邮件服务器的分析比较 2009-11-17 作者: 编辑:乐乐 点击进入论坛 关键词:邮件服务器   几年以前,Linux环境下可以选择的可以免费邮件服务器软件只有Sendmail,但是由于Sendmail的缺陷,一些开发者先后开发了若干种其他的邮件服务器软件。当前,运行在Linux环境下免费的邮件服务器,或者称为MTA(Mail Transfer Agent)有若干种选择,比较常见的有Sendmail、Qmail、Postfix、exim及Zmailer等等。本文希望通过对几种影响相对来说比较大的主流Linux环境下的MTA的特点进行阐述,并对其优缺点一一分析比较,使用户在选择Linux环境下的免费MTA时有一个选择的依据。   Postfix   Postfix是一个由IBM资助下由Wietse Venema 负责开发的自由软件工程的一个产物,其目的是为用户提供除sendmail之外的邮件服务器选择。Postfix力图做到快速、易于管理、提供尽可能的安全性 ,同时尽量做到和sendmail邮件服务器保持兼容性以满足用户的使用习惯。起初,Postfix是以VMailer这个名字发布的,后来由于商标上的原因改名为Postfix。   主要设计目标   Postfix工程的目标是实现一个邮件服务器,提供给用户除sendmail以外的选择。其设计目标包括:   性能。 Postfix要比同类的服务器产品速度快三倍以上,一个安装Postfix的台式机一天可以收发百万封信件。Postfix设计中采用了web服务器的的设计技巧以减少进程创建开销,并且采用了其他的一些文件访问优化技术以提高效率,但同时保证了软件的可靠性。   兼容性。Postfix设计时考虑了保持Sendmail的兼容性问题,以使移植变的更加容易。Postfix支持/var[/spool]/mail, /etc/aliases, NIS, 及 ~/.forward等文件。然而Postfix为保证管理的简单性,所以没有支持配置文件sendmail.cf。   安全和健壮性。Postfix设计上实现了程序在过量负载情况下仍然保证程序的可靠性。当出现本地文件系统没有可用空间或没有可用内存的情况时,Postfix就会自动放弃,而不是重试使情况变的更糟。   灵活性。Postfix结构上由十多个小的子模块组成,每个子模块完成特定的任务,如通过SMTP协议接收一个消息,发送一个消息,本地传递一个消息,重写一个地址等等。当出现特定的需求时,可以用新版本的模块来替代老的模块,而不需要更新整个程序。而且它也很容易实现关闭某个功能。   安全性。Postfix使用多层防护措施防范攻击者来保护本地系统,几乎每一个Postfix守护进程都能运行在固定低权限的chroot之下,在网络和安全敏感的本地投递程序之间没有直接的路径—一个攻击者必须首先突破若干个其他的程序,才有可能访问本地系统。Postfix甚至不绝对信任自己的队列文件或IPC消息中的内容以防止被欺骗。Postfix在输出发送者提供的消息之前会首先过滤消息。而且Postfix程序没有set-uid。   Postfix的一些特点   支持多传输域:sendmai支持在Internet, DECnet, X.400及UUCP之间转发消息。 Postfix则灵活的设计为无须虚拟域(vistual domai)或别名来实现这种转发。但是在早期的发布里仅仅支持STMP和有限度地支持UUCP,但对于我国用户来说,多传输域的支持没有什么意义。   虚拟域:在大多数通用情况下,增加对一个虚拟域的支持仅仅需要改变一个Postfix查找信息表。其他的邮件服务器则通常需要多个级别的别名或重定向来获得这样的效果。   UCE控制(UCE,unsolicited commercial email): Postfix能限制哪个主机允许通过自身转发邮件,并且支持限定什么邮件允许接进。Postfix实现通常的控制功能:黑名单列表、RBL查找、HELO/发送者DNS核实。基于内容过滤当前没有实现。   表查看: Postfix没有实现地址重写语言,而是使用了一种扩展的表查看来实现地址重写功能。表可以是本地 dbm或 db文件等格式。   Postfix体系结构及与Sendmail的比较   Postfix是基于半驻留,互操作的进程的体系结构,每个进程完成特定的任务,没有任何特定的进程衍生关系(父子关系)。而且,独立的进程来完成不同的功能相对于“单块”程序具有更好的隔离性。此外,这种实现方式具有这样的优点:每个服务如地址重写等都能被任何一个Postfix部件所使用,无须进程创建等开销,而仅仅需要重写一个地址,当然并不是只有postfix采用这种方式。   Postfix是按照这种方式实现的:一个驻留主服务器根据命令运行Postfix守护进程,守护进程完成发送或接收网络邮件消息,在本地递交邮件等等功能。守护进程的数目由配置参数来决定的,并且根据配置决定守护进程运行的次数(re-used times),当空闲时间到达配置参数指定的限度时,自动消亡。这种方法明显地降低了进程创建开销,但是单个进程之间仍然保持了良好的隔离性。   Postfix的设计目标就是成为Sendmail的替代者。由于这个原因,Postfix系统的很多部分,如本地投递程序等,可以很容易地通过编辑修改类似inetd的配置文件来替代。   Postfix的核心是由十多个半驻留程序实现的。为了保证机密性的原因,这些Postfix进程之间通过Unix的socket或受保护的目录之下的FIFO进行通信。即使使用这种方法来保证机密性,Postfix进程并不盲目信任其通过这种方式接收到的数据。   Postfix进程之间传递的数据量是有限制的。在很多情况下,Postfix进程之间交换的数据信息只有队列文件名和接收者列表,或某些状态信息。一旦一个邮件消息被保存进入文件,其将在其中保存到被一个邮件投递程序读出。   Postfix采用一些通常的措施来避免丢失信息:在收到确认以前通过调用flush和fsync()保存所有的数据到磁盘中。检查所有的系统调用的返回结果来避免错误状况。   大多数构建邮件服务器者都会选择sendmail,公平的来讲sendmail是一个不错的MTA(Mail Transfer Agent),最初开发时Eric Allman的设计考虑主要放在了邮件传递的成功性。不幸的是,Sendmai开发时没有太多的考虑Internet环境下可能遇到的安全性问题。Sendmail在大多数系统上只能以根用户身份运行,这就意味着任何漏洞都可能导致非常严重的后果,除了这些问题之外,在高负载的情况Sendmail运行情况不是很好。   安全   Postfix则并一定要以root的身份运行,而只需要一个主(master)程序以root身份运行,其生成进程来处理接入、发出及本地邮件投递工作。通过使用一系列模块部件,每个任务由一个单独的程序来运行(这样使审计变的容易一些)。例如发出邮件被卸载到一个队列目录,在这里“pcikup”程序取到该邮件然后将邮件传递给“cleanup”程序,其再将邮件传递给“trivial-rewrite”,其负责处理邮件头,最后若邮件目的是别的系统则将邮件传递给“smtp”程序。而且相对于Sendmail来说Postfix也更容易设置chroot‘ed环境。只要简单地通过编辑master.cf(一般位于/etc/postfix内)文件即可实现,并且Postfix将运行chroot‘ed,以限定在其定义的队列目录之下(通常位于/var/spool/postfix),同样可以在master.cf中对Postfix的单一模块设置进程限制。用户可以限制Postfix以哪个用户的身份运行,一般来说是以“postfix”用户(概念上该用户和Apache的nobody类似)运行,该用户可以访问特定的队列目录。Postfix其他的主要优点是起配置文件的清晰易懂性。   与Sendmail的比较 如sendmail之类的邮件系统是按照一个单块的结构设计实现的,该“单块”程序实现所有的功能。当然这种结构有利于在系统的不同部分之间共享数据。但是这种结构容易出现一些致命的错误。而如qmail的邮件系统上使用一种分层次的结构,按照固定得顺序运行不同功能的子模块进程,执行完毕之后就将其释放。这种方法有良好的“绝缘”性,但是增加了进程创建开销和进程间通信开销。但是通过合理的规划子模块进程的运行顺序可以将开销保持在可以接受的范围内。   使用其他的MTA替代Sendmail是一件非常麻烦的事情,用户往往又要花大量的时间去熟悉新的MTA的配置和使用。而使用Postfix,你可以利用很多以有的配置文件。如(access, aliases, virtusertable等等),只需要简单的在master.cf中定义一下即可。此外,Postfix在行为上也很象Sendmail,用户可以使用sendmail命令来启动Postfix。   当然,使用一个软件来替代另外一个软件需要解决特定的问题。部分原因是因为Postfix的安全特性,在配置Postfix时可能会遇到一些问题。最典型的问题是向root用户发送邮件。Postfix一般不提高自身的权限(向root用户发送邮件所必须的)来投递邮件。用户需要在别名文件中为root定义别名,如:root: someuser。这同样会对若干个邮件列表模块发生影响,特别是SmartList。一般来说实现邮件列表最好使用Majordomo,它易于配置。   Sendmail一个很突出的问题就是可扩展性和性能问题。例如用户若希望每天重新启动Sendmail来实现自动更新配置文件(如为虚拟主机重定向邮件)就会出现问题。Sendmail生成新的进程来处理发送和接收邮件,这些进程会一直存在直到传输结束,之后Sendmail才能退出,这样你的脚本程序将不能正确的重起Sendmail。而对于Postfix,用户则只需要发出命令postfix reload即可,Postfix将会重新加载其配置文件。   另外,对于有数以万计的用户的邮件服务器来说,使用文件来存储如匹配用户发出邮件地址(例如bob发出的信的发信人修改为sales@example.org)。对于大量用户来讲,该文件就会变的很巨大,从而影响系统的运行效率。而Postfix则可以和一个数据库后台集成起来(当前只支持MySQL)来存放其配置信息,数据库方式要比文件方式在可扩展性方面强大很多。   遵从IBM的开放源代码版权许可证,用户可以自由地分发该软件,进行二次开发。其唯一的限制就是必须将对Postfix做的修改返回给IBM公司。因为IBM资助了Wietse的开发。   与Qmail的比较   Qmail的缺点就是配置方式和Sendmail不一致,不容易维护。而且Qmail的版权许可证含义非常模糊,甚至没有和软件一起发布。应用作者的话:若你希望分发自己修改版本的Qmail,你必须得到我的许可。   Qmail qmail是有Dan Bernstein开发的可以自由下载的MTA,其第一个beta版本0.70.7发布于1996年1月24日,1997年2月发布了1.0版,当前版本是1.03。   Qmail的特点   安全性 为了验证Qmail的安全性,Qmail的支持者甚至出资$1000悬赏寻找Qmail的安全漏洞,一年以后,该奖金没有被领取,而被捐献给自由软件基金会。目前,Qmail的作者也出资$500来寻求Qmail的安全漏洞。   速度:Qmail在一个中等规模的系统可以投递大约百万封邮件,甚至在一台486一天上能处理超过10万封邮件,起支持并行投递。Qmail支持邮件的并行投递,同时可以投递大约20封邮件。目前邮件投递的瓶颈在于SMTP协议,通过STMP向另外一台互联网主机投递一封电子邮件大约需要花费10多秒钟。Qmail的作者提出了QMTP(Quick Mail Transfer Protocol)来加速邮件的投递,并且在Qmail中得到支持。Qmail的设计目标是在一台16M的机器上最终达到每天可以投递大约百万级数目的邮件。   可靠性:为了保证可靠性,Qmail只有在邮件被正确地写入到磁盘才返回处理成功的结果,这样即使在磁盘写入中发生系统崩溃或断电等情况,也可以保证邮件不被丢失,而是重新投递。   特别简单的虚拟域管理,甚至有一个第三方开发的称为vpopmail的add-on来支持虚拟POP域。使用这个软件包,POP3用户不需要具有系统的正式帐户。   使用ezmlm支持用户自控制的邮件列表功能。   邮件用户和系统帐户隔离,为用户提供邮件帐户不需要为其设置系统帐户,从而增加了安全性。   Sendmail vs Qmail   首先:sendmail是发展历史悠久的MTA,当前的版本是8.10.2。当然,Sendmail在可移植性、稳定性及确保没有bug方面有一定的保证。但是Internet上有很多帖子都是关于如果攻击Sendmail,这对于管理员来说是一个噩梦。Sendmail在发展过程中产生了一批经验丰富的Sendmail管理员,并且Sendmail有大量完整的文档资料,除了Sendmail的宝典:O‘Reilly‘s sendmail book written by Bryan Costales with Eric Allman以外,网络上有大量的tutorial、FAQ和其他的资源。这些大量的文档对于很好的利用Sendmail的各种特色功能是非常重要的。但是Sendmai当前来说是一个成熟的MTA。   当然,Sendmail具有一些缺点,其特色功能过多而导致配置文件的复杂性。当然,通过使用m4宏使配置文件的生成变的容易很多。但是,要掌握所有的配置选项是一个很不容易的事情。Sendmail在过去的版本中出现过很多安全漏洞,所以使管理员不得不赶快升级版本。而且Sendmail的流行性也使其成为攻击的目标,这有好处也有坏处:这意味着安全漏洞可以很快地被发现,但是同样使Sendmail更加稳定和安全。另外一个问题是Sendmail一般缺省配置都是具有最小的安全特性,从而使Sendmail往往容易被攻击。如果使用Sendmail,应该确保明白每个打开的选项的含义和影响。一旦你理解了Sendmail的工作原理,就Sendmail的安装和维护就变的非常容易了。通过Sendmail的配置文件,用户实现完成一切可以想象得到的需求。   Qmail是一个选择,其在设计实现中特别考虑了安全问题。如果你需要一个快速的解决方案如,一个安全的邮件网关,则Qmail是一个很好的选择。Qmail和Sendmail的配置文件完全不同。而对于Qmail,其有自己的配置文件,配置目录中包含了5-30个不同的文件,各个文件实现对不同部分的配置(如虚拟域或虚拟主机等)。这些配置说明都在man中有很好的文档,但是Qmail的代码结构不是很好。   Qmail要比Sendmail小很多,其缺乏一些现今邮件服务器所具有的特色功能。如不象Sendmail,qmail不对邮件信封的发送者的域名进行验证,以确保域名的正确性。自身不提供对RBL的支持,而需要add-on来实现。,而Sendmail支持RBL。同样Qmail不能拒绝接收目的接收人不存在信件,而是先将邮件接收下来,然后返回查无此用户的的邮件。Qmail最大的问题就出在发送邮件给多个接收者的处理上。若发送一个很大的邮件给同一个域中的多个用户,Sendmail将只向目的邮件服务器发送一个邮件拷贝。而Qmail将并行地连接多次,每次都发送一个拷贝给一个用户。若用户日常要发送大邮件给多个用户,使用Qmail将浪费很多带宽。可以这么认为:Sendmail优化节省带宽资源,Qmail优化节省时间。若用户系统有很好的带宽,Qmail将具有更好的性能,而如果用户系统的带宽资源有限,并且要发送很多邮件列表信息,则Sendmail效率更高一些。Qmail不支持.forward(.forward在很多情况下对用户很有用处);不使用/var/spool/mail,而是将邮件存放在用户home目录。下面是一些使用Qmail不容易完成的工作,要使用Qmail完成这些工作,可能需要用户自己动手实现或者使用第三方提供的不够可靠的模块。   Qmail的源代码相对于Sendmail来说要更加容易理解,这对于希望深入到内部了解MTA机制的人员来说是一个优点。Qmail在安全性方面也要稳定一些。Qmail有很好的技术支持,但是没有象Sendmail那样被广泛地应用和大量的管理员用户群。Qmail的安装不象Sendmail那样自动化,需要手工步骤。而且Qmail的文档不如Sendmail那样完整和丰富。   Qmail的add-ons比Sendmail要少一些。一般来说对于经验稍微少一些的管理员,选择Qmail相对要好一些。Qmail要简单一些,而且其特色功能能满足一般用户的需求。Sendmail类似于office套件,80%的功能往往都不被使用。这就使Qmail在一些场合可能被更受欢迎一些,其具有一些Sendmail所没有的更流行和实用的特色功能,如:Qmail具有内置的pop3支持。Qmail同样支持如主机或用户的伪装、虚拟域等等。Qmail的简单性也使配置相对容易一些。   Qmail被认为相对于Sendmail更加安全和高效,运行Qmail的一台pentium机器一天可以处理大约200,0000条消息。   Qmail相对于其他的MTA要简单很多,主要体现在:(1)其他的MTA的邮件转发、邮件别名和邮件列表都是采用相互独立的机制,而qmail采用一种简单的转发(forwarding)机制来允许用户处理自己的邮件列表(2)其他的MTA都提供快速而不安全的方式及慢的队列方式的邮件投递机制;而qmail发送是由新邮件的出现而触发的,所以其投递只有一种模式:快速的队列方式(3)其他的MTA实际上包括一个特定版本的inetd来监控MTA的平均负载,而qmail设计了内部机制来限制系统负载,所以qmail-smtpd能安全地从系统的inet来运行   sendmail有很多的商业支持,而且由于大量的用户群,在互联网上有大量的潜在技术支持。而Qmail只有很有限的技术支持。有家公司inter7.com提供对Qmail的支持,该公司同样提供了免费的add-ons,包括一个基于web的管理工具-QmailAdmin及一个通过vpopmail的对虚拟域的支持,甚至具有一个基于web的客户借接口—SqWebMail。   Qmail还具有一些其他的缺憾。如它不是完全遵从标准,它不支持DSN,作者认为DSN是一个即将消亡的技术,而Qmail的VERP可以完成同样的工作,而又不象DSN依赖于其他主机的支持。Qmail另外一个问题是其不遵从支持7bit系统标准,而每次都发送8bit。若邮件接收一方不能处理这种情况,就会出现邮件乱码的情况。   从安全性来讲,Sendmail要比Qmail差一些,Sendmail在发展中出现过很多很著名的安全漏洞;而Qmail相对要短小精悍,但是仍然提供了基本的STMP功能。而Qmail的代码注释要少一些。Qmail的一个很好的特色是其支持一种可选的基于目录的邮件存储格式,而不是使用一个很大的文件来存储用户所有的邮件。若用户的邮件服务器进行很多的POP3服务,则这种邮件存储格式可以提高效率。但是遗憾的是Pine自身并不支持这种存储格式,如果需要可以使用一些补丁来达到这个目的。   Qmail的优点是:每个用户都可以创建邮件列表而无须具有根用户的权限,如用户foo可以创建名为foo-slashdot, foo-linux,foo-chickens 的邮件列表,为了提供更好的功能,有一个叫ezmlm(EZ Mailing List Maker)的工具可以支持自动注册和注销、索引等Majordomo所具有的各种功能,但是都是CLI驱动的,只需要编辑很少的文件。Qmail非常适合在小型系统下工作,一般只支持较少的用户或用来管理邮件列表。Qmail速度快并且简单:Qmail是当你希望安全切容易配置的最佳的选择;Qmail可以在2个小时内搞定配置,而Sendmail可能在两天内都搞不定。   rocketmail internic 等都使用qmail来构建   ZMailer   ZMailer是一个高性能、多进程的Unix系统邮件程序。 [ a.k.a. MTA per X.400 parlance ],其可以从下面的服务器ftp://ftp.funet.fi/pub/unix/mail/zmailer/ 自由下载。其也是按照单块模式设计的。如Hotmail等邮件系统就是用Zmailer构建的。   Exim Exim是由Cambridge 大学开发的遵从GPL的MTA,其风格上类似与Smail 3,但是比Smail 3更加完善。当前最新版本是3.15。其主站点为http://www.exim.org/。其最大的特点就是配置简单性,但是其安全性不如Qmail及Postfix。   下面是对几种MTA的特点的比较,综合的来讲,Qmail和Postfix都是很不错的MTA,选择的标准往往是个人的喜好问题,Postfix发展历史要比Qmail迟一些。   MTA 成熟性 安全性 特色 性能 Sendmail兼容性 模块化设计 qmail medium high high high addons yes Sendmail high low high low x no Postfix low high high high yes yes exim medium low high medium yes no   当然除了这里介绍的几种MTA以外,还有 Smail, Post.Office,the Sun Internet Mail Server (SIMS), MMDF, CommuniGate,PMDF, Netscape Messaging Server,Obtuse smtpd/smtpfwdd,Intermail,MD Switch等其他商业或者免费的MTA可以选择。
查看回复

【原创】bind中的named.conf 解析文件权限的探讨

作者:xiaowuhello
【原创】bind中的named.conf 解析文件权限的探讨 声明我的环境,我的DNS服务器
是已经配置ok的,把我的配置贴出来 [root@ns named]# cat /var/named/chroot/etc/named.conf [code] options { listen-on port 53 { 192.168.16.254; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; // Those options should be used carefully because they disable port // randomization // query-source port 53; // query-source-v6 port 53; allow-query { any; }; allow-query-cache { any; }; }; zone "." IN { type hint; file "named.ca"; }; zone "test.com" IN { type master; file "test.com.zone"; allow-update { none; }; }; zone "16.168.192.in-addr.arpa" IN { type master; file "16.168.192.in-addr.arpa.zone"; allow-update { none; }; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; };
[root@ns named]# cat /var/named/chroot/var/named/test.com.zone
[code]$TTL 86400 @ IN SOA ns.test.com. root.test.com. ( 2011011300 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum @ IN NS ns.test.com. ns IN A 192.168.16.254 @ IN MX 5 mail.test.com. mail IN A 192.168.16.253 www IN A 192.168.16.252
[root@ns named]# cat /var/named/chroot/var/named/16.168.192.in-addr.arpa.zone
$TTL 86400 @ IN SOA ns.test.com. root.test.com. ( 2011011300 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum @ IN NS ns.test.com. 254 IN PTR ns.test.com @ IN MX 5 mail.test.com. 253 IN PTR mail.test.com. 252 IN PTR www.test.com.
[root@ns etc]# ll 总计 72 -rw-r--r-- 1 root root 1548 01-15 04:16 ~ -rw-r--r-- 1 root root 1891 01-14 01:31 @ -rw-r--r-- 1 root root 1907 01-14 01:26 -rw-r--r-- 1 root root 1559 01-14 01:33 1 -rw-r--r-- 1 root root 405 01-13 19:10 localtime -rw-r----- 1 root named 1230 2010-01-18 named.caching-nameserver.conf -rw-r----- 1 root root 1727 01-16 01:34 named.conf -rw-r----- 1 root named 955 2010-01-18 named.rfc1912.zones -rw-r----- 1 root named 113 01-13 21:45 rndc.key 帅选信息 -rw-r----- 1 root root 1727 01-16 01:34 named.conf Named.conf权限rootroot640 [root@ns etc]# service named restart 停止 named [确定 启动 named [失败 [root@ns etc]# 重启named服务 无法成功哇,来看下日志提示的错误, [root@ns etc]# tail /var/log/messages Jan 16 01:41:49 ns named[10195]: loading configuration: permission denied Jan 16 01:41:49 ns named[10195]: exiting (due to fatal error) Jan 16 01:45:59 ns named[10328]: starting BIND 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 -u named -t /var/named/chroot Jan 16 01:45:59 ns named[10328]: adjusted limit on open files from 1024 to 1048576 Jan 16 01:45:59 ns named[10328]: found 2 CPUs, using 2 worker threads Jan 16 01:45:59 ns named[10328]: using up to 4096 sockets Jan 16 01:45:59 ns named[10328]: loading configuration from '/etc/named.conf' Jan 16 01:45:59 ns named[10328]: none:0: open: /etc/named.conf: permission denied Jan 16 01:45:59 ns named[10328]: loading configuration: permission denied Jan 16 01:45:59 ns named[10328]: exiting (due to fatal error) 日志提示permission denied 表示我们的权限不够 [root@ns etc]# cd ../var/named [root@ns named]# ll 总计 88 -rw-r----- 1 root root 369 01-14 22:18 16.168.192.in-addr.arpa.zone drwxrwx--- 2 named named 4096 01-13 22:41 data -rw-r----- 1 root named 198 2010-01-18 localdomain.zone -rw-r----- 1 root named 195 2010-01-18 localhost.zone -rw-r----- 1 root named 427 2010-01-18 named.broadcast -rw-r----- 1 root named 1892 2010-01-18 named.ca -rw-r----- 1 root named 424 2010-01-18 named.ip6.local -rw-r----- 1 root named 426 2010-01-18 named.local -rw-r----- 1 root named 427 2010-01-18 named.zero drwxrwx--- 2 named named 4096 2004-07-27 slaves -rw-r----- 1 root root 367 01-14 22:17 test.com.zone 帅选信息,我们需要的是 -rw-r----- 1 root root 367 01-14 22:17 test.com.zone -rw-r----- 1 root root 369 01-14 22:18 16.168.192.in-addr.arpa.zone 这里的权限是640 用户是root 组是root Ok 我们来改变一下 [root@ns named]# chmod 644 test.com.zone [root@ns named]# chmod 644 16.168.192.in-addr.arpa.zone [root@ns named]# ll 总计 88 -rw-r--r-- 1 root root 369 01-14 22:18 16.168.192.in-addr.arpa.zone drwxrwx--- 2 named named 4096 01-13 22:41 data -rw-r----- 1 root named 198 2010-01-18 localdomain.zone -rw-r----- 1 root named 195 2010-01-18 localhost.zone -rw-r----- 1 root named 427 2010-01-18 named.broadcast -rw-r----- 1 root named 1892 2010-01-18 named.ca -rw-r----- 1 root named 424 2010-01-18 named.ip6.local -rw-r----- 1 root named 426 2010-01-18 named.local -rw-r----- 1 root named 427 2010-01-18 named.zero drwxrwx--- 2 named named 4096 2004-07-27 slaves -rw-r--r-- 1 root root 367 01-14 22:17 test.com.zone [root@ns named]# 现在test.com.zone16.168.192.in-addr.arpa.zone的权限都是root root 644 再把nbamed.conf改为相同权限 [root@ns named]# cd .. [root@ns var]# cd ../etc [root@ns etc]# chmod 644 named.conf [root@ns etc]# ll 总计 72 -rw-r--r-- 1 root root 1548 01-15 04:16 ~ -rw-r--r-- 1 root root 1891 01-14 01:31 @ -rw-r--r-- 1 root root 1907 01-14 01:26 -rw-r--r-- 1 root root 1559 01-14 01:33 1 -rw-r--r-- 1 root root 405 01-13 19:10 localtime -rw-r----- 1 root named 1230 2010-01-18 named.caching-nameserver.conf -rw-r--r-- 1 root root 1727 01-16 01:34 named.conf -rw-r----- 1 root named 955 2010-01-18 named.rfc1912.zones -rw-r----- 1 root named 113 01-13 21:45 rndc.key 已经改变 root root 644 named.conf [root@ns etc]# service named restart 停止 named [确定 启动 named [确定 [root@ns etc]# Ok 现在的权限问题得以解决 我们来测试下哦 [root@ns etc]# nslookup > mail.test.com Server: 192.168.16.254 Address: 192.168.16.254#53 Name: mail.test.com Address: 192.168.16.253 > 192.168.16.253 Server: 192.168.16.254 Address: 192.168.16.254#53 253.16.168.192.in-addr.arpa name = mail.test.com. > 测试成功,说明权限不存在问题的哦 来想想这个问题 我们给了这几个文件是644 的权限 而且是root 是不是不安全呢 默认的权限 我们看下吧 -rw-r----- 1 root named 1230 2010-01-18 named.caching-nameserver.conf 我们的文件初始都是很这个文件一样的权限 都是640的权限 为了安全 我们把用户改为named 好了 我们来测试下吧 [root@ns etc]# chgrp named named.conf [root@ns etc]# chown named named.conf [root@ns etc]# ll 总计 72 -rw-r--r-- 1 root root 1548 01-15 04:16 ~ -rw-r--r-- 1 root root 1891 01-14 01:31 @ -rw-r--r-- 1 root root 1907 01-14 01:26 -rw-r--r-- 1 root root 1559 01-14 01:33 1 -rw-r--r-- 1 root root 405 01-13 19:10 localtime -rw-r----- 1 root named 1230 2010-01-18 named.caching-nameserver.conf -rw-r--r-- 1 named named 1727 01-16 01:34 named.conf -rw-r----- 1 root named 955 2010-01-18 named.rfc1912.zones -rw-r----- 1 root named 113 01-13 21:45 rndc.key [root@ns etc]# [root@ns named]# chgrp named test.com.zone [root@ns named]# chown named test.com.zone [root@ns named]# chgrp named 16.168.192.in-addr.arpa.zone [root@ns named]# chown named 16.168.192.in-addr.arpa.zone [root@ns named]# chmod 640 16.168.192.in-addr.arpa.zone [root@ns named]# chmod 640 test.com.zone [root@ns named]# ll 总计 88 -rw-r----- 1 named named 369 01-14 22:18 16.168.192.in-addr.arpa.zone drwxrwx--- 2 named named 4096 01-13 22:41 data -rw-r----- 1 root named 198 2010-01-18 localdomain.zone -rw-r----- 1 root named 195 2010-01-18 localhost.zone -rw-r----- 1 root named 427 2010-01-18 named.broadcast -rw-r----- 1 root named 1892 2010-01-18 named.ca -rw-r----- 1 root named 424 2010-01-18 named.ip6.local -rw-r----- 1 root named 426 2010-01-18 named.local -rw-r----- 1 root named 427 2010-01-18 named.zero drwxrwx--- 2 named named 4096 2004-07-27 slaves -rw-r----- 1 named named 367 01-14 22:17 test.com.zone [root@ns named]# 重新启动服务 [root@ns named]# service named restart 停止 named [确定 启动 named [确定 [root@ns named]# 好了 我们把named.conf test.com.zone 16.168.192.in-addr.arpa.zone三个文件的权限都改为了 -rw-r----- 1 named named 那么我们的执行更安全了啊 而且所需的权限更低的 以上的测试表明: named.conf test.com.zone 16.168.192.in-addr.arpa.zone三个文件属主是root 执行权限需要是644 属主是named 执行权限是640 否则会服务会启动不了的 这个教程的名字是 bind中的named.conf及 解析文件权限的探讨,希望此视频和文字来抛砖引玉。 呵呵 把这个学习心得发到我的论坛去 ,希望大家多多支持哈 ……
查看回复

linux服务器配置全程实录.pdf

作者:xiaowuhello
查看回复

红帽子5.5安装+虚拟机工具安装[itnihao原创视频].

作者:xiaowuhello
查看回复

RHEL5企业级Linux服务攻略

作者:xiaowuhello
linux学习不可多得的资料 【本内容已隐藏,回复后刷新可见哦】
查看回复

【转载】解决通过nat的ftp无法列表问题

作者:xiaowuhello
登陆linux的ftp服务器没问题,只是登陆windows的有问题,当列表时无法列出. 解决通过nat的ftp无法列表问题: 登陆linux的ftp服务器没问题,只是登陆windows的有问题,当列表时无法列出. modprobe ip_nat_ftp 时出现: modprobe: Too deep recursion in module dependencies! modprobe: Circular dependency? ip_nat_proto_udp ip_conntrack ip_nat_core ip_nat_helper ip_nat_ftp 已放弃 用insmod ip_nat_ftp 后就解决问题. 之后找了些资料.他们是这样讨论的: 加载模块: modprobe ip_tables insmod ip_conntrack insmod ip_conntrack_ftp insmod ip_nat_ftp 关于有状态功能,重点在于后三个模块: ip_conntrack模块能够使防火墙具有连接跟踪能力。(通过输入 "cat /proc/net/ip_conntrack" 能查看你的机器参和的活动网络连接。) 加载这个模块后,基本上所有有状态的返回包都能识别,例:telnet,http,QQ,mail,ping,dns等。 实际上,加载了ip_conntrack模块,ftp已能够登陆,并能使用象pwd,cd等命令,但当使用ls命令显示文件内容时,就会timeout。原因在于 显示文件列表的包防火墙无法识别,就会进入默认策略----禁止,此时就需要加载ip_conntrack_ftp模块。 ip_conntrack_ftp模块使防火墙能够识别FTP某类特别的返回包。 如果防火墙上对所有出去的返回包作了伪装,就需要加载ip_nat_ftp模块。 ip_nat_ftp模块在出去的包作了伪装以后,必须加载,否则防火墙无法知道返回的包该转发到哪里。 http://www.chinaunix.net/jh/4/517901.html ?中人 回复于:2005-03-29 15:22:36 在做??之前, 可先用所?的基????一下, ?更有助理解. 首先要理解前面 platinum 兄?的?明, 也就是?於 ftp 的????模式. 然後再??分出 port command 的?容是在 ftp packet ?的, 而不是??在 tcp/ip header ?. ?我?的 firewall/nat 在?有 modules ?忙的情?下, 只??查及修改 tcp/ip header 的?容而不?去理? ftp packet 的?容. 如此, 在 ftp active mode 下, ??自 ftp server port 20 的 NEW packet 到? firewall/nat ?, 由於?有????也??先?好的??? packet 通?, 那?? ftp-data channel 就??掉. 若有 ip_conntack_ftp module 的?忙, firewall ???所有 port 21 相?的 tcp packet 展?查看?面的 ftp packet. 如??有 port command, 那可事先??? RELATED ???通??, ? ftp-data packet 穿? firewall . 然而 conntrack module 只是?控??, 不?? packet 做所有的修改. ?在 direct-routing ?境下的 firewall 就?用了. 不过在 nat ?境下呢? 先?我?看看 ftp packet ?的 port command 所使用的 address : 是使用 nat 之後的外部地址?是 nat 之前的?部地址呢? 如果?有 ip_ftp_nat module 的?忙, 那肯定是使用 nat 之前的?部地址. ??, ??另一端的 server/client 的 ftp-data packet 要送到哪?去? 呵, ?然是送到?部地址去啦. 但, ?在 internet 上是行不通的. 或根本就送?地方而遭 reset ! okay, 如此, 怎才能?另一端的 packet 送回?端的外部地址? 且?能改回到正?的?部地址去呢? 答案呼之欲出---就是 ip_nat_ftp 要做的事情!
查看回复

【转载】Vsftp安装配置手册(完整版)

作者:xiaowuhello
一,前言 Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。Vsftpd的实现有三种方式 1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问 2、本地用户形式:以/etc/passwd中的用户名为认证方式 3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。 二、获取最新版的Vsftp程序 Vsftp官方下载:ftp: //vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz,目前已经到2.0.3版本。假设我们已经将vsftpd-2.0.3.tar.gz文件下载到服务器的/home/xuchen目录 [Copy to clipboard] [ - ]CODE: # cd /home/xuchen # tar xzvf vsftpd-2.0.3.tar.gz //解压缩程序 # cd vsftpd-2.0.3 三、三种方式的实现 1、匿名用户形式实现 # vi builddefs.h \\编辑builddefs.h 文件,文件内容如下: #ifndef VSF_BUILDDEFS_H #define VSF_BUILDDEFS_H #undef VSF_BUILD_TCPWRAPPERS #define VSF_BUILD_PAM #undef VSF_BUILD_SSL #endif /* VSF_BUILDDEFS_H */ 将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL # make //直接在vsftpd-2.0.3里用make编译 # ls -l vsftpd -rwxr-xr-x 1 root root 86088 Jun 6 12:29 vsftpd //可执行程序已被编译成功 创建必要的帐号,目录: # useradd nobody //可能你的系统已经存在此帐号,那就不用建立 # mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立 # mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立 # useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立 # chown root:root /var/ftp # chmod og-w /var/ftp 请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin 安装vsftp配置文件,可执行程序,man等: # install -m 755 vsftpd /usr/local/sbin/vsftpd-ano # install -m 644 vsftpd.8 /usr/share/man/man8 # install -m 644 vsftpd.conf.5 /usr/share/man/man5 # install -m 644 vsftpd.conf /etc/vsftpd-ano.conf 这样就安装完成了,那么我们开始进行简单的配置 # vi /etc/vsftpd-ano.conf ,将如下三行加入文件 listen=YES listen_port=21 tcp_wrappers=YES anon_root=/var/ftp //设置匿名用户本地目录,和ftp用户目录必须相同 listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式) # /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf & //以后台方式启动vsftpd 注意:每行的值都不要有空格,否则启动时会出现错误,举个例子,假如我在listen=YES后多了个空格,那我启动时就出现如下错误: 500 OOPS: bad bool value in config file for: listen 测试搭建好的匿名用户方式 # ftp 127.0.0.1 Connected to 127.0.0.1. 220 (vsFTPd 2.0.3) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (127.0.0.1:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>; pwd 257 "/" ftp>; quit 221 Goodbye. # OK,已经完成了,very nice. 高级配置 细心的朋友可能已经看出来我们只在默认配置文件增加了四行,就实现了FTP连接(也证明了vsftpd的易用性),那么让我们传个文件吧,呀!!传输失败了(见图1) 为什么呢?因为 vsftpd 是为了安全需要,/var/ftp目录不能把所有的权限打开,所以我们这时要建一个目录pub,当然也还是需要继续修改配置文件的。 # mkdir /var/ftp/pub # chmod -R 777 /var/ftp/pub 为了测试方便,我们先建立一个名为kill-ano的脚本,是为了杀掉FTP程序的 #!/bin/bash a=`/bin/ps -A | grep vsftpd-ano | awk '{print $1}'` kill -9 $a 那么现在大家看看我的匿名服务器配置文件吧 anonymous_enable=YES //允许匿名访问,这是匿名服务器必须的 write_enable=YES //全局配置可写 no_anon_password=YES //匿名用户login时不询问口令 anon_umask=077; //匿名用户上传的文件权限是-rw---- anon_upload_enable=YES //允许匿名用户上传文件 anon_mkdir_write_enable=YES //允许匿名用户建立目录 anon_other_write_enable=YES //允许匿名用户具有建立目录,上传之外的权限,如重命名,删除 dirmessage_enable=YES //当使用者转换目录,则会显示该目录下的.message信息 xferlog_enable=YES //记录使用者所有上传下载信息 xferlog_file=/var/log/vsftpd.log //将上传下载信息记录到/var/log/vsftpd.log中 xferlog_std_format=YES //日志使用标准xferlog格式 idle_session_timeout=600 //客户端超过600S没有动作就自动被服务器踢出 data_connection_timeout=120 //数据传输时超过120S没有动作被服务器踢出 chown_uploads=YES chown_username=daemon //上传文件的属主 ftpd_banner=Welcome to d-1701.com FTP service. //FTP欢迎信息 anon_max_rate=80000 //这是匿名用户的下载速度为80KBytes/s check_shell=NO //不检测SHELL [NextPage] 现在再测试,先kill掉再启动FTP程序 # ./kill-ano # /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf & 上传一个文件测试一下,怎么样?OK了吧,下载刚上传的那个文件,恩?不行,提示 550 Failed to open file. 传输已失败! 传输队列已完成 1 个文件传输失败 没有关系,你记得咱们设置了anon_umask=077了吗?所以你下载不了,如果你到服务器上touch 一个文件(644),测试一下,是可以被下载下来的,好了,匿名服务器就说到这里了。 2、本地用户形式实现 # cd /home/xuchen/vsftpd-2.0.3 //进入vsftpd-2.0.3的源代码目录 # make clean //清除编译环境 # vi builddefs.h \\继续编辑builddefs.h 文件,文件内容如下: #ifndef VSF_BUILDDEFS_H #define VSF_BUILDDEFS_H #define VSF_BUILD_TCPWRAPPERS #define VSF_BUILD_PAM #define VSF_BUILD_SSL #endif /* VSF_BUILDDEFS_H */ 将以上define VSF_BUILD_PAM行的define改为undef,支持tcp_wrappers,不支持PAM认证方式,支持SSL,记住啊,如果支持了PAM认证方式,你本地用户是不能登陆的。 # make //直接在vsftpd-2.0.3里用make编译 # ls -l vsftpd -rwxr-xr-x 1 root root 84712 Jun 6 18:56 vsftpd //可执行程序已被编译成功 创建必要的帐号,目录: # useradd nobody //可能你的系统已经存在此帐号,那就不用建立 # mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立 # mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立 # useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立 # chown root:root /var/ftp # chmod og-w /var/ftp 请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin 安装vsftp配置文件,可执行程序,man等: # install -m 755 vsftpd /usr/local/sbin/vsftpd-loc # install -m 644 vsftpd.8 /usr/share/man/man8 # install -m 644 vsftpd.conf.5 /usr/share/man/man5 # install -m 644 vsftpd.conf /etc/vsftpd-loc.conf 这样就安装完成了,那么我们开始进行简单的配置 # vi /etc/vsftpd-loc.conf ,将如下三行加入文件 listen=YES listen_port=21 tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny) listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式),注意事项请参看匿名用户的配置。 anonymous_enable=NO local_enable=YES //这两项配置说不允许匿名用户登陆,允许本地用户登陆 # /usr/local/sbin/vsftpd-loc /etc/vsftpd-loc.conf & //以后台方式启动vsftpd 测试搭建好的匿名用户方式,先测试root用户吧 :) # ftp 127.0.0.1 Connected to 127.0.0.1. 220 (vsFTPd 2.0.3) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (127.0.0.1:root): root 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>; pwd 257 "/root" ftp>; quit 221 Goodbye. 我们看到root用户可以登陆到ftp,他的登陆目录就是自己的主目录。 再测试一个系统用户,那我们先建立一个用户名叫xuchen的 # useradd xuchen # passwd xuchen Changing password for user xuchen. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. 建立好了,让我们开始测试吧!! # ftp 127.0.0.1 Connected to 127.0.0.1. 220 (vsFTPd 2.0.3) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (127.0.0.1:root): xuchen 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>; pwd 257 "/home/xuchen" ftp>; quit 221 Goodbye. 我们看到xuchen用户可以登陆到ftp,他的登陆目录也是自己的主目录。哈哈,又完成了! 高级配置 细心的朋友可能已经看出来如果我们不支持PAM认证方式,那么本地用户就可以登陆,而默认编译的vsftpd支持PAM认证方式,所以是不支持本地用户登陆的。恩,从这点说,这也是vsftp安全的一个表现----禁止本地用户登陆。 我们登陆后进行测试,传一个文件上去,得,失败了,那下载个文件下来吧,恩,这是成功的(见图2),而且我们发现我们可以进入到 系统根目录(见图3),这样很危险。 [NextPage] 那么改配置文件吧,为了测试方便,我们先建立一个名为kill-loc的脚本,也是为了杀掉FTP程序的 #!/bin/bash a=`/bin/ps -A | grep vsftpd-loc | awk '{print $1}'` kill -9 $a 现在提供我的本地用户验证服务器配置文件吧(在匿名里写过的注释我就不在这里写了) listen=YES listen_port=21 tcp_wrappers=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 //本地用户文件上传后的权限是-rw-r-r anon_upload_enable=NO anon_mkdir_write_enable=NO dirmessage_enable=YES xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES connect_from_port_20=YES chroot_local_user=YES //限制用户在自己的主目录 #local_root=/ftp //你可以指定所有本地用户登陆后的目录,如果不设置此项,用户都会登陆于自己的主目录,就跟咱们前面测试的结果是一样的 local_max_rate=500000 //本地用户的下载速度为500KBytes/s idle_session_timeout=600 data_connection_timeout=120 nopriv_user= nobody //设定服务执行者为nobody,vsftpd推荐使用一个权限很低的用户,最好是没有家目录(/dev/null),没有登陆shell(/sbin/nologin),系统会更安全 ftpd_banner=Welcome to d-1701.com FTP service. check_shell=NO userlist_enable=YES userlist_deny=YES userlist_file=/etc/vsftpd.denyuser 以上三条设定不允许登陆的用户,用户列表存放在/etc/vsftpd.denyuser中,一行一个帐号如果我把xuchen这个用户加到vsftpd.denyuser里,那么登陆时会出现如下错误: # ftp 127.0.0.1 Connected to 127.0.0.1. 220 Welcome to d-1701.com FTP service. 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (127.0.0.1:root): xuchen 530 Permission denied. Login failed. 呵呵,有意思吧,自己测试吧,本地用户登陆方式就介绍到这里吧! 3、虚拟用户形式实现(db及mysql形式) # cd /home/xuchen/vsftpd-2.0.3 //进入vsftpd-2.0.3的源代码目录 # make clean //清除编译环境 # vi builddefs.h \\继续编辑builddefs.h 文件,文件内容如下: #ifndef VSF_BUILDDEFS_H #define VSF_BUILDDEFS_H #define VSF_BUILD_TCPWRAPPERS #undef VSF_BUILD_PAM #define VSF_BUILD_SSL #endif /* VSF_BUILDDEFS_H */ 将以上define VSF_BUILD_PAM行的undef改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL,和匿名用户形式是一样的。 # make //直接在vsftpd-2.0.3里用make编译 # ls -l vsftpd -rwxr-xr-x 1 root root 86088 Jun 6 22:26 vsftpd //可执行程序已被编译成功 创建必要的帐号,目录: # useradd nobody //可能你的系统已经存在此帐号,那就不用建立 # mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立 # mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立 # useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立 # chown root:root /var/ftp # chmod og-w /var/ftp 请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin 安装vsftp配置文件,可执行程序,man等: # install -m 755 vsftpd /usr/local/sbin/vsftpd-pam # install -m 644 vsftpd.8 /usr/share/man/man8 # install -m 644 vsftpd.conf.5 /usr/share/man/man5 # install -m 644 vsftpd.conf /etc/vsftpd-pam.conf 这样就安装完成了,那么我们开始进行简单的配置 对于用DB库存储用户名及密码的方式来说: (1)查看系统是否有相应软件包 # rpm –qa | grep db4 db4-devel-4.2.52-7.1 db4-4.2.52-7.1 db4-utils-4.2.52-7.1 (2)建立一个logins.txt的文件,单行为用户名,双行为密码,例如 # vi /home/logins.txt xuchen 12345 (3)建立数据库文件并设置文件属性 # db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db # chmod 600 /etc/vsftpd_login.db (4)建立认证文件 # vi /etc/pam.d/ftp 插入如下两行 auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login (5)建立一个虚拟用户 useradd -d /home/vsftpd -s /sbin/nologin vsftpd ls -ld /home/vsftpd drwx------ 3 vsftpd vsftpd 1024 Jun 6 22:55 /home/vsftpd/ (6)编写配置文件(注意事项请参看匿名用户的配置,这里不再赘述) # vi /etc/vsftpd-pam.conf listen=YES listen_port=21 tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny) listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式) anonymous_enable=NO local_enable=YES //PAM方式此处必须为YES,如果不是将出现如下错误: 500 OOPS: vsftpd: both local and anonymous access disabled! write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO chroot_local_user=YES guest_enable=YES guest_username=vsftpd //这两行的意思是采用虚拟用户形式 virtual_use_local_privs=YES //虚拟用户和本地用户权限相同 pasv_enable=YES //建立资料联机采用被动方式 pasv_min_port=30000 //建立资料联机所可以使用port 范围的上界,0表示任意。默认值为0。 pasv_max_port=30999 //建立资料联机所可以使用port 范围的下界,0表示任意。默认值为0。 (7)启动程序 # /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf & (8)测试连通及功能 # vi /home/vsftpd/test //建立一个文件,内容如下 1234567890 # chown vsftpd.vsftpd /home/vsftpd/test # ftp 127.0.0.1 Connected to 127.0.0.1. 220 (vsFTPd 2.0.3) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (127.0.0.1:root): xuchen 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>; pwd 257 "/" ftp>; size test 213 11 ftp>; quit 221 Goodbye. OK,用户名为xuchen,密码为12345可以连接到FTP服务器,看不到文件列表,但可以下载已知文件名的文件,不能上传文件,非常安全吧!! 如果我们需要用户看到文件,怎么办?也好办,在配置文件中加入如下语句: anon_world_readable_only=NO //匿名登入者不能下载可阅读的档案,默认值为YES 如果需要让用户上传文件和下载文件分开,建议如下这么做 # vi /home/logins.txt xuchen 12345 upload 45678 //首先建立虚拟用户upload,密码为45678 # db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //更新数据文件 # mkdir /home/vsftpd/upload # vi /etc/vsftpd-pam.conf 加入如下语句 user_config_dir=/etc/vsftpd_user_conf # mkdir /etc/vsftpd_user_conf # vi /etc/vsftpd_user_conf/upload 文件内容如下 local_root=/home/vsftpd/upload write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES # chmod 700 /home/vsftpd/upload # chown vsftpd.vsftpd /home/vsftpd/upload/ 这样,xuchen用户可以下载/home/vsftpd里的文件及upload里的文件,而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西,但不能到/home/vsftpd里下载文件,很简单得实现了分用户上传和下载 [NextPage] 对于用Mysql库存储用户名及密码的方式来说: 就是把用户名和密码放在mysql库里,实现起来也相当简单 (1)建立一个库并设置相应权限 # mysql –p mysql>;create database ftpd; mysql>;use ftpd; mysql>;create table user(name char(20) binary,passwd char(20) binary); mysql>;insert into user (name,passwd) values ('test1','12345'); mysql>;insert into user (name,passwd) values ('test2','54321'); mysql>;grant select on ftpd.user to ftpd@localhost identified by '123456'; mysql>;flush privileges; 刷新权限设置 mysql>;quit (2)下载libpam-mysql进行安装编译 下载地址如下: http://nchc.dl.sourceforge.net/s ... am_mysql-0.5.tar.gz 假设我们把它放在了/home/xuchen目录下 # cd /home/xuchen # tar xzvf pam_mysql-0.5.tar.gz # cd pam_mysql # make # cp pam_mysql.so /lib/security (3)建立PAM认证信息 # vi /etc/pam.d/ftp ,内容如下 auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0 account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0 注意: crypt= n crypt=0: 明文密码 crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt) crypt=2: 使用MYSQL中的password()函数加密 crypt=3:表示使用md5的散列方式 (4)建立本地虚拟用户 # useradd -d /home/ftpd -s /sbin/nologin ftpd (5)下面就差修改vsftpd.conf文件了,我把我的提供给大家参考吧:) # vi /etc/vsftpd-pam1.conf anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES chroot_local_user=YES guest_enable=YES guest_username=ftpd listen=YES listen_port=21 pasv_enable=YES pasv_min_port=30000 pasv_max_port=30999 anon_world_readable_only=NO virtual_use_local_privs=YES #user_config_dir=/etc/vsftpd_user_conf 可以看出,和前面的用db库来验证没有多大区别,其实就是一个东西,一个用mysql来验证,一个用db库,我个人比较倾向于用db库来验证,在这个环境下,相对于Mysql来说,安全系数更高一点。 (6)# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf & //以后台方式启动 (7)测试连通 # ftp 127.0.0.1 Connected to 127.0.0.1. 220 (vsFTPd 2.0.3) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (127.0.0.1:root): test1 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>; pwd 257 "/" ftp>; quit 221 Goodbye. 看,成功了!!这样就实现了mysql的认证方式,很简单吧?? 4、为FTP增加磁盘配额,从而避免恶意用户用垃圾数据塞满你的硬盘 我首先要说的是这个功能是系统自带的,而不是vsftp 的功能之一,千万别搞混了。好了,我们先假设我们的系统用户ftpd的主目录是/home/ftpd,它是建立在/home分区中,那么如果我们要对 ftpd用户进行磁盘限额,那我们需要修改/etc/fstab中根分区的记录,将/home分区的第4个字段改成defaults,usrquota,如下: LABEL=/home /home ext3 defaults,usrquota 1 2 # reboot //重新启动系统使设置生效 也可以用 # mount -o remount /dev/sda6 ///dev/sda6的挂接点就是/home,这样可以不用启动系统。 这里我还要说明一下,如果我们对一个组进行磁配额,那我们需要增加参数grpquota,例如 LABEL=/home /home ext3 defaults,grpquota 1 2 也可以 LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2 你想怎么限制都可以,自己组合参数吧。 # quotacheck -avu 说明:a-自动开启挂载文件系统的配额,v-显示信息,u-启用用户配额or g-启用组配额 # edquota ftpd //为用户ftpd设置磁盘配额 OR # edquota -g grp //为组grp设置磁盘配额 系统会自动打开配额文件,如下: Disk quotas for user ftpd (uid 502): Filesystem blocks soft hard inodes soft hard /dev/sda6 424 0 0 13 0 0 第一列是启用了配额的文件 系统的名称。第二列显示了用户当前使用的块数,单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的绝对最大值。达到了该限度后,磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期(grace period),默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0,那个限度就不会被设置。我设置了硬块限度为1KB,是为了测试方便。 # quotaon -avu //打开磁盘配额监控进程,u是用户g是组,这里我没设置g参数 要校验用户的配额是否被设置,我们可以使用以下命令: # quota ftpd Disk quotas for user ftpd (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 424* 0 1 13 0 0 # edquota –t(-g)来设置过渡期(grace period) //当然只针对软限制而言 和另一个 edquota 命令相似,这个命令也会在文本编辑器中打开当前的文件系统配额: Grace period before enforcing soft limits for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/sda6 7days 7days 按你的需要修改后存盘退出 用以下命令显示磁盘配额使用状态 # repquota -a 或 repquota /dev/sda6(用户配额) # repquota -g -a 或 repquota -a /dev/sda6 (组的配额) 如果一切按照你的意思实施了,那么我们就进行测试了!如下图4 我们传了一个>;1k的文件,没有成功,这样我们就成功的为用户ftpd增添了磁盘配额,要是哪一天你不想加磁盘配额了,怎么办?参看如下命令: 取消某个文件系统的配额限制 #quotaoff -vug /dev/sda6 //删除home分区的磁盘限额 #删除/etc/fstab中设置配额的部分 修改软配额的最大超越时间 注意: /,/boot/,/proc,/mnt/cdrom等不要使用配额,没用。而且磁盘配额不适合FAT和FAT32系统。 以后当新设置了某个用户的配额,可以使用如下命令,马上生效。 # quotacheck -auvgm --是不尝试重新挂载文件系统 [NextPage] 备注: 1、vsftpd配置参数详细整理 #接受匿名用户 anonymous_enable=YES #匿名用户login时不询问口令 no_anon_password=YES #匿名用户主目录 anon_root=(none) #接受本地用户 local_enable=YES #本地用户主目录 local_root=(none) #如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录 deny_email_enable=YES #仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录 check_shell=YES #若启用此选项,userlist_deny选项才被启动 userlist_enable=YES #若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录 userlist_deny=NO #如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下) passwd_chroot_enable=NO #定义匿名登入的使用者名称。默认值为ftp。 ftp_username=FTP #################用户权限控制############### #可以上传(全局控制). write_enable=YES #本地用户上传文件的umask local_umask=022 #上传文件的权限配合umask使用 #file_open_mode=0666 #匿名用户可以上传 anon_upload_enable=NO #匿名 用户可以建目录 anon_mkdir_write_enable=NO 匿名用户其它的写权利(更改权限?) anon_other_write_enable=NO 如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。 anon_world_readable_only=YES #如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名 #guest_enable=NO 所有匿名上传的文件的所属用户将会被更改成chown_username chown_uploads=YES 匿名上传文件所属用户名 chown_username=lightwiter #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录 chroot_list_enable=YES #允许使用"async ABOR"命令,一般不用,容易出问题 async_abor_enable=YES 管控是否可用ASCII 模式上传。默认值为NO。 ascii_upload_enable=YES #管控是否可用ASCII 模式下载。默认值为NO。 ascii_download_enable=YES #这个选项必须指定一个空的 数据夹且任何登入者都不能有写入的权限,当vsftpd 不需要file system 的权限时,就会将使用者限制在此数据夹中。默认值为/usr/share/empty secure_chroot_dir=/usr/share/empty ###################超时设置################## #空闲连接超时 idle_session_timeout=600 #数据传输超时 data_connection_timeout=120 #PAVS请求超时 ACCEPT_TIMEOUT=60 #PROT模式连接超时 connect_timeout=60 ################服务器功能选项############### #开启日记功能 xferlog_enable=YES #使用标准格式 xferlog_std_format=YES #当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用. #log_ftp_protocol=NO #允许使用pasv模式 pasv_enable=YES #关闭安全检查,小心呀. #pasv_promiscuous+NO #允许使用port模式 #port_enable=YES #关闭安全检查 #prot_promiscuous #开启tcp_wrappers支持 tcp_wrappers=YES #定义PAM 所使用的名称,预设为vsftpd。 pam_service_name=vsftpd #当服务器运行于最底层时使用的用户名 nopriv_user=nobody #使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?) pasv_address=(none) #################服务器性能选项############## #是否能使用ls -R命令以防止浪费大量的服务器资源 #ls_recurse_enable=YES #是否使用单进程模式 #one_process_model #绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式 listen=YES #当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。 text_userdb_names=NO #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果 use_localtime=NO #测试平台优化 #use_sendfile=YES ################信息类设置################ #login时显示欢迎信息.如果设置了banner_file则此设置无效 ftpd_banner=欢迎来到湖南三辰Fake-Ta FTP 网站. #允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 dirmessage_enable=YES #显示会话状态信息,关! #setproctitle_enable=YES ############## 文件定义 ################## #定义不能更改用户主目录的文件 chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #定义限制/允许用户登录的文件 userlist_file=/etc/vsftpd/vsftpd.user_list #定义登录信息文件的位置 banner_file=/etc/vsftpd/banner #禁止使用的匿名用户登陆时作为密码的电子邮件地址 banned_email_file=/etc/vsftpd.banned_emails #日志文件位置 xferlog_file=/var/log/vsftpd.log #目录信息文件 message_file=.message ############## 目录定义 ################# #定义用户配置文件的目录 user_config_dir=/etc/vsftpd/userconf #定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的. local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk #匿名用户登陆后的根目录 anon_root=/var/ftp #############用户连接选项################# #可接受的最大client数目 max_clients=100 #每个ip的最大client数目 max_per_ip=5 #使用标准的20端口来连接ftp connect_from_port_20=YES #绑定到某个IP,其它IP不能访问 listen_address=192.168.0.2 #绑定到某个端口 #listen_port=2121 #数据传输端口 #ftp_data_port=2020 #pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。 pasv_max_port=0 #pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。 pasv_min_port=0 [NextPage] ##############数据传输选项################# #匿名用户的传输比率(b/s) anon_max_rate=51200 #本地用户的传输比率(b/s) local_max_rate=5120000 ######################################## 别外,如果要对每个用户进行单独的控制,只需要在user_config_dir中建立username文件,内容为数据传输和用户权利里面设置个人的合适的选项,用户自定义文件同样适合用pam支持的虚拟用户 附: FTP 数字代码的意义 110 重新启动标记应答。 120 服务在多久时间内ready。 125 数据链路埠开启,准备传送。 150 文件状态正常,开启数据连接端口。 200 命令执行成功。 202 命令执行失败。 211 系统状态或是系统求助响应。 212 目录的状态。 213 文件的状态。 214 求助的讯息。 215 名称系统类型。 220 新的联机服务ready。 221 服务的控制连接埠关闭,可以注销。 225 数据连结开启,但无传输动作。 226 关闭数据连接端口,请求的文件操作成功。 227 进入passive mode。 230 使用者登入。 250 请求的文件操作完成。 257 显示目前的路径名称。 331 用户名称正确,需要密码。 332 登入时需要账号信息。 350 请求的操作需要进一部的命令。 421 无法提供服务,关闭控制连结。 425 无法开启数据链路。 426 关闭联机,终止传输。 450 请求的操作未执行。 451 命令终止:有本地的错误。 452 未执行命令:磁盘空间不足。 500 格式错误,无法识别命令。 501 参数语法错误。 502 命令执行失败。 503 命令顺序错误。 504 命令所接的参数不正确。 530 未登入。 532 储存文件需要账户登入。 550 未执行请求的操作。 551 请求的命令终止,类型未知。 552 请求的文件终止,储存位溢出。 553 未执行请求的的命令,名称不正确。 2、VSFTPD官方资料翻译版(不完整版)---摘自中国Linux公社 翻译了部分VSFTPD的官方资料。 有些知道是什么意思,但难于翻译。有些涉及专业的知识,我自己也不懂,只好按字面翻译。有些我自己看不懂,只好尽量翻译。 如果看了其中一部分觉得糊涂,请参阅官方文挡。 安装篇 =============== 这个文件详细介绍了如何从VSFTPD的.tar.gz分发包开始,建立和安装并运行VSFTPD。 1)建立VSFTPD 先进入解压.tar.gz文件后产生的目录内。如下: cd vsftpd-2.0.1 编辑"builddefs.h"以操作compile-time设定。(tcp_wrappers build,等) 输入make,回车(如果它不工作请发邮件通知我 . 这将产生一个二进制文件,你可以验证一下。如下: [chris@localhost vsftpd]$ ls -l vsftpd -rwxrwxr-x 1 chris chris 61748 Sep 27 00:26 vsftpd 2)满足VSFTPD安装所需的一些条件 VSFTPD默认设置需要一个"nobody"用户,如果这个用户不存在,那么添加它。如下: [root@localhost root]# useradd nobody useradd: user nobody exists VSFTPD默认设置需要一个空目录:/usr/share/empty.增加这个目录,如果它还不存在的话。如下: [root@localhost root]# mkdir /usr/share/empty/ mkdir: cannot create directory `/usr/share/empty': File exists 如果容许匿名用户(anonymous),那么你将需要一个"ftp"用户和其home目录(这个home目录不属于“ftp”用户,而且“ftp"用户也对其没有写权限)在你的系统中存在。 以下命令用来创建一个"ftp"用户,如果它还不存在的话。 [root@localhost root]# mkdir /var/ftp/ [root@localhost root]# useradd -d /var/ftp ftp (即使你的"ftp"用户已经存在,完成以下这两步也是很有好处的:) [root@localhost root]# chown root.root /var/ftp [root@localhost root]# chmod og-w /var/ftp 3)安装VSFTPD的配置、执行和帮助文件。 输入"make install"后会将二进制文件和帮助文件拷贝到适当的目录。 你也可以手工拷贝这些文件: cp vsftpd /usr/local/sbin/vsftpd cp vsftpd.conf.5 /usr/local/man/man5 cp vsftpd.8 /usr/local/man/man8 "make install"不会拷贝默认的配置文件,所以建议你手工拷贝: cp vsftpd.conf /etc daidong注:根据你系统版本的不同,也可能是 cp vsftpd.conf /etc/vsftpd 4)测试 (无inetd影响) VSFTPD能运行在独立模式(standalone)或者通过inetd(xinetd)来启动。 你能通过inetd来运行vsftpd以更好地控制它。但我们在首次运行时不这么做,以便检查系统是否现在配置正常。 编辑/etc/vsftpd.conf(daidong注:也可能是/etc/vsftpd/vsftpd.conf),并在最下面加入以下这一行: listen=YES 这将告诉VSFTPD不要从inetd启动。 OK,现在试着启动FTP。 以ROOT登录。 确定你没有运行其他FTP服务(否则VSFTPD不能占用FTP所需的21端口)。 运行那个二进制文件,如下: [root@localhost root]# /usr/local/sbin/vsftpd & [1] 2104 如果一切正常,那么你将连上FTP服务器,如下: [chris@localhost chris]$ ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 1.1.1) Name (localhost:chris): ftp 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp>; ls 227 Entering Passive Mode (127,0,0,1,229,133) 150 Here comes the directory listing. d--x--x--x 2 0 0 4096 Jan 14 2002 bin d--x--x--x 2 0 0 4096 Apr 21 20:52 etc drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib drwxr-sr-x 2 0 50 4096 Jul 26 22:58 pub 226 Directory send OK. ftp>; [NextPage] 5)从inetd或者类似方式启动(官方推荐使用standalone方式) 你也许想通过inetd或者类似方式启动VSFTPD,因为这能给你更多的感受。例如xinetd就有很多的设置。 (注意:VSFTPD的内在机制屏蔽了xinetd的大多数的有用的设置)。 如果使用标准的"inetd",你需要编辑/etc/inetd.conf,在其中加入以下一行: ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd (确定你删除或者注释掉一些已存在的FTP服务配置行。如果你没有安装tcp_wrappers,或者不想使用它们,那么请去掉/usr/sbin/tcpd part). inetd需要指定并重新载入它的配置文件: kill -SIGHUP `pidof inetd` 如果你想使用"xinetd",请参阅我们提供的范例 /EXAMPLE/INTERNET_SITE/README. 而其他范例文件将告诉你如何调配出更强大的xinetd功能。 6)为本地登录配置PAM文件(可选) 如果你在一台激活了PAM的设备上运行VSFTPD,你需要提供一个 /etc/pam.d/ftp 文件。否则非匿名用户将无法登录服务器。 (注:如果你的PAM版本比较老,那么这个文件也许是 /etc/pam.conf). 做为一个标准设置,你可以拷贝一个已提供的范例文件,如下: cp RedHat/vsftpd.pam /etc/pam.d/ftp 7)自定义你的配置文件 完成以上的配置后,建议你安装一个配置文件。默认的配置文件位置是/etc/vsftpd.conf. 在VSFTPD软件分发包内有一个范例配置文件。 你可以拷贝其为/etc/vsftpd.conf以做进一步修改。 cp vsftpd.conf /etc (daidong注:也可能是 cp vsftpd.conf /etc/vsftpd ). 这个默认配置即不容许本地登录也不容许匿名用户上传,也许你希望更改这个配置。 其它 =================== 测试平台 (已通过) -流行的,功能完善的平台都能测试通过。在以下平台的较新版本,VSFTPD工作得很好。在其大部分较早的版本下,也运行正常。 - RedHat Linux - RedHat Enterprise Linux - Solaris / GNU tools (Solaris 8 or newer) - SuSE Linux - Debian Linux - OpenBSD - FreeBSD - NetBSD - HP-UX / GNU tools - IRIX / GNU tools - Mac OS X (note; older versions have setgroups() problem. 10.3.4 reported OK) 虚拟用户1 ============= 这个例子示范了如何为虚拟用户设置VSFTPD/PAM。 虚拟用户是一个在系统中并不作为一个登录实体而存在的用户。使用虚拟用户比使用真实的用户更安全,因为这个账号只能用于FTP服务器。 虚拟用户经常用来提供给不大可信任的用户访问某些资源,而这些资源通常是其他普通用户不能访问的。 1)创建虚拟用户数据库 我们将使用pam_userdb来认证虚拟用户。这需要提供一个“db"格式(一种通用数据库格式)的用户名/密码文件。 创建一个"db"格式的文件,首先要创建一个标准文本文件,并把用户名,密码以竖直排列方式输入。如logins.txt: tom foo fired bar 这个例子中,tom用户的密码是foo.fired用户的密码是bar. 以ROOT登录,创建一个数据库文件,如下: db_load -T -t hash -f logins.txt /etc/vsftpd_login.db (这要求berkeley db程序已经安装) (注:一些系统也许安装了多个版本的"db",所以某些情况下你可能使用"db3_load"才是正确的。对于一些 Debian系统就是这样。 关键在于要让pam_userdb相信它的登录数据库是哪一个db版本所产生(一般都是db3,尽管你的系统里可能安装的是db4).) 这将创建/etc/vsftpd_login.db文件。显然,你希望设定这个文件的权限: chmod 600 /etc/vsftpd_login.db 要了解更多关于维护你的登录数据库的信息,请在"berkeley DB"察看相关文档: http://www.sleepycat.com/docs/utility/index.html 2)用你的新数据库创建一个PAM文件 请参考范例vsftpd.pam,它包含2行: auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login 这是告诉PAM用新的数据库去验证用户。把这个PAM文件拷贝到PAM目录,一般是/etc/pam.d cp vsftpd.pam /etc/pam.d/ftp 3)为虚拟用户设置home目录 useradd -d /home/ftpsite virtual ls -ld /home/ftpsite (which should give): drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite 我们已经创建了一个名叫"virtual"的用户,home目录是"/home/ftpsite". 我们拷贝一些东西到这个下载目录: cp /etc/hosts /home/ftpsite chown virtual.virtual /home/ftpsite/hosts 4)创建你的vsftpd.conf配置文件 请参考这个目录下的例子。让我们一行行地看一看这些配置: anonymous_enable=NO local_enable=YES 安全起见,屏蔽了匿名用户,只启用了非匿名用户(即虚拟用户使用的账号) write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO 为了安全请确认这几个配置,这将关闭写的权限。 chroot_local_user=YES 这将把虚拟用户锁定在我们在以上设置的/home/ftpsite目录内。 guest_enable=YES guest_username=virtual guest_enable非常重要-它激活了虚拟用户!而guest_username说明所有的虚拟用户都对应我们在上面设置的真实用户:“virtual". 这同时确定了虚拟用户在文件系统中的位置,也就是说,虚拟用户的home目录即"virtual"用户的home目录:/home/ftpsite。 listen=YES listen_port=10021 这让VSFTPD以独立模式(standalone)运行,而不是从inetd方式启动。也就是说,你运行VSFTPD可执行文件就启动了FTP服务。 同时也让VSFTPD启用非标准端口10021来监听FTP请求(FTP一般使用21端口)。 pasv_min_port=30000 pasv_max_port=30999 这设定了被动模式的FTP请求端口。当你配置了一个防火墙的时候,这个配置就很好用。 拷贝范例配置文件到/etc cp vsftpd.conf /etc/ (daidong注:也可能是/etc/vsftpd) 5)启动VSFTPD 到VSFTPD二进制文件所在的目录,输入: ./vsftpd 如果一切正常,这个命令将生效。否则,你将会看到一些错误信息的反馈。 [NextPage] 6)测试 启动另一个会话。(或者ctrl-z,再输入"bg",让VSFTPD在后台运行)。 这是一个FTP会话的例子: ftp localhost 10021 Connected to localhost (127.0.0.1). 220 ready, dude (vsFTPd 1.1.0: beat me, break me) Name (localhost:chris): tom 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp>; pwd 257 "/" ftp>; ls 227 Entering Passive Mode (127,0,0,1,117,135) 150 Here comes the directory listing. 226 Transfer done (but failed to open directory). ftp>; size hosts 213 147 ftp>; 注释: 密码是"foo" 出现”failed to open directory“的话,别担心。这是因为/home/ftpsite目录不容许被任意浏览。 (我们可以更改anon_world_readable_only=NO以消除告警,但为了安全,还是保留这个配置)。 我们能通过size命令看到我们已经访问了被我们拷贝到这里的"hosts"文件。 vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO chroot_local_user=YES guest_enable=YES guest_username=virtual listen=YES listen_port=10021 pasv_min_port=30000 pasv_max_port=30999 虚拟用户2 =============== 这个例子将演示如何扩展“VIRTUAL_USERS”那个范例,从而实现更复杂一点的配置。 让我们假定我们需要2种不同的虚拟用户:一种只能浏览并下载资源,另一种能上传文件并浏览站内资源。 要激活这个设置,我们将使用VSFTPD的强大的“单个用户配置”功能(是V1.1.0后出现的新功能)。 在前一个虚拟用户范例中,我们创建了2个用户-tom和fred. 我们将实现fred有写权限以上传新文件,同时tom只能下载文件。 1)激活单个用户配置功能。 要激活这个功能,需要增加以下配置行到配置文件: user_config_dir=/etc/vsftpd_user_conf 并且创建目录: mkdir /etc/vsftpd_user_conf 2)授予tom读取所有文件和目录的权限 在上一个例子的最后,我们注意到虚拟用户只能浏览所有的完全可读属性的目录和文件。我们使/home/ftpsite完全可读,而且被上传的文件也 赋予了完全可读的权限(daidong注:意思是说这样虚拟用户就能读取所有的文件了)。但实现这个目的的另一个方法是授权tom能下载那些非完全可读的文件。 对于tom,他的配置文件中需要修改一个设置: anon_world_readable_only: 设为"anon_world_readable_only=NO" >; /etc/vsftpd_user_conf/tom (daidong注:既把默认配置修改了anon_world_readable_only后,复制到/etc/vsftpd_user_conf下,名字为tom) 验证一下结果-以tom登录,“ls”将返回一个目录列表。如果以fred登录将不会如此。 注意:重启VSFTPD以启用配置文件/etc/vsftpd.conf(高级用户也可以发送SIGHUP给VSFTPD的监听进程). 3)授予freg读取所有文件/目录并创建新文件/目录的权限,但让他不能对已存在的文件/目录进行操作. echo "anon_world_readable_only=NO" >; /etc/vsftpd_user_conf/fred echo "write_enable=YES" >;>; /etc/vsftpd_user_conf/fred echo "anon_upload_enable=YES" >;>; /etc/vsftpd_user_conf/fred 验证一下-以tom登录,将不能上传,而fred就可以. 试图删除一个文件--噢,你们俩都不行! 配置详解 ============= VSFTPD.CONF.5 ================ 名字 vsftpd.conf :VSFTPD的配置文件 描述: vsftpd.conf 用来控制VSFTPD的各项功能。默认状态下,它的位置是/etc/vsftpd.conf。 (译者注:也许老的LINUX版本下,配置文件是这个位置,但新的LINUX版本,例如FC2,配置文件是在/etc/vsftpd目录下。 但是也很可能和安装方式有关,RPM包安装,配置文件是/etc/vsftpd.conf. 源码包安装:/etc/vsftpd/vsftpd.conf.我不确定。 但以后我不再特别指出了,真累!!) 然而,你也可以通过修改配置行来指定到其它目录。这一点很有用,因为也许你想使用一些高级inetd功能,例如xinetd,在一个多虚拟主机的机器上调用不同的配置文件。 格式 VSFTPD.conf 的格式非常简单,每行要么是一个注释,要么是一个指令。注释行以#开始并被忽略掉。指令行格式如下: 配置项=参数值 很重要的一点是,这个格式里不存在任何空格。 默认的,每一个配置项在配置文件里都占一编辑行,可以被修改。 [NextPage] 布尔选项 参数值的布尔选项可以是: YES或者NO allow_anon_ssl 只有ss1_enable激活了才可以启用此项。如果设置为YES,匿名用户将容许使用安全的SSL连接服务器。 默认值:NO anon_mkdir_write_enable 如果设为YES,匿名用户将容许在指定的环境下创建新目录。如果此项要生效,那么配置write_enable必须被激活,并且匿名用户必须在其父目录有写权限。 默认值:NO anon_other_write_enable 如果设置为YES,匿名用户将被授予较大的写权限,例如删除和改名。一般不建议这么做,除非想完全授权。 默认值:NO anon_upload_enable 如果设为YES,匿名用户就容许在指定的环境下上传文件。如果此项要生效,那么配置write_enable必须激活。并且匿名用户必须在相关目录有写权限。 默认值:NO anon_world_readable_only 启用的时候,匿名用户只容许下载完全可读的文件,这也就容许了ftp用户拥有对文件的所有权,尤其是在上传的情况下。 默认值:YES anonymous_enable 控制是否容许匿名用户登录。如果容许,那么“ftp”和“anonymous”都将被视为“anonymous"而容许登录。 默认值:YES ascii_download_enable 启用时,用户下载时将以ASCII模式传送文件。 默认值:NO ascii_upload_enable 启用时,用户上传时将以ASCII模式传送文件。 默认值:NO async_abor_enable 启用时,一个特殊的FTP命令"async ABOR”将容许使用。只有不正常的FTP客户端要使用这一点。而且,这个功能又难于操作,所以, 默认是把它关闭了。但是,有些客户端在取消一个传送的时候会被挂死(daidong注:估计是客户端无响应了),那你只有启用这个功能才能避免这种情况。 默认值:NO background 启用时,并且VSFTPD是“listen”模式启动的(daidong注:就是standalone模式),VSFTPD将把监听进程置于后台。但访问VSFTPD时,控制台将立即被返回到SHELL。 默认值:NO check_shell 注意:这个选项只对非PAM结构的VSFTPD才有效。如果关闭,VSFTPD将不检查/etc/shells以判定本地登录的用户是否有一个可用的SHELL。 默认值:YES chmod_enable 启用时,将容许使用SITE CHMOD命令。注意,这只能用于本地用户。匿名用户绝不能使用SITE CHMOD。 默认值:YES chown_uploads 如果启用,所以匿名用户上传的文件的所有者将变成在chown_username里指定的用户。这对管理FTP很有用,也许也对安全有益。 默认值:NO chroot_list_enable 如果激活,你要提供一个用户列表,表内的用户将在登录后被放在其home目录,锁定在虚根下(daidong注:进入FTP后,PWD一下,可以看到当前目录是"/",这就是虚根。是FTP的根目录,并非FTP服务器系统的根目录)。如果chroot_local_user设为YES后,其含义会发生一点变化。 在这种情况下,这个列表内的用户将不被锁定在虚根下。 默认情况下,这个列表文件是/etc/vsftpd.chroot_list, 但你也可以通过修改chroot_list_file来改变默认值。 默认值:NO chroot_local_user 如果设为YES,本地用户登录后将被(默认地)锁定在虚根下,并被放在他的home目录下。 警告: 这个配置项有安全的意味,特别是如果用户有上传权限或者可使用SHELL的话。在你确定的前提下,再启用它。 注意,这种安全暗示并非只存在于VSFTPD,其实是广泛用于所有的希望把用户锁定在虚根下的FTP软件。 默认值:NO connect_from_port_20 这用来控制服务器是否使用20端口号来做数据传输。为安全起见,有些客户坚持启用。相反,关闭这一项可以让VSFTPD更加大众化。 默认值:NO (但在范例配置文件中,启用了,即YES) deny_email_enable 如果激活,你要提供一个关于匿名用户的密码E-MAIL表(daidong注:我们都知道,匿名用户是用邮件地址做密码的)以阻止以这些密码登录的匿名用户。 默认情况下,这个列表文件是/etc/vsftpd.banner_emails,但你也可以通过设置banned_email_file来改变默认值。 默认值:NO dirlist_enable 如果设置为NO,所有的列表命令(daidong注:如ls)都将被返回“permission denied”提示。 默认值:YES dirmessage_enable 如果启用,FTP服务器的用户在首次进入一个新目录的时候将显示一段信息。默认情况下,会在这个目录中查找.message文件,但你也可以 通过更改message_file来改变默认值。 默认值:NO (但在配置范例文件中启用了它) download_enable 如果设为NO,下载请求将返回“permission denied”。 默认值:YES dual_log_enable 如果启用,两个LOG文件会各自产生,默认的是/var/log/xferlog和/var/log/vsftpd.log。前一个是wu-ftpd格式的LOG,能被通用工具分析。 后一个是VSFTPD的专用LOG格式。 默认值: NO force_dot_files 如果激活,即使客户端没有使用“a”标记,(FTP里)以.开始的文件和目录都会显示在目录资源列表里。但是把"."和".."不会显示。(daidong注:即LINUX下 的当前目录和上级目录不会以‘.’或‘..’方式显示)。 默认值:NO force_local_data_ssl 只有在ssl_enable激活后才能启用。如果启用,所有的非匿名用户将被强迫使用安全的SSL登录以在数据线路上收发数据。 默认值:YES force_local_logins_ssl 只有在ssl_enable激活后才能启用。如果启用,所有的非匿名用户将被强迫使用安全的SSL登录以发送密码。 默认值:YES guest_enable 如果启用,所有的非匿名用户登录时将被视为”游客“,其名字将被映射为guest_username里所指定的名字。 默认值:NO hide_ids 如果启用,目录资源列表里所有用户和组的信息将显示为"ftp". 默认值:NO listen 如果启用,VSFTPD将以独立模式(standalone)运行,也就是说可以不依赖于inetd或者类似的东东启动。直接运行VSFTPD 的可执行文件一次,然后VSFTPD就自己去监听和处理连接请求了。 默认值:NO listen_ipv6 类似于listen参数的功能,但有一点不同,启用后VSFTPD会去监听IPV6套接字而不是IPV4的。这个设置和listen的设置互相排斥。 默认值:NO local_enable 用来控制是否容许本地用户登录。如果启用,/etc/passwd里面的正常用户的账号将被用来登录。 默认值:NO log_ftp_protocol 启用后,如果xferlog_std_format没有被激活,所有的FTP请求和反馈信息将被纪录。这常用于调试(debugging)。 默认值:NO ls_recurse_enable 如果启用,"ls -R"将被容许使用。这是为了避免一点点安全风险。因为在一个大的站点内,在目录顶层使用这个命令将消耗大量资源。 默认值:NO [NextPage] no_anon_password 如果启用,VSFTPD将不会向匿名用户询问密码。匿名用户将直接登录。 默认值:NO no_log_lock 启用时,VSFTPD在写入LOG文件时将不会把文件锁住。这一项一般不启用。它对一些工作区操作系统问题,如Solaris / Veritas文件系统共存时有用。 因为那在试图锁定LOG文件时,有时候看上去象被挂死(无响应)了。(daidong注:这我也不是很理解。所以翻译未必近乎原意。原文如下:It exists to workaround operating system bugs such as the Solaris / Veritas filesystem combination which has been observed to sometimes exhibit hangs trying to lock log files.) 默认值:NO one_process_model 如果你的LINUX核心是2.4的,那么也许能使用一种不同的安全模式,即一个连接只用一个进程。只是一个小花招,但能提高FTP的性能。请确定需要后再启用它,而且也请确定你的 站点是否会有大量的人同时访问。 默认值:NO passwd_chroot_enable (daidong注:这段自己看,无语...) if enabled, along with .BR chroot_local_user , then a chroot() jail location may be specified on a per-user basis. Each user's jail is derived from their home directory string in /etc/passwd. The occurrence of /./ in the home directory string denotes that the jail is at that particular location in the path. 默认值:NO pasv_enable 如果你不想使用被动方式获得数据连接,请设为NO。 默认值:YES pasv_promiscuous 如果你想关闭被动模式安全检查(这个安全检查能确保数据连接源于同一个IP地址)的话,设为YES。确定后再启用它(daidong注:原话是:只有你清楚你在做什么时才启用它!) 合理的用法是:在一些安全隧道配置环境下,或者更好地支持FXP时(才启用它)。 默认值:NO port_enable 如果你想关闭以端口方式获得数据连接时,请关闭它。 默认值:YES port_promiscuous 如果你想关闭端口安全检查(这个检查可以确保对外的(outgoing)数据线路只通向客户端)时,请关闭它。确认后再做! 默认值:NO run_as_launching_user 如果你想让一个用户能启动VSFTPD的时候,可以设为YES。当ROOT用户不能去启动VSFTPD的时候会很有用(daidong注:应该不是说ROOT用户没有权限启动VSFTPD, 而是因为别的,例如安全限制,而不能以ROOT身份直接启动VSFTPD)。强烈警告!!别启用这一项,除非你完全清楚你在做什么(daidong:无语....)!!!随意地启动这一项会导致 非常严重的安全问题,特别是VSFTPD没有或者不能使用虚根技术来限制文件访问的时候(甚至VSFTPD是被ROOT启动的)。有一个愚蠢的替代方案是启用deny_file,将其设置为{/*,*..*}等, 但其可靠性却不能和虚根相比,也靠不住。 如果启用这一项,其他配置项的限制也会生效。例如,非匿名登录请求,上传文件的所有权的转换,用于连接的20端口和低于1024的监听端口将不会工作。其他一些配置项也可能被影响。 默认值:NO secure_email_list_enable 如果你想只接受以指定E-MAIL地址登录的匿名用户的话,启用它。这一般用来在不必要用虚拟用户的情况下,以较低的安全限制去访问较低安全级别的资源。如果启用它,匿名用户除非 用在email_password_file里指定的E-MAIL做为密码,否则不能登录。这个文件的格式是一个密码一行,而且没有额外的空格(daidong注:whitespace,译为空格,不知道是否正确)。 默认的文件名是:/etc/vsftpd.email_passwords. 默认值:NO session_support 这将配置是否让VSFTPD去尝试管理登录会话。如果VSFTPD管理会话,它会尝试并更新utmp和wtmp。它也会打开一个pam会话(pam_session),直到LOGOUT才会关闭它,如果使用PAM进行认证的话。 如果你不需要会话纪录,或者想VSFTPD运行更少的进程,或者让它更大众化,你可以关闭它。 注:utmp和wtmp只在有PAM的环境下才支持。 默认值:NO setproctitle_enable 如果启用,VSFTPD将在系统进程列表中显示会话状态信息。换句话说,进程名字将变成VSFTPD会话当前正在执行的动作(等待,下载等等)。为了安全目的,你可以关闭这一项。 默认值:NO ssl_enable 如果启用,vsftpd将启用openSSL,通过SSL支持安全连接。这个设置用来控制连接(包括登录)和数据线路。同时,你的客户端也要支持SSL才行。 注意:小心启用此项.VSFTPD不保证OpenSSL库的安全性。启用此项,你必须确信你安装的OpenSSL库是安全的。 默认值:NO ssl_sslv2 要激活ssl_enable才能启用它。如果启用,将容许SSL V2协议的连接。TLS V1连接将是首选。 默认值:NO ssl_sslv3 要激活ssl_enable才能启用它。如果启用,将容许SSL V3协议的连接。TLS V1连接将是首选。 默认值:NO ssl_tlsv1 要激活ssl_enable才能启用它。如果启用,将容许TLS V1协议的连接。TLS V1连接将是首选。 默认值:YES syslog_enable 如果启用,系统log将取代vsftpd的log输出到/var/log/vsftpd.log.FTPD的了log工具将不工作。 默认值:NO tcp_wrappers 如果启用,vsftpd将被tcp_wrappers所支持。进入的(incoming)连接将被tcp_wrappers访问控制所反馈。如果tcp_wrappers设置了 VSFTPD_LOAD_CONF环境变量,那么vsftpd将尝试调用这个变量所指定的配置。 默认值:NO text_userdb_names 默认情况下,在文件列表中,数字ID将被显示在用户和组的区域。你可以编辑这个参数以使其使用数字ID变成文字。为了保证FTP性能,默认 情况下,此项被关闭。 默认值:NO tilde_user_enable 如果启用,vsftpd将试图解析类似于~chris/pics的路径名(一个"~"(tilde)后面跟着个用户名)。注意,vsftpd有时会一直解析路径名"~"和"~/"(在这里,~被解析成内部登录目录)。 ~用户路径(~user paths)只有在当前虚根下找到/etc/passwd文件时才被解析。 默认值:NO use_localtime 如果启用,vsftpd在显示目录资源列表的时候,在显示你的本地时间。而默认的是显示GMT(格林尼治时间)。通过MDTM FTP命令来显示时间的话也会被这个设置所影响。 默认值:NO use_sendfile 一个内部设定,用来测试在你的平台上使用sendfile()系统呼叫的相关好处(benefit). 默认:YES userlist_deny 这个设置在userlist_enable被激活后能被验证。如果你设置为NO,那么只有在userlist_file里明确列出的用户才能登录。 如果是被拒绝登录,那么在被询问密码前,用户就将被系统拒绝。 默认值:YES userlist_enable 如果启用,vsftpd将在userlist_file里读取用户列表。如果用户试图以文件里的用户名登录,那么在被询问用户密码前,他们就将被系统拒绝。 这将防止明文密码被传送。参见userlist_deny。 默认值:NO virtual_use_local_privs 如果启用,虚拟用户将拥有和本地用户一样的权限。默认情况下,虚拟用户就拥有和匿名用户一样的权限,而后者往往有更多的限制(特别是写权限)。 默认值:NO write_enable 这决定是否容许一些FTP命令去更改文件系统。这些命令是STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE。 默认值:NO xferlog_enable 如果启用,一个log文件将详细纪录上传和下载的信息。默认情况下,这个文件是/var/log/vsftpd.log,但你也可以通过更改vsftpd_log_file来指定其默认位置。 默认值:NO (但在范例配置文件中,启用了这一项) xferlog_std_format 如果启用,log文件将以标准的xferlog格式写入(wu-ftpd使用的格式),以便于你用现有的统计分析工具进行分析。但默认的格式具有更好的可读性。默认情况下,log文件是在/var/log/xferlog。 但是,你可以通过修改xferlog_file来指定新路径。 默认值:NO [NextPage] ====== 数字选项 以下是数字配置项。这些项必须设置为非负的整数。为了方便umask设置,容许输入八进制数,那样的话,数字必须以0开始。 accept_timeout 超时,以秒为单位,设定远程用户以被动方式建立连接时最大尝试建立连接的时间。 默认值:60 anon_max_rate 对于匿名用户,设定容许的最大传送速率,单位:字节/秒。 默认值:0 (无限制) anon_umask 为匿名用户创建的文件设定权限。注意:如果你想输入8进制的值,那么其中的0不同于10进制的0。 默认值:077 connect_timeout 超时。单位:秒。是设定远程用户必须回应PORT类型数据连接的最大时间。 默认值:60 data_connection_timeout 超时,单位:秒。设定数据传输延迟的最大时间。时间一到,远程用户将被断开连接。 默认值:300 file_open_mode 对于上传的文件设定权限。如果你想被上传的文件可被执行,umask要改成0777。 默认值:0666 ftp_data_port 设定PORT模式下的连接端口(只要connect_from_port_20被激活)。 默认值:20 idle_session_timeout 超时。单位:秒。设置远程客户端在两次输入FTP命令间的最大时间。时间一到,远程客户将被断开连接。 默认值:300 listen_port 如果vsftpd处于独立运行模式,这个端口设置将监听的FTP连接请求。 默认值:21 local_max_rate 为本地认证用户设定最大传输速度,单位:字节/秒。 默认值:0(无限制) local_umask 设置本地用户创建的文件的权限。注意:如果你想输入8进制的值,那么其中的0不同于10进制的0。 默认值:077 max_clients 如果vsftpd运行在独立运行模式,这里设置了容许连接的最大客户端数。再后来的用户端将得到一个错误信息。 默认值:0(无限制) max_per_ip 如果vsftpd运行在独立运行模式,这里设置了容许一个IP地址的最大接入客户端。如果超过了最大限制,将得到一个错误信息。 默认值:0(无限制) pasv_max_port 指定为被动模式数据连接分配的最大端口。可用来指定一个较小的范围以配合防火墙。 默认值:0(使用任何端口) pasv_min_port 指定为被动模式数据连接分配的最小端口。可用来指定一个较小的范围以配合防火墙。 默认值:0(使用任何端口) trans_chunk_size 你一般不需要改这个设置。但也可以尝试改为如8192去减小带宽限制的影响。 默认值:0(让vsftpd自行选择) =========== STRING 配置项 以下是STRING 配置项 anon_root 设置一个目录,在匿名用户登录后,vsftpd会尝试进到这个目录下。如果失败则略过。 默认值:无 banned_email_file deny_email_enable启动后,匿名用户如果使用这个文件里指定的E-MAIL密码登录将被拒绝。 默认值:/etc/vsftpd.banned_emails banner_file 设置一个文本,在用户登录后显示文本内容。如果你设置了ftpd_banner,ftpd_banner将无效。 默认值:无 chown_username 改变匿名用户上传的文件的所有者。需设定chown_uploads。 默认值:ROOT chroot_list_file 这个项提供了一个本地用户列表,表内的用户登录后将被放在虚根下,并锁定在home目录。这需要chroot_list_enable项被启用。 如果chroot_local_user项被启用,这个列表就变成一个不将列表里的用户锁定在虚根下的用户列表了。 默认值:/etc/vsftpd.chroot_list cmds_allowed 以逗号分隔的方式指定可用的FTP命令(post login. USER, PASS and QUIT 是始终可用的命令)。 其他命令将被屏蔽。这是一个强有力的locking down一个FTP服务器的手段。例如:cmds_allowed=PASV,RETR,QUIT 默认值:无 deny_file 这可以设置一个文件名或者目录名式样以阻止在任何情况下访问它们。并不是隐藏它们,而是拒绝任何试图对它们进行的操作(下载,改变目录层, 和其他有影响的操作)。这个设置很简单,而且不会用于严格的访问控制-文件系统权限将优先生效。然而,这个设置对确定的虚拟用户设置很有用。 特别是如果一个文件能多个用户名访问的话(可能是通过软连接或者硬连接),那就要拒绝所有的访问名。 建议你为使用文件 系统权限设置一些重要的安全策略以获取更高的安全性。如deny_file={*.mp3,*.mov,.private} 默认值:无 dsa_cert_file 这个设置为SSL加密连接指定了DSA证书的位置。 默认值:无(有一个RSA证书就够了) email_password_file 在设置了secure_email_list_enable后,这个设置可以用来提供一个备用文件。 默认值:/etc/vsftpd.email_passwords ftp_username 这是用来控制匿名FTP的用户名。这个用户的home目录是匿名FTP区域的根。 默认值:ftp ftpd_banner 当一个连接首次接入时将现实一个欢迎界面。 默认值:无(默认的界面会被显示) guest_username 参见相关设置guest_enable。这个设置设定了游客进入后,其将会被映射的名字。 默认:ftp hide_file 设置了一个文件名或者目录名列表,这个列表内的资源会被隐藏,不管是否有隐藏属性。但如果用户知道了它的存在, 将能够对它进行完全的访问。hide_file里的资源和符合hide_file指定的规则表达式的资源将被隐藏。vsftpd的 规则表达式很简单,例如hide_file={*.mp3,.hidden,hide*,h?} 默认值:无 listen_address 如果vsftpd运行在独立模式下,本地接口的默认监听地址将被这个设置代替。 需要提供一个数字化的地址。 默认值:无 listen_address6 如果vsftpd运行在独立模式下,要为IPV6指定一个监听地址(如果listen_ipv6被启用的话)。 需要提供一个IPV6格式的地址。 默认值:无 local_root 设置一个本地(非匿名)用户登录后,vsftpd试图让他进入到的一个目录。如果失败,则略过。 默认值:无 message_file 当进入一个新目录的时候,会查找这个文件并显示文件里的内容给远程用户。dirmessage_enable需启用。 默认值:.message nopriv_user 这是vsftpd做为完全无特权的用户的名字。这是一个专门的用户,比nobody更甚。用户nobody往往用来在一些机器上做一些重要的事情。 默认值:nobody pam_service_name 设定vsftpd将要用到的PAM服务的名字。 默认值:ftp pasv_address 当使用PASV命令时,vsftpd会用这个地址进行反馈。需要提供一个数字化的IP地址。 默认值:无(地址将取自进来(incoming)的连接的套接字) rsa_cert_file 这个设置指定了SSL加密连接需要的RSA证书的位置。 默认值:/usr/share/ssl/certs/vsftpd.pem secure_chroot_dir 这个设置指定了一个空目录,这个目录不容许ftp user写入。在vsftpd不希望文件系统被访问时,目录为安全的虚根所使用。 默认值: /usr/share/empty ssl_ciphers 这个设置将选择vsftpd为加密的SSL连接所用的SSL密码。详细信息参见ciphers。 默认值:DES-CBC3-SHA user_config_dir 这个强大的设置容许覆盖一些在手册页中指定的配置项(基于单个用户的)。用法很简单,最好结合范例。如果你把user_config_dir 改为/etc/vsftpd_user_conf,那么以chris登录,vsftpd将调用配置文件/etc/vsftpd_user_conf/chris。 默认值:无 user_sub_token 这个设置将依据一个模板为每个虚拟用户创建home目录。例如,如果真实用户的home目录通过guest_username为/home/virtual/$USER 指定, 并且user_sub_token设置为 $USER ,那么虚拟用户fred登录后将锁定在/home/virtual/fred下。 默认值:无 userlist_file 当userlist_enable被激活,系统将去这里调用文件。 默认值:/etc/vsftpd.user_list vsftpd_log_file 只有xferlog_enable被设置,而xferlog_std_format没有被设置时,此项才生效。这是被生成的vsftpd格式的log文件的名字。 dual_log_enable和这个设置不能同时启用。如果你启用了syslog_enable,那么这个文件不会生成,而只产生一个系统log. 默认值:/var/log/vsftpd.log xferlog_file 这个设置是设定生成wu-ftpd格式的log的文件名。只有启用了xferlog_enable和xferlog_std_format后才能生效。 但不能和dual_log_enable同时启用。 默认值:/var/log/xferlog
查看回复
上一页
下一页
0%
站点地图友情链接:
喵宅苑
喵空间社区程序
络合兔
技术宅
莉可POI
Mithril.js
枫の主题社
Project1
午后少年
机智库
七濑胡桃
xiuno
幻想の博客