当前位置:Linux教程 - Ftp服务 - ftp服务 - ftp的设置

ftp服务 - ftp的设置

ftp的设置
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

为什么我在ftpaccess里的一些设置没用呢?
1、设了
cdpath /var/ftp/incoming
cdpath /var/ftp
cdpath /

用户登录仍然不能访问除自己用户目录外的其它目录。

2、设了
upload /var/ftp/upload yes root ftpadms real daemon 0744 dirs
后,用户上传时仍传到自己的用户目录里是为什么?

3、怎么样才用以管理员的身份TELNET?

谢谢!

转贴
http://www.gzjjsoft.com/bbs/
互联网文件传输协议(File Transfer Protocol ,FTP) 标准是在RFC959说明的。该协议定义了一个从远程计算机系统和本地计算机系统之间传输文件的一个标准。一般来说,传输文件的用户需要先经过认证以后才能登录网站,然后方能访问在远程服务器的文件。而大多数的FTP服务器往往提供一个GUEST的公共帐户来允许没有远程服务器的用户可以访问该FTP服务器。
一个FTP会话通常包括五个软件元素的交互。
用户接口 提供了一个用户接口并使用客户端协议解释器的服务。
客户 PI 客户协议解释器,其项远程服务器协议机发送命令并且驱动客户数据传输过程
服务器PI 服务器协议解释器,响应客户协议机发出的命令并驱动服务器端数据传输过程
客户 DTP 客户数据传输过程,其负责完成和服务器数据传输过程及客户端本地文件系统的通信
服务DTP 服务器数据传输过程,负责完成和客户数据传输过程及服务器端文件系统的通信
本文采用的是系统自带的FTP软件———WU-FTP软件。在安装LINUX时,系统通常会缺省安装。
通常配置FTP服务需要对以下几个文件进行配置:ftpaccess、ftpusers、ftphosts。
Ftpaccess文件是FTP服务器最重要的配置文件,这个文件的设置决定了FTP是否可以正常工作及许多访问权限的设置。下面进行配置,以下例进行解释:
class all real,guest,anonymous *
limit all 10 Any /etc/msgs/msg.dead
readme README* login
readme README* cwd=*
message /welcome.msg login
message .message cwd=*
compress yes all
tar yes all
log commands real
log transfers anonymous,real inbound,outbound
shutdown /etc/shutmsg
email user@hostname
  下面是设置文件各个指示(directive)的详细说明:
指示: loginfails n
密码输入n次就自动断开连接
指示:autogroup 组名 类别 [<类别> ...]
  若一个匿名用户属于任何一个参数类别的类,则FTP服务器将实施setegid()调用使其属于这个组名定义的组,这样做是为了实现某些特定类别的匿名用户可以访问一些只允许本组及拥有者可以访问的文件。组名必须是/etc/group内定义的有效组。
指示: class 类名 类别(real、guest、anonumous) IP地址
  这个指示是设定FTP服务器用户的类别。
  FTP服务器的用户可以分为以下三种类别:
real 在该FTP服务器上拥有合法帐户的用户;
guest 另外定义某些特定组的用户;
anonymous 匿名用户;
举例说明:
class gzjjsoft real,guest,anonymous *
  定义一个名为gzjjsoft的类,该类包含三种类型的用户:real,guest,anonymous。该类在后面的指示中使用。其中'*'是类定义中的IP地址部分,表示网络上的所用主机。也就是说明允许任何主机连接FTP服务器。若希望对访问FTP的主机进行一定的权限设置,可以这样做:
class friend real,guest,anonymous *.linuxaid.com.cn 202.102.13.*
  指定义一个friend类,该类从*.linuxaid.com.cn 及202.102.13.*访问FTP服务器时有特定的权限设定。
指示: limit 类别 人数 时间 文件名
  该指示设定在某个类在某个时间内允许连接FTP服务器的人数的限制,并指定当连接人数超过限制,后面的用户连接时显示给用户的消息信息。
举例说明:
limit local 20 Any /tmp/message/msg.toomany
  上面的例子限定local这个类中的拥护同一时间只能有20人同时上网连接这台FTP服务器,若超过20人则显示/tmp/message/msg.toomany的文件的内容
limit gzjjsoft 100 MoTu|Any 2200-0800 /tmp/message/msg.limit
  这个例子限制gzjjsoft这个类的用户只能在周一周二或每天的晚上10点到第二天早上的8点之间访问该FTP服务器,而且同时连线的人数不可以超过100人,若超过100人,则显示/tmp/message/msg.limit的文件的内容
  /tmp/message/msg.limit的内容为:
  对不起!本服务器只允许匿名用户在周一周二全天及其他每天晚上10点到第二天早上的8点之间访问,当前时间为%T;而且只允许同时有%M个匿名用户访问,当前有%N个用户在访问该服务器。请在合适的时间访问本FTP服务器,谢谢!
  这里的%M是一个变量,代表同时允许连接的人数的上限,FTP服务器可以用前面设置的值自动替代该变量,其他允许的变量包括:
%T 本地当前时间;
%F CWD所在分区剩余空间,以KB为单位。但该变量不是所有系统都支持。
%C 当前工作目录;
%E 定义在/etc/ftpaccess文件中的系统管理员的E-mail地址;
%R 远端主机名;
%L 本地主机名;
%U 登录时所给的用户名;
%N 这个类别当前连接的用户数目;
  利用这些参数,可以编辑一个详细的说明文件,这样可以让用户清楚当前服务器资源使用情况。
指示: readme 说明文件 指令
  当用户执行指定的'指令'时,系统就会自动显示所设置的说明文件;
举例说明:
readme README* login
  当用户执行登录动作时,只要以README开头的文件内容就会显示给用户。
readme README* cwd=*
  表示用户切换目录时(cwd),只要以README开头的文件内容就会显示给用户。
  通常README*应该是该目录下文件的说明,让登录的用户可以清楚地知道目录中存放了那些文件;
指示: message 文件名 指令
  使当用户执行特定的'指令'时,系统就将指定的文件内容显示给用户;
举例说明:
message /msg.welcome login
  指定当用户登录时,将自动显示/tmp/message/msg.welcome的内容给用户,注意这里的/msg.welcome指ftp根目录下的msg.welcome文件,即/home/ftp/msg.welcome。
message /welcome cwd=*
  指定当用户切换另一个目录时,只要目录中有msg.welcome文件,就显示给用户
指示: compress (yes/no) 类别
  设置哪个类别的用户可以使用压缩功能;
举例: compress yes local outworld
  允许local 和outworld两个类别的 用户使用压缩功能
指示: tar (yes/no) 类别
  指定哪个类别的用户可以使用tar功能;
指示: passwd-check (none/trivial/rfc822) (enforce/warn)
  设定当用户以匿名方式登录服务器时密码的方式:
none 表示不对密码进行验证,任何密码都可以登录;
trival 表示只要密码中包含@就可以登录;
rfc822 表示密码一定要符合rfc822中规定的E-mail格式才能登录。如:webmaster@gzjjsoft.com
enforce 表示输入的密码不符合指定格式就不允许登录;
warn 表示输入的密码不符合指定格式显示警告信息,但仍然允许登录;
指示: log commands 类别(read/guest/anonumous)
  设定那些用户登录时,所使用的操作会被记录在文件/usr/adm/xferlog中。
指示: 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=<assname>]... [-]<root-dir> <dirglob> <yes|no> <owner> <group>
<mode> ['dirs'|'nodirs'] [<d_mode>]
  定义允许用来上载的目录。若允许上载,所有新上载的文件的所有者及组由<owner>和<group>定义 ,访问权限将为<mode>。对于覆盖老文件的上载文件将保持原来的所有者及访问权限信息。文件上载的权限信息由最大匹配目录项定义,如:
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。应该注意的是<root-dir> 必须匹配'ftp'用户的passwd文件中的主目录。
  'dirs'和'nodirs'选项用来设定是否允许在该目录下创建新的子目录。但是缺省是允许创建子目录的。
  <d_mode>设定新创建的目录的访问权限,缺省为0777。
  上载指示只能施用于用户主目录(chroot()的参数)等同于<root-dir>的用户,<root-dir>可以为*来表示匹配任何主目录。
  <owner>和<group>也可能指定为*,在这种情况下,任何上载的文件或创建的目录的所有者都等于起父目录的所有者。

  选项[absolute|relative]指定是<root-dir>是绝对路径还是相对于chroot()参数指定的目录的相对路径。缺省是绝对路径。也可以指定任意多个class=<classname>'来进行进一步限定。若指定了任何目录,则该上载指示只影响这些组的用户。
指示: 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 <groupname> [<groupname> ...]
guestuser <username> [<username> ...]
realgroup <groupname> [<groupname> ...]
realuser <username> [<username> ...]
  对于guestgroup指示,若一个真实(real)用户属于任何一个<groupname>所指定的组,则其FTP会话都被FTP服务器以匿名的方式进行处理。也就是说,chroot()被调用,用户不再允许发出USER和 PASS 命令。<groupname>必须是有效的组。
  这里用户的home目录必须被争取的设置,要确实和匿名用户一致,/etc/passwd中的相关项的home目录被分割为两个部分,第一部分是chroot()调用的根目录参数,第二个是用户相对于根目录的主目录,两部分之间以'/./分隔',如:
guest1:<passwd>:100:92:Guest Account:/ftp/./incoming:/etc/ftponly
  当guest1成功登录进入,FTP服务器将调用chroot('/ftp')然后调用chdir('/incoming')。则guest1就如同匿名用户一样只能访问/ftp下面的容(对于guest1来说,它就是'/')。
  <groupname>可以是组名或数字ID。若使用数字ID,需要在数字前面加上一个'%'。使用*表示所有组。
  guestuser和guestgroup指示类似,只不过是限定一个单一用户罢了。
  realuser和realgroup有同样的语法,但是和guestuser及guestgroup起相反的作用,其是允许某个组的用户或某个用户以真实身份访问FTP服务器。如:
guestuser *
realgroup admin
  指定所有的非匿名用户登录进入服务器以后,都被做为匿名用户处理,但是admin组的用户是例外,登录以后以真实身份存在。
指示: guestgroup 功能
  设定guest组的功能。
举例说明:
guestgroup ftponly
指示: nice <nice-delta> [<class>]
  设定FTP服务器守护进程的调度优先级。
指示: defumask <umask> [<class>]
  若远程用户属于class,则守护进程创建的文件的umask为umask。若没有指定class则将umask作为缺省的umask.
指示: tcpwindow <size> [<class>]
  设置数据连接的TCP窗口大小,若不明白含义,一般不要去设置它。
指示:keepalive <yes|no>
  设置TCP socket的SO_KEEPALIVE参数选项。
指示:timeout accept <seconds>
timeout connect <seconds>
timeout data <seconds>
timeout idle <seconds>
timeout maxidle <seconds>
timeout RFC931 <seconds>
  设置各种超时时钟,这些参数必须在对TCP协议非常熟悉的情况下才应该去设定,一般不要改动这些值,具体含义参见man ftpaccess。
指示: file-limit [<raw>] <in|out|total> <count> [<class>]
  限制某个组的任何一个用户允许上载的文件的数量,若没有指定class,则该限制施用于所有没有限定的组。raw指示这个限制包括所有的传输,而不仅仅是数据文件。
指示:byte-limit [<raw>] <in|out|total> <count> [<class>]
  限制某个类的任何一个用户允许传输的数据总量。
指示: limit-time {*|anonymous|guest} <minutes>
  限定一个对话允许的持续时间,缺省无限制。真实用户没有该限制。
指示:guestserver [<hostname>]
  控制哪个站点允许进行匿名连接,若没有指定hostname,则拒绝所有匿名连接。
指示: noretrieve [absolute|relative] [class=<classname>] ... [-] <file- name> <filename> ...
  设定拒绝那些类访问哪些特定文件。例如:
noretrieve /etc/passwd core
  指定任何访问者都不可以访问文件/etc目录下的passwd文件和所有的名为'core'的文件。

指示:allow-retrieve [absolute|relative] [class=<classname>]... [-] <filename> ...
  允许访问这些文件。
指示:private <yes|no>
  当一个用户登录进入,,指示SITE GROUP和 and SITE GPASS用来指定一个增强的访问组和相应的密码。若输入的组名和密码有效的话,该用户将变为该组的成员,具有该组的访问权限。
指示:greeting full|brief|terse
greeting text <message>
  允许控制在远程用户登陆进来以后,给用户多少greet信息及信息内容。
指示:banner <path>
  和message类似,不过banner消息是在用户输入用户名和密码以前显示给用户的。
指示: hostname <some.host.name>
  定义FTP服务器缺省的主机名。
指示: email <name>
  定义FTP维护者的emai地址。
指示: log security (anonymous|guest|real)
  使记录违背安全规则如:(noretrieve, .notar, ...)的命令。
指示:log syslog
log syslog+xferlog
  重定向记录消息到系统记录文件syslog,缺省只记录到xferlog。
指示:daemonaddress <address>
  若该值没有被设置,则服务器则监听所有的接入请求,否则,服务器只接受来自<address>定义的连接请求。这个设置一般不要设置,设置以后会阻止使用虚拟主机或其他一些以后扩展的功能。
指示: virtual <address> <root|banner|logfile> <path>
  打开虚拟FTP服务器的支持。<address>是虚拟服务器的IP地址。第二个参数指定如root目录,bannner文件,log文件等的路径。
指示:virtual <address> <hostname|email> <string>
  设置在greeting消息中显示的主机名字或电子邮件。
指示:virtual <address> allow <username> [<username> ...]
virtual <address> deny <username> [<username> ...]
  一般真实和guest用户不允许登陆进入虚拟主机,该两个指示用来重新对允许和拒绝访问的虚拟主机的用户进行细化定义。
指示:virtual <address> private
  通常,拒绝匿名用户登陆进入虚拟主机。
指示: defaultserver deny <username> [<username> ...]
defaultserver allow <username> [<username> ...]
  对允许访问缺省(非虚拟)FTP服务器的用户进行定义。
指示:defaultserver private
  拒绝匿名用户访问缺省FTP服务器。
指示: deny ip地址/域名 说明文件
  设定限制哪个IP地址或域名的用户不允许登录到服务器。
举例说明:
deny 202.102.15* *.hacker,com /tmp/message/deny.msg
限制IP地址为202.102.15*及域名为*.hacker,com的机器不允许登录服务器

/etc/ftpusers是用来设定系统上的某些用户不允许使用FTP传送文件,/etc/ftphosts是用来设定某些主机不允许连接本FTP服务器的。这样做的目的都是为了安全考虑。
/etc/ftphosts的示例如下:
# Example host access file
#
# Everything after a '#' is treated as comment,
# empty lines are ignored
#allow <username> <addrglob> [<addrglob> ...]
# Only allow host(s) matching <addrglob> to log in as <username>.
#deny <username> <addrglob> [<addrglob> ...]
# Always deny host(s) matching <addrglob> to log in as <username>.
allow ideal *.linuxaid.com.cn 10.0.0.0/8
deny fred *.hacker.com 131.211.32.0/24
  这里只允许ideal从域名以gzjjsoft.com为后缀的主机及202.96.0.0/255.0.0.0的主机登录进入FTP服务器;禁止fred从*.hacker.com和131.211.32.0/24登录进入FTP服务器。这里的username若为anonymous或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
3、使用vi打开文件/etc/passwd
4、将那些只允许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登录到系统中。