扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
如果需要启动ftp服务,虽然在inetd.conf中启动ftpd已经使用了-l参数,使ftpd将日志记录发送给syslogd,但是还需要配置 syslogd才能接收ftpd发送的记录。如果/etc/syslog.conf 文件中没有下面的设置行用于记录ftp的日志,请修改syslog.conf加入。
ftp.* /var/log/ftpd
然后还需要执行下列命令,使得syslogd重新启动,使其能开始记录下ftpd发送的记录信息。
# touch /var/log/ftpd# killall -HUP syslogd
ftp对访问进行了种种限制,这些限制对于网络安全都是非常重要的,当用户的shell不在/etc/shells 中的时候,ftp拒绝提供服务,当用户的用户名位于/etc/ftpusers文件中时,或者是/etc/ftpusers 中记录的组的成员,ftp同样也拒绝提供服务,这样就对使用ftp的用户进行了限制,尤其对于安全敏感的用户。如果/var/run/nologin文件存在时,ftp将拒绝一切用户访问。
ftp认证是通过标准认证过程进行的,因此也可以使用S/key等安全认证的方式。同样,/etc/ftphosts 可以设置对来自不同位置的主机访问ftp服务的限制。
很多情况下需要FreeBSD服务器提供匿名ftp服务功能,如果此时普通用户能通过更安全的方法访问系统,就应该屏蔽普通用户使用ftp服务的权力,而只允许匿名ftp,可以使用-A选项启动ftp服务器,此时ftp将拒绝正常用户登录,避免ftp服务器出现安全问题的可能性及减少安全问题的影响。当使用-S选项时,ftp将所有匿名访问的传输日志也记录在/var/log/ftpd文件中。这两个选项对于提供匿名ftp服务非常有用。对于提供匿名 ftp 的服务器,还可以不再使用FreeBSD提供的ftpd服务器,而使用wuftpd或ncftpd等其他种类的ftp 服务器,同样也需要针对这些服务器设置其安全性。
* 改变程序的根文件系统
当不得不提供一些服务的时候,为了增加安全性,可以考虑提供chroot的服务。chroot意味着改变运行程序的根文件系统,当一个程序运行在 chroot的环境下时,它所了解的文件系统只是chroot设置给它的某级目录开始,它就不能访问这个目录之外文件系统中的内容,使得即使这个程序出现安全问题,也不会影响文件系统中的其他重要数据的安全性。显然不是每种服务都适合这种形式,有的服务提供访问的文件资源不固定在某个目录下,就不能使用这个形式。
由于设置一个服务程序使用chroot的时候,它就以为给它指定的目录就是它的根目录,因此它无论访问哪个文件,都将在相对的目录中查找,包括它要访问的重要系统文件。这样就必须为这个chroot程序建立一个小的,但完全满足其要求的系统目录结构,这个目录将和系统目录结构类似,也具有/etc/、/usr/、/var/、/dev/、/tmp/、/usr/lib/ 等等,并具备应用程序要访问的相应文件。
如果程序是动态连接的,就需要/usr/lib目录中存在动态连接库,应用程序还可能会访问/etc目录下的配置文件,/dev目录下的设备文件,以及其他可能的文件。必须在应用程序的新的根目录下设置所有必须的目录结构和复制需要访问的文件。当然文件内容可以是系统原来文件的一个子集,而非原有的整个文件,以尽可能的保障安全。例如服务程序要访问的passwd文件只是系统passwd文件的一部分,等等。
当chroot的程序需要访问某个用户的口令数据时,就需要将/etc/passwd文件中有关这个用户的内容复制到用户chroot目录下etc子目录下,然而口令文件并不止 passwd一个文件,将包括master.passwd,pwd.db 及spwd.db。由于pwd.db和spwd.db使用了数据库形式,就使得复制部分用户数据变得比较困难。
改变根文件系统的服务程序有两种类型,一种为本身不具备改变根文件系统的能力,但由于不访问过多的文件,能使用系统的chroot命令来启动程序,使其运行在某个目录下。另一种类型为程序本身就支持这个能力,这样就不需要使用手工使用chroot命令,系统在特定条件下或使用一定参数启动时就自动进行chroot操作。然而这些类型进行目录设置时需要进行的操作是相同的。而要设置网络服务所使用的文件环境,就要对该服务程序有详细的了解,这才是最为困难的问题。
这里以配置改变根文件系统的namd为例,简介设置改变根文件系统的网络服务的步骤,这个设置步骤的原始文档为http://www.psionic.com/papers/dns.html(这个适用于OpenBSD和Fr eeBSD,没有使用Ports Collection,但给了较详细的解释),和http: //www.antisocial.net/~modred/papers/named.html (使用了FreeBSD的Ports Collection,给出了详细的步骤)。以下只着重介绍操作过程,并没有详细给出操作步骤,需要设置chroot named的使用者可以参阅这些相关网页的内容。
# 编译静态连接的named和namd-xfer,这需要增加编译连接标志-static,重新编译bind8 软件。这个过程也可以使用Ports Collecion来完成,然而要注意的是使用Ports Collection 编译的named和直接编译的named对目录结构的处理有所不同,这将影响后面建立目录结构的处理过程。使用静态连接的执行程序的好处是不必考虑为 chroot环境复制对应的动态连接库,简化了chroot文件系统设置。
# 建立chroot目录结构,首先在根目录下建立/chroot/named目录,作为这个服务的根目录,然后在这个目录中建立dev,etc,etc/namedb,usr,usr/libexec, var, var/run等目录,注意这些目录结构是与应用软件中的设置相关的,如果使用Ports Collection 定制的named和named-xfer,它使用目录结构是与Bind8的缺省设置不同的,需要建立/usr/local/libexec 而非/usr/libexec目录。
# 然后向新的文件系统中复制相应的文件、建立相关的设备。如果是动态连接的程序,还需要考虑复制/usr/lib下的动态连接库和相关的ld程序。可以通过 ldd命令查询程序需要的动态连接库。然而增加文件就降低了系统安全性,因此一般应该使用静态连接的程序,新的环境中应具备尽可能少的文件。
# 设置环境,包括增加程序执行的用户和组,目录结构的属主和权限设置等等。可以为named 添加用户named和组named。
# 手工执行chroot的named,执行命令为”/chroot/named -unamed -g named -t /chroot/named” ,-t参数指出named应该使用/chroot/named作根目录执行chroot操作,一切正确之后,再更改启动脚本。
# 更改启动脚本,屏蔽原有的named的执行权限,使得新named成为系统的网络服务程序,并设置正确的启动参数。
* 用户相关的安全问题
系统管理员有时也不希望用户占用太多的系统资源,在有些Unix系统中入侵者能通过普通帐户,启动大量的进程或产生大量的文件,从而使系统死掉或不能提供正常操作,而FreeBSD下则不必有此担忧,因为可以通过login.conf 和用户的口令数据来设置用户类别,限制用户对系统资源的占用,同样占用的硬盘资源可以通过quota来限制。
at和cron机制能帮助用户自动启动应用程序和服务进程,如果必要,可以屏蔽用户使用at和cron的权限。也要注意检查root用户的at和cron设置,这里也是入侵者可能用于设置后门程序的一个位置。
系统中,除了服务进程可能具备root身份之外,再就是具备SetUID身份的程序能进入root身份。由于 SetUID和SetGID与系统安全息息相关,因此系统中也应该具备尽量少的SetUID和SetGID程序。要不定期使用find命令查找,或者检查 /var/log下的日志文件,了解系统中这些程序文件的更改情况。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。