帐号为“ftpadmin”,这这个帐号的家目录有一些奇怪。第一部分“/home/ftp/”表示“chroot”时作为根目录的目录。被点号分开的 “/ftpadmin”表示当登录ftp服务器的时候会自动转到这个目录。“/dev/null”这个空shell不允许“ftpadmin”像正常用户那样登录。经过这些改变,“ftpadmin”用户用的不是真正的shell而是伪shell,这样访问Ftp服务器就受到限制。创建一个“chroot”用户环境
先要创建一个简单的根文件系统(root file system),包含有足够的文件,如果二进制程序、口令文件,等等。当用户登录的时候,Unix就可以改变根文件系统(chroot)。注意一下,如果编译的时候象上面那样加上“--enable-ls”参数,“/home/ftp/bin”和“/home/ftp/lib”两个目录就可以不要了,因为 WU-FTP会用自己带的“ls”。不过我们还是介绍一下旧的方法,也就是把“/bin/ls”拷贝到“/home/ftp/bin”(chroot之后就是“/bin”)目录下,然后把相关的运行库拷贝到“/home/ftp/lib”目录下。
第一步
创建改变根文件系统(chrooted)环境所需要的所有的目录:
[root@deep]# mkdir /home/ftp/dev
[root@deep]# mkdir /home/ftp/etc
[root@deep]# mkdir /home/ftp/bin (require only if you are not using the “--enable-ls” option)
[root@deep]# mkdir /home/ftp/lib (require only if you are not using the “--enable-ls” option)
第二步
把新目录的权限设成0511:
[root@deep]# chmod 0511 /home/ftp/dev
[root@deep]# chmod 0511 /home/ftp/etc
[root@deep]# chmod 0511 /home/ftp/bin (require only if you are not using the “--enable-ls” option)
[root@deep]# chmod 0511 /home/ftp/lib (require only if you are not using the “--enable-ls” option)
上面这些“chmod”命令把chrooted之后的“dev”、“etc”、“bin”和“lib”目录设置成超级用户“root”可读、可执行,用户组和所有用户可执行。
第三步
把“/bin/ls”文件拷贝到“/home/ftp/bin”目录下,并把“ls”的权限改为0111(不运行用户改变这个文件)。
[root@deep]# cp /bin/ls /home/ftp/bin (require only if you are not using the “--enable-ls” option)
[root@deep]# chmod 0111 /bin/ls /home/ftp/bin/ls (require only if you are not using the “--enable-ls” option)
第四步
找到“ls”程序所需的共享库:
[root@deep]# ldd /bin/ls (require only if you are not using the “--enable-ls” option)
libc.so.6 => /lib/libc.so.6 (0x00125000)
/lib/ld-Linux.so.2 => /lib/ld-linux.so.2 (0x00110000)
把共享库拷贝到“/home/ftp/lib”目录下:
[root@deep]# cp /lib/libc.so.6 /home/ftp/lib/ (require only if you are not using the “--enable-ls” option)
[root@deep]# cp /lib/ld-Linux.so.2 /home/ftp/lib/ (require only if you are not using the “--enable-ls” option)
注意:如果想用Linux的“ls”程序而不是用WU-ftpd自带的“ls”(编译时加上“--enable-ls”参数),才需要第三和第四步。
第五步
创建“/home/ftp/dev/null”文件:
[root@deep]# mknod /home/ftp/dev/null c 1 3
[root@deep]# chmod 666 /home/ftp/dev/null
第六步
把“group”和“passwd”文件拷贝到“/home/ftp/etc”目录下,然后再改变这两个文件。
[root@deep]# cp /etc/passwd /home/ftp/etc/
[root@deep]# cp /etc/group /home/ftp/etc/
编辑“passwd”文件(vi /home/ftp/etc/passwd)把除了“root”和允许使用ftp的用户之外的所有其它项删掉。这对于改变根文件系统的环境很重要,改变之后的“passwd”文件会是象下面这样的:
root:x:0:0:root:/:/dev/null
ftpadmin:x:502:502::/ftpadmin/:/dev/null
编辑“group”文件(vi /home/ftp/etc/group),把除了“root”和允许使用ftp的用户之外的所有其它项删掉。改变之后的“group”文件会是象下面这样的:
root:x:0:root
ftpadmin:x:502:
配置
可以到这去下载“floppy.tgz”文件:http: //pages.infinit.net/lotus1/doc/opti/floppy.tgz。把“floppy.tgz”文件解开之后,可以在相应的目录下发现我们在这本书中介绍的所有软件的配置文件。这样就没有必要手工重新生成这些文件,或者用拷贝粘贴的方法把它们粘贴到配置文件中去。不管是打算自己动手生成配置文件还是拷贝现成的,你都要学会自己修改配置文件并且把配置文件拷贝到正确的目录下。下面将具体说明。
为了运行FTP服务器,必须创建或者把下面的文件拷贝到相应的目录下:
把“ftpAccess”文件拷贝到“/etc”目录下
把“ftpusers”文件拷贝到“/etc”目录下
把“ftphosts”文件拷贝到“/etc”目录下
把“ftpgroups”文件拷贝到“/etc”目录下
把“ftpconversion”文件拷贝到“/etc”目录下
把“ftp”文件拷贝到“/etc/pam.d”目录下
把“ftpd”文件拷贝到“/etc/logrotate.d”目录下
可以把“floppy.tgz”解压之后,找到上面列出来的文件,并拷贝到相应的目录下,或者用拷贝粘贴的方法从本书中直接粘贴出。
配置“/etc/ftpAccess”文件
“/etc/ftpAccess”文件是用来配置“ftpd”的。这个文件主要是设置允许哪个用户、多少用户访问ftp服务器,以及一些安全方面的问题。配置文件的每一行或者定义一个属性或者设定一个属性值,。对于非匿名的“chroot”访问,必须创建一些“guestgroup”,每一个都要对应“/home/ftp/etc/group”文件中的项。
创建ftpAccess文件(touch /etc/ftpaccess),在文件中加入:
class openarch guest 208.164.186.*
limit openarch 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg
email admin@openarch.com
loginfails 3
readme README* login
readme README* cwd=*
message /home/ftp/.welcome.msg login
message .message cwd=*
compress yes all
tar yes all
chmod yes guest
delete yes guest
overwrite yes guest
rename yes guest
log commands real,guest
log transfers real,guest inbound,outbound
guestgroup ftpadmin
guestgroup webmaster
# We don‘t want users being able to upload into these areas.
upload /home/ftp/* / no
upload /home/ftp/* /etc no
upload /home/ftp/* /dev no
# We‘ll prevent downloads with noretrieve.
noretrieve /home/ftp/etc
noretrieve /home/ftp/dev
log security real,guest
guest-root /home/ftp ftpadmin webmaster
restricted-uid ftpadmin webmaster
restricted-gid ftpadmin webmaster
greeting terse
Keepalive yes
noretrieve .notar
现在把文件的权限设成600:
[root@deep]# chmod 600 /etc/ftpAccess
下面解释配置文件中的设置:
class
“class”用来定义一个允许访问ftp服务器的用户类别。可以定义任意多的类别(class)。每一个“class”行的格式如下:
class <classname> <typelist> <addrglob>
<classname>是class的名字,<typelist>是允许加到类别(class)中的用户类型,<addrglob>是这个class允许的IP地址范围。
<typelist>中的项是用逗号隔开的,每一个项有三种可能的取值:anonymous、guest或real。anonymous用户是用 anonymous或ftp帐号访问ftp服务器而且只需要访问公用文件的那些用户。guest用户有一些特殊因为他们在系统中没有帐号,但是却又是 guest组的成员。real用户必须在Ftp服务器上有帐号,而且需要经过服务器的安全验证。
<addrglob>可以用通配符,例如:“*”表示所有的站点。下面这一行:
class openarch guest 208.164.186.*
表示只有在系统中有自己帐号的guest用户而且IP地址为“208.164.186.*”才能访问ftp服务器。
limit
“limit”根据class和时间范围来限制登录ftp服务器的用户数。“limit”的格式是:
limit <class> <n> <times> <message_file>
其中<class>是受限制的类别(class),<n>表示在这个类别中受到限制的最多用户数,<times>表示“limit”有效的时间段,<message_file>是当达到最大的用户数目的时候,别的用户还想登录时显示的信息。
<times>中的字符串用逗号隔开,每一个字串表示一天。星期一到星期日分别用Mo、Tu、We、Th、Fr、Sa和Su表示,周末也可以用Wk表示。表示时间的小时和分钟之间不要用冒号隔开。“-”用来表示范围。
例如,限制“openarch”这个类别,最多可以有20个用户,访问时间是星期一道星期四全天,星期五从半夜到下午六点。用下面这一行来表示: limit openarch 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg
如果一旦达到最大的用户数,还有别的用户想连接ftp服务器,就会把“/home/ftp/.too_mang.msg”中的信息传给用户。
loginfails
“loginfails”设置最多允许的登录失败的次数。可以用下面这一行来表示:
loginfails <n>
<n>表示最多允许的登录失败的次数。例如,只允许失败两次可以这样表示:
loginfails 3
readme
“readme”设置在什么条件下,一旦当前目录中的文件发生了变化需要提醒用户。
这个命令的格式为:
readme <path> <when>
<path>是用来提醒用户的文件的名字(例如:README),<when>设置出现这个提示信息的条件。
<when>可以为下面两种形式:LOGIN或CWD=<dir>。如果为LOGIN,当用户成功登录的时候就会出现提示信息。如果为CWD=<dir>,当用户进入<dir>目录的时候就会有提示信息。
请记住当给匿名(anonymous)用户设置提示信息的路径的时候,这个路径必须是相对于匿名ftp目录
.分页: [1] [2]
TAG: LINUX FTP