内容摘要:
本文介绍系统安全防护策略,让系统管理员借以阻绝入侵者。针对不同的Linux系统,讨论一些改善方式。
导读
不少人开始广泛谈论入侵网路主机的话题,而Linux与FreeBSD 则成为近日主要的攻击对象,包括像 imapd与BIND 程式里的buffer overflow 问题。每天,各式各样的「系统漏洞」,都会在 BUGTRAQ 邮递论坛中宣布,此一邮递论坛已有将近 20,000 位订阅者。( 若是您只想订阅一份系统安全相关的邮递论坛,那麽这个不容错过 )。
假设上述的19,305 位订阅者当中,有至少一位打算写个 for() 回圈,配合公开的系统漏洞攻击程式,藉以快速取得网路上主机的控制权... 事实上这样的假设并不为过。
如此一来,您的电脑早晚会成为下一个遭受攻击的目标,到时候,您可能就措手不及了。
或许有些「专家」已经让您以为,安装及维护一部安全的电脑,有如「太空科学」般地复杂,事实上没那麽难啦。拥有一套完善而健全的系统管理措施,才能保障您免於来自全球网路的威胁,而本文讨论的便是,我在规画 Red Hat Linux 网路系统时,一般会采取的预防措施。虽然文中提供了保障系统安全的指引,但它绝不是一份完整的参考说明。
下列的步骤,用意在使您的系统,不要成为网路程式安全漏洞公开後的受害者。请特别注意: 如果您不确定清楚自己在做什麽,那麽就别动手。有些步骤是假设,您已经具备程度之上的相关知识。文末另外还附上一些建议的参考读物。
系统安全之实作步骤
1. 将系统中所有没必要的网路服务全部移除。可以连到您电脑的方式越少,表示入侵者恶闯的途径越少。把 /etc/inetd.conf 档案中,所有不需要的项目都加注取消,如果系统并不需要 telnet,那就将它取消,诸如 ftpd、rshd、rexecd、gopher、chargen、echo、pop3d 等,也是同样的处理原则。改完 inetd.conf 档案後,别忘了要做个 'killall -HUP inetd' 动作。另外,也别忽略 /etc/rc.d/init.d 目录里的东西,有些网路服务 ( 像 BIND、印表机伺服程式 )是独自执行的程式,透过目录里的命令稿来启动。
2. 安装 SSH。SSH是一个用来取代 'r'系列指令的程式,原本那些 Berkeley 版本的程式已经老旧了。Ssh (Secure Shell)是一个用来登入网路主机、在远端主机上执行指令、或是在两台主机间搬移档案的程式。它提供了强大的认证功能,并确保能够在网路上进行安全的资料通讯。它额外还能够处理一些事情,可能会是有心钻研之高手所感兴趣的。请由 http://ftp.rge.com/pub/ssh 下载 SSH 程式。
3. 使用 vipw(1) 把所有不淮登入的帐号全都锁起来。值得注意的是,那些没有指定 login shell 的帐号,Red Hat Linux 会预设将它们指定为 /bin/sh,这种情况可能不是你所期望的。同时要确定,您的使用者帐号中没有把密码栏给空下来,下列是一个正常之密码档案的部份内容:daemon:*:2:2:daemon:/sbin:/bin/sync
adm:*:3:4:adm:/var/adm:/bin/sync
lp:*:4:7:lp:/var/spool/lpd:/bin/sync
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/bin:/sync
halt:*:7:0:halt:/sbin:/bin:/sync
mail:*:8:12:mail:/var/spool/mail:/bin/sync
news:*:9:13:news:/var/spool/news:/bin/sync
uucp:*:10:14:uucp:/var/spool/uucp:/bin/sync
operator:*:11:0:operator:/root:/bin/sync
games:*:12:100:games:/usr/games:/bin/sync
gopher:*:13:30:gopher:/usr/lib/gopher-data:/bin/sync
ftp:*:14:50:FTP User:/home/ftp:/bin/sync
nobody:*:99:99:Nobody:/:/bin/sync
4. 移除所有 root 所拥有之程式的's' 位元权限,如果它根本不需要这样的权限。这个动作可以由 'chmod a-s' 指令完成,後面接的参数,便是您要改的档名。
上述所提之程式包括以下各类,但不限于此,您从来不会去使用的程式; 您不希望 root 之外的使用者会去执行的程式 偶而会用,但以 su(1) 变成 root 再去执行,也无所谓的程式;我把自己会取消权限的程式列在下面,并在前面放了星号 (*)。记住,由於您的系统仍然需要一些 suid root 的程式,才能正常地执行,因此要特别地小心。
另一种方式,您可以建立一个叫做 'suidexec' 的特殊群组名称,然後将可信赖的使用者帐号设在里面,使用 chgrp(1) 指令将所有 suid 的程式改成属於 suidexec 此一群组,并将其他使用者可以执行的权限除掉。# find / -user root -perm "-u+s"
*/bin/ping
*/bin/mount -- 应该只有 root 才可以挂上档案系统
*/bin/umount -- 同上
/bin/su -- 别乱改它啊!
/bin/login
/sbin/pwdb_chkpwd
*/sbin/cardctl -- PCMCIA 卡的控制工具程式
*/usr/bin/rcp -- 改用 ssh
*/usr/bin/rlogin -- 同上
*/usr/bin/rsh -- "
*/usr/bin/at -- 改用 cron,或两者都停用
*/usr/bin/lpq -- 改装 LPRNG
*/usr/bin/lpr -- "
*/usr/bin/lprm -- "
*/usr/bin/mh/inc
*/usr/bin/mh/msgchk
/usr/bin/passwd -- 别乱改它啊!
*/usr/bin/suidperl -- 每个新版的suidperl 好像都有
buffer overflow 的问题
*/usr/bin/sperl5.003 -- 只有必要时才用它
/usr/bin/procmail --
*/usr/bin/chfn
*/usr/bin/chsh
*/usr/bin/newgrp
*/usr/bin/crontab
*/usr/X11R6/bin/dga -- X11 里也有许多 buffer overflow 的问题
*/usr/X11R6/bin/xterm -- "
*/usr/X11R6/bin/XF86_SVGA -- "
*/usr/sbin/usernetctl
/usr/sbin/sendmail
*/usr/sbin/traceroute -- 您应该可以忍受偶而打一下 root 密码吧