76 FreeBSD连载:设置基本系统( 八 )


然后向新的文件系统中复制相应的文件、建立相关的设备 。如果是动态连接的程序,还需要考虑复制/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下的日志文件,了解系统中这些程序文件的更改情况 。
实际上很多SetUID程序不会被使用的,例如很少有人使用uucp,如果使用的是局域网也很少使用ppp和pppd,因此对于这些不常用到的SetUID程序,应该取消其SetUID位,甚至取消执行属性,以避免用户来执行它 。
为了避免不必要的SetUID程序,一个办法是可以在安装一个文件系统时就设定不承认这个文件系统中的SetUID程序 。安装文件系统时可以使用nosuid选项,就能让文件属性中的SetUID和SetGID位失效 。因此为了利用这个优点,可以创建使用使用nosuid位的/home文件系统,让所有的用户使用,而其他可以存在SetUID程序的文件系统,如/usr,则不允许用户写入 。同样也要创建一个/var/tmp文件系统,将系统的/tmp目录指向这个目录,/var/tmp也应该是nosuid的,以避免用户在/tmp目录中保存SetUID程序 。其他的文件系统,如使用NFS装载的文件系统,也要使用nosuid安装选项 。
划分多个磁盘分区、安装到不同目录上也能防止入侵者企图填满磁盘空间的阻塞攻击 。同样,对于用户使用的磁盘文件系统,应该使用qutoa来限制用户个人占用的磁盘空间 。
这个nosuid安全选项应该加入到/etc/fstab文件中,一使得每次都能生效 。需要注意的是nosuid安装选项不能影响一些解释性语言程序的这个属性,如perl程序,当解释性语言程序具备SetUID属性,语言解释器为其设置身份,由于真正的setuid()调用是由语言解释器执行的,因此如果语言解释器具备root权限(具备SetUID属性),那么就能使解释器将具备SetUID位的程序设置入root权限 。这不是系统的问题,而是语言解释器的问题,屏蔽语言解释器本身的SetUID属性可以避免这个问题 。
当系统作为NFS服务器,设置共享出去的NFS文件系统时,应该使用maproot或mapall参数,以便隔离危险,使得即使在远程系统被侵入的情况下,防止从这个允许安装文件系统的客户上对本机的入侵 。还可以考虑使用安全的NFS协议,使用DES算法进行服务器和客户机的认证 。如果系统不使用NFS及其他RPC服务时,最好屏蔽相关的选项,如portmap_enable选项 。

推荐阅读