5.修改配置文件服务器
ProFTPD使用的配置文件和Apache类似:
单线指令:ServerName 和 ServerType
多线容器指令:<Directory>和 <Limit>
如果以前配置过Apache的话,会很容易掌握。Proftpd服务器配置文件etc/Proftpd.conf中的许多选项可以加固服务器。
(1)通过IP地址限制FTP访问
假设要允许主机名称myhost.domain.com访问FTP服务器,首先使用命令:
Ping myhost.domain.com
假设等到IP地址是:216.112.169.138。下面修改配置文件,加入以下内容:
<Limit LOGIN>
Order Allow, Deny
Allow from 216.112.169.138
Deny from all
</Limit>
注意不要在Allow命令后直接使用主机名称,因为检查主机名称会降低服务器的运行速度。另外主机名称比IP地址更具有欺骗性。如果myhost.domain.com没有固定IP地址,主机用户在下一次从ISP获得一个IP地址时就无法和FTP服务器连接。这时必须给整个网络授予FTP访问的权限。命令如下:“Allow from 216.112.169.” 。
(2)使用PAM作为ProFTPD授权用户的鉴别方法
ProFTPD可以加入嵌入式认证模块,成为PAM-aware的FTP服务器。PAM全称:Pluggable Authentication Module (嵌入式认证模块)。它最初有SUN公司开发;很快被Linux社区的接受,并且开发了更多的模块。其目标是提供一套可用于验证用户身份的函数库,从而将认证从应用程序开发中独立出来。Linux-PAM处理四种独立的(管理)工作。它们是: 认证管理; 帐号管理; 会话期间管理;和密码管理。
PAM工作方式:
(1) 调用某个应用程序,以得到该程序的服务。
(2) PAM应用程序调用后台的PAM库进行认证工作。
(3) PAM库在/etc/pam.d/目录中查找有关应用程序细节的配置文件,该文件告诉PAM,本应用程序使用何种认证机制。
(4) PAM库装载所需的认证模块。
(5) 这些模块可以让PAM与应用程序中的会话函数进行通信。
(6) 会话函数向用户要求有关信息。
(7) 用户对这些要求做出回应,提供所需信息。
(8) PAM认证模块通过PAM库将认证信息提供给应用程序。
(9) 认证完成后,应用程序做出两种选择:
*将所需权限赋予用户,并通知用户。
*认证失败,并通知用户。PAM工作流程见图8。
图8 PAM工作流程 |
下面手工建立一个/etc/pam.d/ftp文件包括以下内容:
%PAM-1.0
auth required /lib/security/pam_listfile.so item=user \
sense=deny file=/etc/ftpusers onerr=succeed
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_shells.so
account required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
然后在配置文件/etc/Proftpd.conf加入两行:
AuthPAMAuthoritative on
AuthPAMConfig ftp
这样ProFTPD服务器会自动把/etc/pam.d/ftp配置用于用户授权。这样用户连接到ProFTPD服务器时都由PAM使用/etc/pam.d/ftp文件进行认证。
(3)对FTP用户使用chroot限制
Unix(以及类Unix)操作系统提供了一种功能,让用户在重新映射的根文件系统中执行进程。chroot(更改根目录)命令会将根(/)文件系统的重新映射转换成相对于当前根目录的指定目录,然后在新的根目录下执行指定的命令。ProFTPD服务器要限制普通FTP用户可以访问的目录,配置很简单,如果限制skate组的skate用户登录时不能切换到其他目录,修改配置文件加入一行:
DefaultRoot ~ skate,skate
这样他只能呆在自己的home目录中。警告: 正如在真实生活中一样,没有监牢是不可攻破的。使用网络常驻程序中任何已知的弱点,恶意的用户可以上载并执行刻意编制的程序代码,促使系统核心允许他们冲破chroot,因而能够追踪其他不属于已更换根目录环境的进程,或者以你不会喜欢的方式来利用可用的设备。在chroot监牢中执行不安全的常驻程序可挡住大多数利用该常驻程序来侵入服务器计算机的举动。不过,你不能企望chroot能让服务器完全安全!务必遵守其他步骤。
(4)限制FTP命令特权
*禁止一些用户创建和删除目录的特权
如果发现一些用户有威胁行为,可以把他放在一个特定组中(badusers)使用如下的配置:
<Directory /*>
<Limit MKD RMD>
Order deny,allow
DenyGroup badusers
AllowAll
</Limit>
</Directory>
这样除了那个特定的用户组之外,其他用户可以创建和删除目录。
*建立只能上载的FTP服务器
如果要建立一个只能上载的FTP服务器,在主服务器或者虚拟主容器中使用如下配置:
<Directory /*>
<Limit RETE>
DenyAll
</Limit>
</Directory>
*限制对单个目录的访问。
<Directory /*>
<Limit CWD>
DenyAll
</Limit>
</Directory>
这样相应的FTP用户就不能更改目录。如果使用DenyGroup groupname代替DenyAll ,将配置范围限定在/etc/group文件中定义的groupname用户组中。
*限制目录浏览特权
<Directory /my/mp3s>
<Limit DIRS>
DenyGroup newfriends
</Limit>
</Directory>
以上配置可以限制/my/mp3s目录中名为newfriends组的目录浏览特权。这样可以防止他得到/my/mp3s目录的列表。
(5)控制FTP命令缓冲区大小
许多黑客通过发送一个大尺寸的命令攻击FTP服务器,希望造成服务器缓冲区溢出。可以在使用CommandBufferSize命令可以限制客户端命令长度。通常设定为512。
(6)修改ProFTPD服务器使用端口
ProFTP如果使用Stand-alone模式,可以通过设置proftpd.conf来控制它。使用不同端口的设置也较为简单,只需在proftpd.conf中将“Port xx”改为需要的值即可。
(7)使不同用户之间相互隔离
一些用户通常访问ISP的FTP服务器时,会看到一些不应当的系统信息,因此隐藏这些信息是必要的,下面是一个配置:
DefaultRoot “/www”
<Directory /www>
HideNoAccess on
<Limit ALL>
IgnoreHidden on
</Limit>
</Directory>
HideNoAccess指令将用户隐藏/www 目录下的所有条目,IgnoreHidden指令指示ProFTPD 服务器忽略用户所有指令。
(8)简化配置文件
对于初学者来说看到大量的配置文件和注释时反到会感到不知所措。如果/etc/group 中定义了一个novices的组,希望组用户可以在 /ftp/download目录中上传和下载,可以如下配置proftpd.conf :
<Directory /ftp/download>
<Limit READ>
AllowGroup novices
</Limit>
<Limit WRITE>
DenyGroup novices
</Limit>
</Directory>
<Directory /ftp/upload>
<Limit READ>
DenyGroup novices
</Limit>
<Limit WRITE>
AllowGroup novices
</Limit>
</Directory>