频道栏目
首页 > 系统 > Linux > 正文

OpenBSD自带ftpd程序搭建ftp服务器

2008-06-30 02:05:21           
收藏   我要投稿

写在前面

  本文参考OpenBSD 3.8的官方FAQ文档和ftpd的man文档写成,更全面的信息请参看这两个文件。

  ·FAQ: Setting up Anonymous FTP Services

  ·Manual Page: ftpd

  所有操作均在OpenBSD 3.8 Release上测试通过。

  注:本文可以任意转载,但请保留作者信息,谢谢。

  ftpd的三种启动方式

  OpenBSD的ftpd程序没有配置文件,就靠设置运行参数进行配置。所有参数的

  含义都可以在ftpd 的man文档中获得详细信息:

  $Content$nbsp;man ftpd

  ftpd程序的启动有三种方法:

  ·inetd方式

  ·’rc’方式

  ·直接在命令行下执行ftpd命令

  1、inetd方式

  在’etc/inetd.conf’文件中有这么一行:

  ftp stream tcp nowait root /usr/libexec/ftpd ftpd -US

  这里为’ftpd’传递了两个参数’-US’。当然,你还可以组合自己想要的参数。

  (一些常用参数的含义已在下文给出)。使用inetd方式,ftpd由inetd进程管

  理,所以需要启动inetd服务才能启动ftpd。在OpenBSD的默认设置中,inetd被

  配置为随系统启动。查看’/etc/rc.conf’中的’inetd’变量的值:

  inetd=YES

  2、’rc’方式

  所谓’rc’方式,指的就是通过修改’/etc/rc.conf’或者’/etc/rc.conf.local’文件中变

  量的值,为服务的启动添加’entry’,使服务能够随系统启动。使用’rc’方式启

  动fttpd,只需要将’/etc/rc.conf’中的’ftpd_flags’变量设置为自己组合好的参数

  即可。这种方法需要在系统重启后服务才会随系统启动(这里的参数暂时使用

  与’inetd’方式相同的参数):

  ftpd_flags="-US"

  3、直接在命令行执行ftpd命令

  这种方法的好处是不需要重新启动系统就可以启动ftpd服务:

  # /usr/libexec/ftpd -4DllUS

  停止ftpd

  1、’/etc/rc.conf’

  如果不需要ftpd随系统启动,则在’/etc/rc.conf’文件中将’ftpd_flags’变量的值设

  置为"NO"”:

  ftpd_flags="NO"

  2、# kill PID

  如果需要现在就结束ftpd进程,则使用kill PID"的方式来实现:

  # kill $(cat /var/run/ftpd.pid)

  ftpd常用参数

  以下是ftpd 常用的一些参数(这里列出的只是常用的,并不是全部。更多的参

  数请查看OpenBSD 的Manual Page。

  · -4 如果指定了-D"参数,则强制ftpd 只使用IPv4地址。

  · -6 和-4"的解释类似;如果指定了-D"参数,则强制ftpd只使用IPv6地址。

  · -A 只允许匿名登录(除非指定了-n"选项)。

  · -D 如果指定了该参数,ftpd 将做为daemon运行,监听ftpd 端口并且fork子进程对连接进行处理。在繁忙的服务器上,这样可以减少系统负载,与使用inetd 方式启动ftpd比起来,这种方式使用更少的系统资源。

  · -d 使用LOG FTP将Debug信息写入syslog。

  · -l 每个成功和失败的ftp session 都将由LOG FTP 工具通过syslog记录下日志。如果这个选项被指定两次(-ll),所有get/put/append/delete/make、 directory/remove、dire操作以及所操作的文件都将被记录进日志。

  · -U 每个并发的ftp session都被记录到日志文件/var/run/utmp,记录的格式就象who(1)命令的输出一样。

  · -n 禁止匿名登录。默认是允许的。

  · -S 如果设置了这个参数,ftpd 将会把所有匿名用户的下载情况记录在文件/var/log/ftpd 中(如果该文件存在的话)。

  · -T maxtimeout 连接超时的时间限制。默认是2小时。

  · -u mask 强制设置umask为指定的mask。而不是使用/etc/login.conf 中的设置(/etc/login.conf 中通常设置为022),并且不允许chmod。

  常用参数组合

  看了上面几个常用选项的含义,你应该可以组合出合适的选项来满足自己的功能需求了。

  1、只允许使用系统帐号登录FTP

  因为匿名用户登录需要使用到系统中的一个名为"ftp"的帐户(更多关于该帐户的描述,请看本文下半部分),而OpenBSD系统中默认没有该帐户,需要手动建立并且设置正确的权限,所以如果只允许用户通过系统帐号登录FTP服务器,则只需要在/etc/rc.conf 中将ftpd °ags 的值简单地设置为"-D"即可(虽然这时候的设置仍然允许匿名用户登录,但是因为系统中没有"ftp"用户,所以无法登录)。当然你也可以多设置一些参数。比如:

  ftpd °ags="-4DllUSn"

  参考上面几个常用选项的说明,你就会明白这是什么意思了。

  2、允许匿名用户登录访问FTP资源

  因为匿名用户登录到FTP服务器后,实际上是以ftp"用户的身份进行所有操作,所以出于安全考虑,这个用户的权限通常被设置得很低。比如:

  · 不为该用户提供一个可用的shell,使其无法登录系统;

  · 没有一个可用的密码(即FAQ上说的"This account shouldn’t have a usable password;");

  · 登录系统后被chroot;

  · ...... 

  接下来我们要做的就是按照上面列出的三个要求来添加和设置这个低权限、处处受限的"ftp"用户。

  1、添加"ftp"帐户以提供匿名访问

  在/etc/shells中添加一个无法实际使用的shell设置"ftp"使用这个shell的目的,是不允许它通过shell登录到系统中。通常我们会有两种选择:

  · /sbin/nologin

  · /usr/bin/false

  为了在添加用户时可以使用这两个shell,我们可以这样做:

  # echo ’/sbin/nologin’ >>/etc/shells

  # echo ’/usr/bin/false’ >>/etc/shells

  或者在未将它们加入到/etc/shells的情况下,在使用adduser添加帐户时加上"-shell"参数:

  # adduser -shell /sbin/nologin

  Enter username []: ftp

  Enter full name []: anonymous ftpd user

  Enter shell bash csh ksh nologin sh [/sbin/nologin]:

  ......

这里在询问该用户使用何种shell时就出现了/sbin/nologin 。如果不带这个参

  数,将无法使用它:

  # adduser

  Enter username []: ftp

  Enter full name []: anonymous ftpd user

  Enter shell bash csh ksh nologin sh [bash]: /sbin/nologin

  /sbin/nologin: is not allowed!

  Enter shell bash csh ksh nologin sh [bash]:

  这里就提示了不允许使用/sbin/nologin 做为shell使用。 

  添加帐户

  这里使用"adduser -s shell /sbin/nologin"来添加一个这样的’ftp’帐户做为示例,并将该用户的$HOME目录设置为"/var/ftp":

  # adduser -shell /sbin/nologin -home /var

  Use option -silent" if you don’t want to see all warnings and questions.

  Reading /etc/shells

  Check /etc/master.passwd

  Check /etc/group

  Ok, let’s go.

  Don’t worry about mistakes. I will give you the chance later to correct any input.

  Enter username []: ftp

  Enter full name []: anonymous ftpd user

  Enter shell bash csh ksh nologin sh [/sbin/nologin]:ENTER

  Uid [1001]:ENTER

  Login group ftp [ftp]:ENTER

  Login group is ftp". Invite ftp into other groups: guest no

  no

  : ENTER

  Login class daemon default sta. [default]:ENTER

  Enter password []: ENTER # 在此直接按ENTER键。

  这样就可以设置一个不可用的密码。

  Set the password so that user cannot logon? (y/n) [n]: y

  Name: ftp

  Password: ****

  Fullname: anonymous ftpd user

  Uid: 1001

  Gid: 1001 (ftp)

  Groups: ftp

  Login Class: default

  HOME: /var/ftp

  Shell:

  OK? (y/n) [y]: y

  Added user ftp"

  Copy ˉles from /etc/skel to /var/ftp

  Add another user? (y/n) [y]: n

  Goodbye!

  #

  到这里,添加用户的工作就完成了。还需要把系统从’/etc/skel’ 复制到$HOME目录的一些"dot ˉles"给删除,以免暴露信息。’dot ˉles’的第一行通常会有一些系统的信息,比如’ /.cshrc’文件中就有这么一句:

  # $OpenBSD: dot.cshrc,v 1.5 2005/02/16 06:56:57 matthieu Exp $

  这至少就告诉了匿名登录的用户,这是个OpenBSD系统。所以建议把它们删除:

  # rm -f /var/ftp/.*

  为FTP目录设置正确的权限

  1、’ftp’目录

  "ftp"目录表示"ftp"用户的主目录,在本例中就是"/var/ftp"目录。将它的owner设置为"root",权限设置为任何人都不可写(555):

  # chown -R root:wheel /var/ftp

  # chm

相关TAG标签 服务器 程序
上一篇:Fedora 8安装realplayer实现网页播放rm
下一篇:linux中mac绑定
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站