400-810-1218加入收藏夹|设为主页|广告服务|网币|登录|注册
当前位置:首页 >> 技术频道 >> 架设与应用

用LINUX架设FTP服务器

来源:网络 作者:佚名 发布时间:2009-10-28 10:19:22 发表评论

摘要:互联网文件传输协议(File Transfer Protocol ,FTP) 标准是在RFC959说明的。该协议定义了一个从远程计算机系统和本地计算机系统之间传输文件的一个标准。

关键词:LINUXFTP服务器

  指示: log transfer 类别(read/guest/anonumous) (inbound/outbound)

  设定指定的用户类别在上载还是下载时的相关信息被记录到/usr/adm/xferlog中。

  举例说明:

  log transfer anonymous,real inbound,outbound

  当anonymous或real用户登录后,上载和下载的操作会被记录在文件/usr/adm/xferlog中。

  指示: shutdown 文件名

  FTP服务器关闭的时间可以后面的文件名中指定的文件中指定,设定的时间一到,便无法登录FTP服务器了,只有将这个文件删除才能恢复FTP服务器。文件的格式可以由命令ftpshut来建立。

  指示: delete (yes/no) 类别(real/anonymous/guest)

  设定是否允许指定用户使用delete命令。

  举例说明:

  delete no guest,anonymous

  设定大概内登录的用户为guest或anonymous上不允许执行delete命令。

  指示: overwrite (yes/no) 类别(real/anonymous/guest)

  设定是否允许指定用户使用overwrite指令。

  指示: reame (yes/no) 类别(real/anonymous/guest)

  设定是否允许指定用户使用readme指令。

  指示: chmod (yes/no) 类别(real/anonymous/guest)

  设定是否允许指定用户使用chmod指令。

  指示: umask (yes/no) 类别(real/anonymous/guest)

  设定是否允许指定用户使用umask指令。

  指示: upload [absolute|relative] [class=]... [-]

  ["dirs"|"nodirs"] []

  定义允许用来上载的目录。若允许上载,所有新上载的文件的所有者及组由和定义 ,访问权限将为。对于覆盖老文件的上载文件将保持原来的所有者及访问权限信息。文件上载的权限信息由最大匹配目录项定义,如:

  upload /var/ftp * no

  upload /var/ftp /incoming yes ftp daemon 0666

  upload /var/ftp /incoming/gifs yes jlc guest 0600 nodirs

  would only allow uploads into /incoming and /incom-

  :

  将只允许/incoming和/incom-ing/gifs目录上载。上载到/incoming目录下的文件将属于ftp/daemon,访问权限为0666;而上载到/incoming/gifs下的文件将属于jlc/guest,访问权限为0600。应该注意的是 必须匹配"ftp"用户的passwd文件中的主目录。

  "dirs"和"nodirs"选项用来设定是否允许在该目录下创建新的子目录。但是缺省是允许创建子目录的。

  设定新创建的目录的访问权限,缺省为0777。

  上载指示只能施用于用户主目录(chroot()的参数)等同于的用户,可以为*来表示匹配任何主目录。

  和也可能指定为*,在这种情况下,任何上载的文件或创建的目录的所有者都等于起父目录的所有者。

  选项[absolute|relative]指定是是绝对路径还是相对于chroot()参数指定的目录的相对路径。缺省是绝对路径。也可以指定任意多个class='来进行进一步限定。若指定了任何目录,则该上载指示只影响这些组的用户。

  指示: alias 目录别名 目录路径

  给指定目录设置一个别名,当切换目录时可以使用别名。

  举例说明:

  alias xwin /pub/linux/xwindows

  为/pub/linux/xwindows设置别名xwin,登录以后只要输入命令cd xwin就可以进入该目录。

  指示: cdpath 目录

  该功能和系统的PATH环境变量设置类似,当cd /etc时,FTP首先查看当前目录下是否有etc子目录,无则看是否有别名,若没有则根据该指示设定的路径查询。

  举例说明:

  cdpath /pub/linux

  cdpath /pub

  cdpath /

  搜索顺序为:/pub/linux /pub /

  指示: path-filter 类别(real/anonymous/guest) 目录

  设定上载文件名限制。

  举例说明:

  path-filter anonymous /etc/pathmsg^[-A-Za-z0-9_\.]*$^\.^-

  path-filter guest /etc/pathmsg^[-A-Za-z0-9_\.]*$^\.^-

  设置限制anonymous和guest用户上载的文件名只能包含A-Z、a-z、0-9和._-,名字以"."和"-"开头的文件不能上载到服务器上。

  指示: guestgroup [ ...]

  guestuser [ ...]

  realgroup [ ...]

  realuser [ ...]

  对于guestgroup指示,若一个真实(real)用户属于任何一个所指定的组,则其FTP会话都被FTP服务器以匿名的方式进行处理。也就是说,chroot()被调用,用户不再允许发出USER和 PASS 命令。必须是有效的组。

  这里用户的home目录必须被争取的设置,要确实和匿名用户一致,/etc/passwd中的相关项的home目录被分割为两个部分,第一部分是chroot()调用的根目录参数,第二个是用户相对于根目录的主目录,两部分之间以"/./分隔",如:

  guest1::100:92:Guest Account:/ftp/./incoming:/etc/ftponly

  当guest1成功登录进入,FTP服务器将调用chroot("/ftp")然后调用chdir("/incoming")。则guest1就如同匿名用户一样只能访问/ftp下面的容(对于guest1来说,它就是"/")。

  可以是组名或数字ID。若使用数字ID,需要在数字前面加上一个"%"。使用*表示所有组。

  guestuser和guestgroup指示类似,只不过是限定一个单一用户罢了。

  realuser和realgroup有同样的语法,但是和guestuser及guestgroup起相反的作用,其是允许某个组的用户或某个用户以真实身份访问FTP服务器。如:

  guestuser *

  realgroup admin

  指定所有的非匿名用户登录进入服务器以后,都被做为匿名用户处理,但是admin组的用户是例外,登录以后以真实身份存在。

  指示: guestgroup 功能

  设定guest组的功能。

  举例说明:

  guestgroup ftponly

  指示: nice []

  设定FTP服务器守护进程的调度优先级。

  指示: defumask []

  若远程用户属于class,则守护进程创建的文件的umask为umask。若没有指定class则将umask作为缺省的umask.

  指示: tcpwindow []

  设置数据连接的TCP窗口大小,若不明白含义,一般不要去设置它。

  指示:keepalive

  设置TCP socket的SO_KEEPALIVE参数选项。

  指示:timeout accept

  timeout connect

  timeout data

  timeout idle

  timeout maxidle

  timeout RFC931

  设置各种超时时钟,这些参数必须在对TCP协议非常熟悉的情况下才应该去设定,一般不要改动这些值,具体含义参见man ftpaccess。

  指示: file-limit [] []

  限制某个组的任何一个用户允许上载的文件的数量,若没有指定class,则该限制施用于所有没有限定的组。raw指示这个限制包括所有的传输,而不仅仅是数据文件。

  指示:byte-limit [] []

  限制某个类的任何一个用户允许传输的数据总量。

  指示: limit-time {*|anonymous|guest}

  限定一个对话允许的持续时间,缺省无限制。真实用户没有该限制。

  指示:guestserver []

  控制哪个站点允许进行匿名连接,若没有指定hostname,则拒绝所有匿名连接。

  指示: noretrieve [absolute|relative] [class=] ... [-] ...

  设定拒绝那些类访问哪些特定文件。例如:

  noretrieve /etc/passwd core

  指定任何访问者都不可以访问文件/etc目录下的passwd文件和所有的名为"core"的文件。

  指示:allow-retrieve [absolute|relative] [class=]... [-] ...

  允许访问这些文件。

  指示:private

  当一个用户登录进入,,指示SITE GROUP和 and SITE GPASS用来指定一个增强的访问组和相应的密码。若输入的组名和密码有效的话,该用户将变为该组的成员,具有该组的访问权限。

  指示:greeting full|brief|terse

  greeting text

  允许控制在远程用户登陆进来以后,给用户多少greet信息及信息内容。

  指示:banner

  和message类似,不过banner消息是在用户输入用户名和密码以前显示给用户的。

  指示: hostname

  定义FTP服务器缺省的主机名。

  指示: email

  定义FTP维护者的emai地址。

  指示: log security (anonymous|guest|real)

  使记录违背安全规则如:(noretrieve, .notar, ...)的命令。

  指示:log syslog

  log syslog+xferlog

  重定向记录消息到系统记录文件syslog,缺省只记录到xferlog。

  指示:daemonaddress

  若该值没有被设置,则服务器则监听所有的接入请求,否则,服务器只接受来自定义的连接请求。这个设置一般不要设置,设置以后会阻止使用虚拟主机或其他一些以后扩展的功能。

  指示: virtual

  打开虚拟FTP服务器的支持。是虚拟服务器的IP地址。第二个参数指定如root目录,bannner文件,log文件等的路径。

  指示:virtual

  设置在greeting消息中显示的主机名字或电子邮件。

  指示:virtual allow [ ...]

  virtual deny [ ...]

  一般真实和guest用户不允许登陆进入虚拟主机,该两个指示用来重新对允许和拒绝访问的虚拟主机的用户进行细化定义。

  指示:virtual private

  通常,拒绝匿名用户登陆进入虚拟主机。

  指示: defaultserver deny [ ...]

  defaultserver allow [ ...]

  对允许访问缺省(非虚拟)FTP服务器的用户进行定义。

  指示:defaultserver private

  拒绝匿名用户访问缺省FTP服务器。

  指示: deny ip地址/域名 说明文件

  设定限制哪个IP地址或域名的用户不允许登录到服务器。

  举例说明:

  deny 201.101.15* *.hacker,com /tmp/message/deny.msg

  限制IP地址为201.101.15*及域名为*.hacker,com的机器不允许登录服务器

  1.4.2 /etc/ftpusers和/etc/ftphosts的设置

  /etc/ftpusers是用来设定系统上的某些用户不允许使用FTP传送文件,/etc/ftphosts是用来设定某些主机不允许连接本FTP服务器的。这样做的目的都是为了安全考虑。

  /etc/ftpusers使用的范例如下:

  root

  bin

  daemon

  adm

  lp

  sync

  shutdown

  halt

  mail

  news

  uucp

  operator

  games

  nobody

  限制某些用户登入FTP服务器是出于系统安全的原因,例如要避免超级用户登入系统。并且禁止某些和一些命令名相同的用户进入FTP服务器。

  /etc/ftphosts的示例如下:

  # Example host access file

  #

  # Everything after a '#' is treated as comment,

  # empty lines are ignored

  #allow [ ...]

  # Only allow host(s) matching to log in as .

  #deny [ ...]

  # Always deny host(s) matching to log in as .

  allow ideal *.linuxaid.com.cn 10.0.0.0/8

  deny fred *.hacker.com 131.211.31.0/24

  这里只允许ideal从域名以linuxaid.com.cn为后缀的主机及10.0.0.0/255.0.0.0的主机登录进入FTP服务器;禁止fred从*.hacker.com和131.211.31.0/24登录进入FTP服务器。这里的username若为anonymous或ftp都指匿名用户。

  1.4.3 /etc/ftpconversions设置

  该文件用来设定当用户下载文件时应该做那些操作,例如压缩、解压缩等。文件内容如下所示:

  :.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS

  : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS

  :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP

  : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP

  : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR

  : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS

  : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

  : : :.crc:/bin/cksum %s:T_REG::CKSUM

  : : :.md5:/bin/md5sum %s:T_REG::MD5SUM

  文件设置说明:

  :.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS

  表示对所有以".Z"结尾的文件使用/bin/compress -d -c"的方式解压缩。

  : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS

  表示将传送的文件压缩为".Z"格式。

  :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP

  表示将所有以".gz"的文件用"/bin/gzip -cd"解压缩。

  : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP

  表示将传送的文件压缩为".gz"格式。

  : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR

  表示将要传送的文件用"tar"打包。

  : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS

  表示将要传送的文件压缩成"tar.Z"的格式

  : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

  表示将要传送的文件压缩成"tar.gz"的格式

  : : :.crc:/bin/cksum %s:T_REG::CKSUM

  表示将要传送的文件进行CRC校验处理。

  : : :.md5:/bin/md5sum %s:T_REG::MD5SUM

  表示将要传送的文件进行md5校验。

  其实安装FTP以后缺省的配置文件已经将常用的压缩也解压缩的程序定义进去了,所以一般不需要修改这个文件的内容,但可以根据实际需要修改内容的顺序。例如,用户要下载一个"file.tar.gz"的文件,但此FTP上没有这个文件,但是有文件file,那么FTP服务器会将file打包压缩为file.tar.gz在传递给用户。若服务器上没有file这个文件,服务器会按照/etc/ftpconversions文件中指定的顺序去搜索,,以这个例子而言,会依次搜索file.Z、file.gz、file.tar、file.tar.Z、file.tar.gz、file.crc、file.md5文件,将先找到的传送给用户。所以文件/etc/ftpconversions的内容可以按照需要而改变顺序。

  到现在为止,已经安装配置成功了一个提供匿名访问的FTP服务器,可以连接上去测试功能是否符合需要。

  1.4.1 wu-ftp的相关程序

  ftpcount这个程序可以统计当前连接的用户数目,并给出上限,如:

  [root@linux doc]# ftpcount

  Service class friend - 0 users (no maximum)

  Service class local - 0 users (no maximum)

  Service class outworld - 0 users (no maximum)

  这里正在连接的属于local的有0个人,没有上限。其他几个类别含义一样。

  [root@linux doc]# ftpwho

  Service class friend:

  - 0 users (no maximum)

  Service class local:

  - 0 users (no maximum)

  Service class local:

  - 0 users (no maximum)

  当前三个类别都没有用户连接。

  ftpshut

  该程序主要用来生成/etc/shutmsg,也就是前面/etc/ftpaccess中设定的shutdown命令,ftpshut的使用格式如下:

  ftpshut [ -V ] [ -l min] [ -d min] time [ warning-message ... ]

  -l 该选项设置在关闭FTP服务器以前多少分钟停止用户的连接请求

  -d 该选项设置在关闭FTP服务器以前多少分钟将已经连接的用户断线

  time 设置关闭FTP服务器的时间,例如希望在晚上10点关闭FTP服务器,则为2200

  warning-message 断线以前显示给用户的告警信息

  例如:

  [root@linux /etc]# ftpshut -l15 -d5 1800 "ftp server will shutdown"

  [root@lix /etc]# less shutmsg

  2000 04 07 18 00 0015 0005

  ftp server will shutdown

  1.5 开设只能FTP的帐户

  很多时候需要开设一些只允许ftp到服务器的用户,实现方法如下:

  1、按照通常的方式为这些用户在系统上开设帐户。

  [root@ns /etc]#useradd ftp_user1

  [root@ns /etc]#chmod 700 /etc/shadows

  [root@ns /etc]#vi /etc/shadows

  删除项:

  ftp_user1:!!:11113:0:99999:7:-1:-1:134537372

  中第二个字段的"!!",然后再以ftp_usre1用户登录,就不会询问口令,然后使用passwd为该用户设定口令

  2、使用vi修改/etc/shells文件,添加/dev/null项或/bin/passwd,如下所示:

  [root@ns /etc]# cat shells

  /bin/bash

  /bin/sh

  /bin/ash

  /bin/bsh

  /bin/tcsh

  /bin/csh

  修改为:

  [root@ns /etc]# cat shells

  /bin/bash

  /bin/sh

  /bin/ash

  /bin/bsh

  /bin/tcsh

  /bin/csh

  /dev/null

  /bin/passwd

  2、使用vi打开文件/etc/passwd

  3、将那些只允许FTP的系统的用户的登录shell改为/dev/null(若不允许用户修改其口令)或/bin/passwd(若允许用户修改其口令字),如下所示:

  ftp_user1:x:503:504::/home/ftp_user1:/bin/bash

  改为:

  ftp_user1:x:503:504::/home/ftp_user1:/dev/null

  或

  ftp_user1:x:503:504::/home/ftp_user1:/bin/passwd

  这样,则该用户只能使用如pop3、FTP等服务,而不能通过telnet登录到系统中。

  1.6 设置虚拟FTP主机

  所谓虚拟匿名主机,指一台机器上有多个IP地址,并且可以向外提供过个匿名的FTP服务器,这些服务器在逻辑上是独立的,有不同的访问控制表,不同的下载内容。下面是设置一台虚拟FTP服务器的步骤:

  1. 首先对本地某个网卡设置别名IP地址,即在一块网卡上绑定多个IP地址:如你的内部FTP主机为191.168.0.4

  你可再绑定一个IP地址如下:

  /sbin/ifconfig eth0:0 191.168.0.5 up //向接口添加一个新的IP

  /sbin/route add -host 191.168.11.7 eth0:0 //增添路由信息

  1. 先创建目录/home/virtualftp和/var/log/virtualftp。生成banner文件/home/virtualftp/banner_message修改FTP服务器的主配置文件/etc/ftpaccess,增加对虚拟FTP的支持信息,加下面的行到该文件中:

  virtual 191.168.0.5 root /home/virtualftp

  virtual 191.168.0.5 banner /home/virtualftp/banner_message

  virtual 191.168.0.5 logfile /var/log/virtualftp/xferlog

  上面三条指示分别设置虚拟主机的根目录,虚拟主机的记录文件,虚拟主机的登录显示信息。上面路径和文件名可随便定义。

  3. 拷贝所需要的匿名FTP文件,主要是/lib,/etc,/bin目录

  # cp /home/ftp/* /home/virtualftp -a

  4.在DNS中定义191.168.0.5,设置成虚拟FTP的域名映射。

0
顶一下
0
踩一下

相关文章

发表评论

请自觉遵守互联网相关政策法规,作者管理后台可以删除恶意评论、广告和违禁词语。