免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4961 | 回复: 15
打印 上一主题 下一主题

[OpenBSD] (定稿,已完整。)使用OpenBSD 3.8 release自带的FTPD架设FTP服务器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-19 21:07 |只看该作者 |倒序浏览
(定稿,已完。偶的CU BLOG上排版较整洁,推荐:
http://blog.chinaunix.net/articl ... 50&blogId=10604

使用OpenBSD 3.8 release自带的FTPD架设FTP服务器

Author:        MichaelBibby
Date:        2005/11/20

可以任意转载,但请保留以上信息,谢谢。

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

        官方FAQ:http://www.openbsd.org/faq/faq10.html#AnonFTP
        ftpd的在线手册页:http://www.openbsd.org/cgi-bin/m ... 386&format=html

OpenBSD的ftpd程序没有配置文件,就靠设置运行参数进行配置。所有参数的含义都可以在ftpd
的man文档中获得详细信息:

        $ man ftpd

ftpd程序的启动有三种方法(inetd/"rc file"/command line):

        1:        inetd方式:
       
                在"/etc/inetd.conf"文件中有这么一行:
               
                ftp        stream        tcp        nowait        root        /usr/libexec/ftpd        ftpd -US

                这里为"ftpd"传递了两个参数"-US"。当然你还可以组合自己想要的参数。(一些常用参数的含义
                在下文给出)。
                inetd方式还需要同时启动inetd服务,OpenBSD默认启动了inetd(可以看看/etc/rc.conf中的
                "inetd_flags"变量的值)。

        2:        "rc"方式;
       
                所谓"rc"方式,指的就是通过配置"/etc/rc.conf"或者"/etc/rc.conf.local"来启动系统服务。
                为"/etc/rc.conf"中的"ftpd_flags"变量设置参数,并确保该行没有被注释掉。
                这种方法需要在重新启动系统后才会生效;
       
        3:        直接在命令行下执行ftpd命令,这样就不需要重启系统了:
       
  1.         # /usr/libexec/ftpd -4DllUS
复制代码


ftpd程序的终止:

        1:        如果不需要提供ftp服务,则在/etc/rc.conf中将ftpd_flags变量注释掉(在该行最开头加一个"#"
                符号);
        2:使用ps查看ftpd的PID,然后"kill PID"。

以下是ftpd常用的一些参数(这里列出的只是常用的,并不是全部。更多的参数请查看ftpd的man文档):

        -4        如果指定了"-D"参数,则强制ftpd只使用IPv4地址。
        -6        和"-4"的解释类似;如果指定了"-D"参数,则强制ftpd只使用IPv6地址。
        -A        只允许匿名登录(除非指定了"-n"选项)。
        -D        如果指定了该参数,ftpd将做为daemon运行,监听ftp端口并且fork子进程对连接进行
                处理。在繁忙的服务器上,这样可以减少系统负载,与使用inetd方式启动ftpd比起来,
                这种方式使用更少的系统资源。
        -d        使用LOG_FTP将Debug信息写入syslog。
        -l        每个成功和失败的ftp session都将由LOG_FTP工具通过syslog记录下日志。如果这个选
                项被指定两次,所有get/put/append/delete/make directory/remove directory/rename
                操作以及所操作的文件都将被记录进日志。
        -U        每个并发的ftp session都被记录到日志文件/var/run/utmp,记录的格式就象who(1)命令
                的输出一样。
        -n        禁止匿名登录。通常是允许的。
        -S        如果设置了这个参数,ftpd将会把所有匿名用户的下载情况记录在文件/var/log/ftpd中
                (如果它存在的话)。
        -T maxtimeout
                连接超时的时间限制。默认是2小时。
        -u mask
                强制设置umask为指定的mask。而不是使用/etc/login.conf中的设置(login.conf中通常
                设置为022),并且不允许chmod。

看了这几个选项,你应该可以组合出合适的选项来满足自己的功能需求了。

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

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

  1.         ftpd_flags="-4DllUSn"
复制代码


参考上面几个常用选项的说明,你就会明白这是什么意思了。       
       
2:允许匿名用户登录访问FTP资源;       

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

        1:不为该用户提供一个可用的shell,使其无法登录系统;
        2:没有一个可用的密码(即FAQ上说的"This account shouldn't have a usable password;";
        3:登录系统后被chroot;
        ......

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

2.1:添加"ftp"帐户以提供匿名访问;

2.1.1:在/etc/shells中添加一个无法实际使用的shell:

设置"ftp"使用这个shell的目的,是不允许它通过shell登录到系统中。通常我们会有两种选择:

  1.         /sbin/nologin
  2.         /usr/bin/false
复制代码


为了在添加用户时可以使用这两个shell,我们可以这样做:
       
  1.         # echo '/sbin/nologin' >>/etc/shells
  2.         # echo '/usr/bin/false' >>/etc/shells
复制代码


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

  1.         # adduser -shell /sbin/nologin
  2.         Enter username []: ftp
  3.         Enter full name []: anonymous ftpd user
  4.         Enter shell bash csh ksh nologin sh [/sbin/nologin]:
复制代码

        ......

这里在询问该用户使用何种shell时就出现了/sbin/nologin。如果不带这个参数,将无法使用它:

  1.         # adduser
  2.         Enter username []: ftp
  3.         Enter full name []: anonymous ftpd user
  4.         Enter shell bash csh ksh nologin sh [bash]: /sbin/nologin
  5.         /sbin/nologin: is not allowed!
  6.         Enter shell bash csh ksh nologin sh [bash]:
复制代码


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

2.2:示例;

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

  1.         # adduser -shell /sbin/nologin -home /var
  2.         Use option ``-silent'' if you don't want to see all warnings and questions.

  3.         Reading /etc/shells
  4.         Check /etc/master.passwd
  5.         Check /etc/group

  6.         Ok, let's go.
  7.         Don't worry about mistakes. I will give you the chance later to correct any input.
  8.         Enter username []: ftp
  9.         Enter full name []: anonymous ftpd user
  10.         Enter shell bash csh ksh nologin sh [/sbin/nologin]:ENTER
  11.         Uid [1001]:ENTER
  12.         Login group ftp [ftp]:ENTER
  13.         Login group is ``ftp''. Invite ftp into other groups: guest no
  14.         [no]:ENTER
  15.         Login class daemon default staff [default]:ENTER
  16.         Enter password []:ENTER                # 在此直接按ENTER键。这样就可以设置一个不可用的密码。
  17.         Set the password so that user cannot logon? (y/n) [n]: y

  18.         Name:        ftp
  19.         Password:    ****
  20.         Fullname:    anonymous ftpd user
  21.         Uid:         1001
  22.         Gid:         1001 (ftp)
  23.         Groups:      ftp
  24.         Login Class: default
  25.         HOME:        /var/ftp
  26.         Shell:
  27.         OK? (y/n) [y]: y
  28.         Added user ``ftp''
  29.         Copy files from /etc/skel to /var/ftp
  30.         Add another user? (y/n) [y]: n
  31.         Goodbye!
  32.         #
复制代码


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

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

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

        # rm -f /var/ftp/.*

3:为/var/ftp目录设置正确的权限以保证安全性;

3.1:"~ftp"目录;

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

        # chown -R root:wheel /var/ftp
        # chmod -R 555 /var/ftp

3.2:"~ftp/bin"目录;

这个目录并不是必须的。如果希望匿名用户登录到FTP后能够执行一些command,就可以将command
复制到这个目录下。所有的command的权限都应该设置为只允许执行(111)。

        # mkdir /var/ftp/bin
        # chown -R root:ftp /var/ftp/bin
        #COPY YOUR PROGRAMS TO /var/ftp/bin,AND THEN:
        # chmod -R 111 /var/ftp/bin/*

3.3:"~ftp/etc"目录;

和"~ftp/bin"目录一样,这也是个可选的,并不推荐创建它。(更多关于该目录设置的信息请查看"ftpd"
的man文档)。

3.4:"~ftp/pub"目录:

这个目录用来存放你希望被匿名用户访问的文件。权限应该设置为555。
       
  1.         # chown -R root:ftp /var/ftp/pub
  2.         # chmod -R 555 /var/ftp/pub
复制代码


这里虽然提到了创建三个目录,但是实际上我们只需要创建"~ftp/pub"目录并设置好权限就可以了。

4:chroot匿名登录的用户;

"ftpd"会将"/etc/ftpchroot"文件中列出的用户都chroot。要使"ftp"用户在登录ftp后被chroot,只需要简单
地把用户名添加到这个文件中就可以了。这是一个示例文件:

        # file : /etc/ftpchroot
        #       $OpenBSD: ftpchroot,v 1.3 1996/07/18 12:12:47 deraadt Exp $
        #
        # list of users (one per line) given ftp access to a chrooted area.
        # read by ftpd(.
        ftp
        bibby

"ftpd"在启动时会读取这个文件,如果"ftp"和"bibby"这两个用户登录ftp,将被分别chroot到自己的$HOME目录下。

5:其他一些相关文件;

        /etc/ftpusers -- 列出了所有不受欢迎的用户。列在该文件中的用户都无法登录ftp。
        /etc/ftpwelcome -- 欢迎信息。登录上ftp的用户都将在登录时看到这一信息。
        /etc/motd -- 如果"/etc/ftpwelcome"文件不存在,则使用"/etc/motd"文件的内容做为欢迎信息。
        ".message" -- 这个文件可以被放置在"~ftp"目录下的任何一个子目录中。用户进入该目录时就会显示这个
                                文件中的内容。

[ 本帖最后由 MichaelBibby 于 2005-11-20 15:20 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-11-19 21:51 |只看该作者
支持一下

论坛徽章:
0
3 [报告]
发表于 2005-11-19 21:56 |只看该作者
原帖由 FinalBSD 于 2005-11-19 21:51 发表
支持一下

版主还能删帖,我倒。
没事尽量别删帖啦

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-11-19 22:15 |只看该作者
原帖由 MichaelBibby 于 2005-11-19 21:56 发表

版主还能删帖,我倒。
没事尽量别删帖啦

没事,一般我只删除灌水贴。尽管放心

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
5 [报告]
发表于 2005-11-19 23:40 |只看该作者
支持一下.
正好拿过来就用,爽!

论坛徽章:
0
6 [报告]
发表于 2005-11-20 07:34 |只看该作者
自带的听说是WU-FTP,还是装VSFTP或PROFTPD这些久经考验的好些

论坛徽章:
0
7 [报告]
发表于 2005-11-20 12:15 |只看该作者
原帖由 llzqq 于 2005-11-20 07:34 发表
自带的听说是WU-FTP,还是装VSFTP或PROFTPD这些久经考验的好些

是WU-FTPD?这个倒没听说
据说ftpd曾有不安全的历史,用vsftpd还是更放心些
但是这个东西应该也没啥大问题

论坛徽章:
0
8 [报告]
发表于 2005-11-20 12:51 |只看该作者
正是我需要的,谢谢了。

论坛徽章:
0
9 [报告]
发表于 2005-11-20 13:34 |只看该作者
原帖由 WolfShadow 于 2005-11-20 12:51 发表
正是我需要的,谢谢了。

偶的CU BLOG上,这篇文章已经完稿了,排版也比较整洁,可以看看

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-11-20 13:53 |只看该作者
偶帮你排了一下子版
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP