LPI Linux 认证/保护 FTP 服务器
(LPIC-2 版本 4.5)
权重 2
描述: 候选人应该能够为匿名下载和上传配置 FTP 服务器。此目标包括允许匿名上传时应采取的预防措施,以及配置用户访问权限。
关键知识领域
- Pure-FTPd 和 vsftpd 的配置文件、工具和实用程序。
- 了解 ProFTPd。
- 了解被动 vs. 主动 FTP 连接
术语和实用程序
vsftpd.conf
- 重要的 Pure-FTPd 命令行选项
描述:候选人应该能够配置一个匿名下载 FTP 服务器。此目标包括配置 FTP 服务器以允许匿名上传,列出允许匿名上传时应采取的其他预防措施,配置具有 chroot 限制的访客用户和组,以及配置 ftpaccess 以拒绝对命名用户或组的访问。
关键文件、术语和实用程序包括
ftpaccess, ftpusers, ftpgroups /etc/passwd chroot
保护 FTP 服务器将包括
- FTP 警告横幅自定义
- FTP 问候横幅自定义
- 保护、拒绝和限制用户帐户
- 保护匿名访问
- 保护匿名上传
文件传输协议 (FTP) 是一种较旧的 TCP 协议,旨在通过网络传输文件。由于所有与服务器的交易(包括用户身份验证)都是未加密的,因此它被认为是一种不安全的协议,应仔细配置。
我们将重点介绍华盛顿大学的 wu-ftpd FTP 服务器
Wu-ftpd 的主要配置文件位于 /etc:ftpusers、ftpaccess 和 ftpconversions。ftpusers 文件包含所有不允许登录到 FTP 服务器的用户列表。正如你所想,用户 root 应该列在这里。你还应该确保其他特殊用户帐户(如 lp、shutdown、mail 等)也包含在这里。
ftpaccess 文件用于配置安全、用户定义等问题。它实际上是通用配置文件。你可以在此处设置的一些有趣的设置是:loginfails [数字]
where number is a number that stands for the amount of times that a user is allowed to fail to authenticate before being totally disabled.
shutdown [文件名]
where filename is the name of a file that, if it exists, automatically shuts down the FTP server without a need to actually close the port in the /etc/inetd.conf file and then restarting inetd.
最后,ftpconversions 文件用于允许客户端对文件进行特殊的“实时”转换,例如自动解压缩下载的文件
在 FTP 客户端连接时返回自定义横幅是个好主意,因为它有助于隐藏 FTP 服务器运行的系统类型。可以使用 TCP 包装器或以下描述的方法将横幅发送到传入连接。
在它的配置文件 /etc/ftpaccess 中添加以下行:banner /etc/banners/warning.msg
横幅文件的内容应该类似于:Hello, all activity on ftp.example.com is logged.
登录后,所有用户都会看到问候横幅。默认情况下,此横幅包含版本信息,这对尝试识别系统漏洞的攻击者很有用。要更改 wu-ftpd 的问候横幅,请将以下指令添加到 /etc/ftpusers:greeting text <insert_greeting_here> 保护 FTP 服务器
由于 FTP 通过不安全的网络传递未加密的用户名和密码进行身份验证,因此最好拒绝系统用户从其用户帐户访问服务器。要在 wu-ftpd 中禁用用户帐户,请将以下指令添加到 /etc/ftpusers:deny-uid * 要在 wu-ftpd 中禁用特定用户帐户,请将用户名添加到 /etc/ftpusers
设置匿名 FTP 的最佳方法是配置一个 chroot 限制:不要允许完全访问系统,这将限制对给定目录的访问。换句话说,匿名用户登录系统后,只能访问用户 ftp 的主目录,其他任何地方都无法访问。如果她输入 cd /,在大多数其他情况下应该将她带到系统的根目录,它只会将她带到 /home/ftp(很可能是用户 ftp 的默认主目录)。
大多数发行版(如 RedHat)提供一个匿名 ftp 包,以帮助准备 chroot 限制。重要的是,你的严格 FTP 用户在 Linux 系统上没有真正的 shell 帐户。这样,如果有人设法成功地从 FTP chrooted 环境中退出(有关定义,请参见下文),由于没有 bash shell,因此它将无法执行任何用户任务。首先,为该目的创建新用户。由于 chroot 环境的工作方式,这必须独立于具有无限访问权限的常规用户帐户。Chroot 使它从用户的角度看起来好像你放置他们的文件系统级别是文件系统的顶层。
用 /dev/null 作为 shell 设置这些新用户,并在允许的 shell 列表 /etc/shells 中添加 /dev/null。还要确保在 /etc/passwd 中,他们的主目录列为 /home/./ftp(对于用户 ftp),即使真实目录是 /home/ftp
设置一个 chroot 用户环境:你实际上是在创建骨架根文件系统,其中包含必要的组件、二进制文件、密码文件等,以允许 Unix 在用户登录时执行 chroot。请注意,wu-ftpd 可能会使用 --enable-ls 选项进行编译,在这种情况下,/home/ftp/bin 和 /home/ftp/lib 目录不是必需的,因为这个新选项允许 Wu-ftpd 使用它自己的 ls 函数。我们仍然继续展示旧方法,为那些喜欢将 /bin/ls 复制到 chroot 的 FTP 目录 /home/ftp/bin 并创建相关的库工具的人提供帮助。以下是在 chroot 限制中运行 Wu-ftpd 软件所需的步骤:首先创建所有必要的 chroot 环境目录
[root@deep ] /# mkdir /home/ftp/dev [root@deep ] /# mkdir /home/ftp/etc [root@deep ] /# mkdir /home/ftp/bin [root@deep ] /# mkdir /home/ftp/lib
将新目录的权限更改为 0511 以确保安全:chmod 命令将使我们的 chroot dev、etc、bin 和 lib 目录对超级用户 root 可读可执行,并对用户组和所有用户可执行
[root@deep ] /# chmod 0511 /home/ftp/dev/ [root@deep ] /# chmod 0511 /home/ftp/etc/ [root@deep ] /# chmod 0511 /home/ftp/bin [root@deep ] /# chmod 0511 /home/ftp/lib
将 /bin/ls 二进制文件复制到 /home/ftp/bin 目录,并将 ls 程序的权限更改为 0111。你不想让用户能够修改二进制文件
[root@deep ] /# cp /bin/ls /home/ftp/bin [root@deep ] /# chmod 0111 /bin/ls /home/ftp/bin/ls
查找 ls Linux 二进制程序的共享库依赖项:
[root@deep ] /# ldd /bin/ls libc.so.6 => /lib/libc.so.6 (0x00125000) /lib/ld-linux.so.2 =7gt; /lib/ld-linux.so.2 (0x00110000)
将上面识别的共享库复制到 /home/ftp 目录下的新 lib 目录
[root@deep ] /# cp /lib/libc.so.6 /home/ftp/lib/ [root@deep ] /# cp /lib/ld-linux.so.2 /home/ftp/lib/
创建你的 /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 目录。它不应该是你真实文件系统的 group 和 passwd 文件。为此,我们将在这两个文件中(passwd 和 group)删除除超级用户 root 之外的所有非 FTP 用户。
编辑 passwd 文件,vi /home/ftp/etc/passwd 并删除除超级用户 root 和你允许的 FTP 用户之外的所有条目。修改后的 chroot 环境 passwd 文件中的条目非常重要,如下所示
root:x:0:0:root:/:/dev/null ftpadmin:x:502:502::/ftpadmin/:/dev/null
(在这里注意两点:首先,此修改后的 passwd 文件中所有用户的 home 目录现在都已更改,以反映新的 chroot FTP 目录,即 /home/ftp/./ftpadmin/ 开始于 /ftpadmin/,另外,root 帐户的用户登录 shell 的名称已更改为 /dev/null) 编辑 group 文件,vi /home/ftp/etc/group 并删除除超级用户 root 和所有你允许的 FTP 用户之外的所有条目。group 文件应该与你的正常 group 文件相对应
root:x:0:root ftpadmin:x:502:
现在我们必须将 chroot 限制目录中的 passwd 和 group 文件设置为不可变,以提高安全性。
[root@deep ] /# cd /home/ftp/etc/ [root@deep ] /# chattr +i passwd
在 group 文件上设置不可变位
[root@deep ] /# cd /home/ftp/etc/ [root@deep ] /# chattr +i group
通过创建 /etc/pam.d/ftp 文件并添加以下行,配置你的 /etc/pam.d/ftp 文件以使用 pam 身份验证
#%PAM-1.0 auth required /lib/security/pam_listfile.so item=user sense=deny \ file=/etc/ftpusers onerr=succeed auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_shells.so account required /lib/security/pam_pwdb.so session required /lib/security/pam_pwdb.so
如果您想允许匿名用户上传,建议您在 /var/ftp/pub/ 中创建一个只写目录。为此,请键入以下命令:
mkdir /var/ftp/pub/upload
接下来,更改权限,以便匿名用户无法看到目录中的内容,请键入以下命令:
chmod 744 /var/ftp/pub/upload
目录的详细信息列表应如下所示:
drwxr--r-- 2 root ftp 4096 Aug 20 18:26 upload