📄 00000030.htm
字号:
<BR># touch /boot.config <BR># chflags schg /boot.config <BR> <BR> 你可以看看系统预设还有那些执行档是有 schg flag 的。 <BR> <BR># ls -lo /sbin | grep schg <BR>-r-x------ 1 bin bin schg 204800 Jul 19 20:38 init <BR># ls -lo /bin | grep schg <BR>-r-sr-xr-x 1 root bin schg 192512 Jul 19 20:36 rcp <BR> <BR> 再回过头来谈谈锁定系统这件事吧! 既然刚刚谈到了 immutable flags, 何不试着把整 <BR> 个 /sbin 和 /bin 都设成 schg flag 呢 !? 这会给想 crack你系统的人一点小挫折。 <BR> (假设你的系统也正以适当的 securelevel 运作中) <BR> <BR># chflags schg /bin/* <BR># chflags schg /sbin/* <BR> <BR> 不过 /sbin 可能被改成别的名字,再重新创造一份新的 /sbin ,所以改变 /sbin 与 <BR> /bin 的 schg flag 是很合理的想法,我们可以依照以下的方式改变 /sbin 和 /bin <BR> 的 schg flag: <BR> <BR># chflags schg /bin/* <BR># chflags schg /sbin/* <BR> <BR> 这些 schg flag 的档案会让你在 "make world" 时有问题。 <BR> ("make installworld" 也是) <BR> <BR> 无论如何 ,最好是以 single user 模式来 "make world"。有关 "makr world" 的相 <BR> 资讯, 还有为什麽要这麽做, 到下面这个网页来看看: <BR> <BR><A HREF="http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html">http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html</A> <BR> <BR> 现在你已经适当的锁定你的系统, 也以只跑必要的的 service, 而档案系统也适当的 <BR> mount 上来, 且也以适合的 kernel securelevel 运作中。 <BR> 与以上所述的相关 man pages 有: init(8), chflags(1), sysctl(8)。 <BR> <BR>o Logging <BR> <BR> 系统纪录是很重要的。如果你的统被人攻击, 透过它你可以找到一些蛛丝马迹。Unix的 <BR> 标准 log 动作是透过 syslogd(8) 来达成的。它从 /etc/rc 中被启动, 一直执行到系 <BR> 统关机为止。你可以用以下的方式确定你的系统上是否正在执行 syslogd: <BR> <BR> $ ps -axu | grep syslogd <BR> <BR> Syslogd 会在启动时读取 /etc/syslogd.conf。这个档案很重要, 因为它告诉 syslogd <BR> 要纪录那些东西, 而这些东西又该放在那里。你也许想看看 syslod 和 syslod.conf <BR> 的 man pages: <BR> <BR> $ man syslogd ; man 5 syslog.conf <BR> <BR> 既然 Unix 当初就是设计作为网路作业系统, syslogd 可以而且预设值也接受其它系统 <BR> 的纪录。它自己也是可以把纪录透过网路送到其它的电脑去。想当然耳, 它可以纪录下 <BR> 自己系统发生的每件事 - 而这也正是预设值。因为 syslogd 使用 UDP - 所以资料是 <BR> 可以被伪造的。你至少可以作一件事: 不要让你的 syslogd 接受来自其它电脑的纪录 <BR> 讯息。在 /etc/rc.conf 加个 "-s" 就可以了: <BR> <BR> syslogd_flags="-s" # Flags to syslogd (if enabled). <BR> <BR> 如果你有接受特定机器之纪录的必要 (像是你的 router, 或是 web server), 使用 <BR> "-a" 来指定特定的 hosts, domains, 或 subnets。 <BR> 下次你重新启动你的系统时, syslogd便会拒绝来自其它地方的纪录讯息。如果有人尝 <BR> 试送资料进来, syslogd 将会加以纪录。 <BR> <BR> 如果你不想重新启动你的系统, 那麽只要把 syslogd kill -9, 然後再以 root 的身份 <BR> 启动 syslogd 便可以了。记得加上 "-s"这个叁数。 <BR> 如果有人尝试攻击你的系统而且失败了, 你的系统纪录便不会被伪造。但如果你的系统 <BR> 己经被攻陷了, 而且 /var/log 整个被干掉了呢 !?还是有方法可以防止的。 其一便是 <BR> 在你的网路系统中再架一台机器拿来纪录整个网路中发生的事, 而且也不要再干其它的 <BR> 事了。除了 UDP port 514 之外, 其它的也都不用再开了。这样子一来你便可以纪录下 <BR> 所有机器 (routers, firewalls, serves, workstations) 发生的所有事。你可以只送 <BR> 敏感的讯息给它, 或者任何你觉得重要的。这台机器可以是老旧 486, 但有颗大大的硬 <BR> 碟。记得要设定好正确的 "-a" 选项, 免得搞出没收到纪录的乌龙事。你也可以接台老 <BR> 旧的点阵印表机给它, 以印出敏感的事件(像是失败的登入尝试)。如果你把系统纪录印 <BR> 到纸上, 一位攻击者要清除它是很困难的(除非有内奸, 哈哈!)。还有其它的方法,例如 <BR> 透过 serial port (cuaaN) 或是 parallel port (lpN) 送出纪录到别台机器上。 <BR> <BR> 每个人都有不同的记录需求。但是有一件事我通常会做的是在 /etc/syslog.conf 加入 <BR> 这一行: <BR> <BR>auth.* /var/log/authlog <BR> <BR> FreeBSD 出厂时便包含了 newsyslog。这玩意会定时压缩纪录档并清除掉旧的纪录。设 <BR> 定档位於 /etc/newsyslog.conf - 请看一下 man page 以得到更多的资讯: <BR> <BR> % man newsyslog <BR> <BR> 不像 syslogd, newsyslog 不是一直都在执行的。它是从 crontab 启动的: <BR> <BR>% grep newsyslog /etc/crontab <BR>0 * * * * root /usr/sbin/newsyslog <BR>% <BR> <BR> 你可以修改 /etc/newsyslog.conf 以符合你的需求。我通常会改变它预设的档案模式, <BR> 从 664 改成 660 - 因为没有必要让一般的使用者去查看你的系统纪录。你应该这麽 <BR> 做: <BR> <BR> # cd /var/log <BR> # chmod g-w,o-r * ; chmod a+r wtmp <BR> <BR> 这会防止一般使用者读取纪录档, 除非它们在适当的 group (wheel 或之类的)。还有, <BR> 记得把记录档的 group 都改成 wheel -- 这纯粹只是为了方便: 如果你是在 wheel 这 <BR> 个 group; 你当然是可以 su(1) 到 root 然後读记录档。但是这麽做以後你便可以直 <BR> 接读记录档了, 岂不方便乎!? <BR> 你还要在 /etc /newsyslog.conf 中加入 "root.wheel": <BR> <BR> /var/log/maillog root.wheel 640 7 100 * Z <BR> /var/log/authlog root.wheel 640 7 100 * Z <BR> /var/log/messages root.wheel 640 7 100 * Z <BR> <BR> 这会在记录档达到 100K 时将它压缩并加以编号, 将 mode 改成 640, chown 成 <BR> root.wheel, 并将旧的记录档干掉 - 这就是我们要的。 <BR> <BR> 当然,标准的 Unix 还有其他不同的 syslog 程式可供选择,其中之一是 CORE EDI 的 <BR> ssyslog (secure syslog). 可以在以下的地方找到: <BR> <BR> <A HREF="http://www.core-sdi.com/ENGLISH/CoreLabs/ssyslog/download.html">http://www.core-sdi.com/ENGLISH/CoreLabs/ssyslog/download.html</A> <BR> <BR> 另外还有 nsyslog (new syslog),这是写 bpfilter 那一伙人写出来的,你可以在 <BR> <A HREF="http://cheops.anu.edu.au/~avalon/nsyslog.html">http://cheops.anu.edu.au/~avalon/nsyslog.html</A> 找到这个程式。 <BR> <BR> 不管你选用那一种程式 (标准的 syslog , ssyslog ,或 nsyslog),你应该也去看看 <BR> 一些帮你分析系统 log 的程式,帮你省下去用 grep 查询 log file 的麻烦。 <BR> <BR> 其中之一是 logcheck , 可以在这个地方下载: <BR> <A HREF="http://www.psionic.com/abacus/abacus_logcheck.html">http://www.psionic.com/abacus/abacus_logcheck.html</A> <BR> <BR> 另外一个类似的程式叫做 logsurfer , 你可以从这个网页下载: <BR> <A HREF="http://www.cert.dfn.de/eng/team/wl/logsurf/">http://www.cert.dfn.de/eng/team/wl/logsurf/</A> <BR> <BR> <BR>o Misc. hints and tips <BR> <BR> o LKM <BR> <BR> 在正式提供服务的系统上, 也许该关掉 LKM。为什麽? 请看: <BR> Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 09 <BR> 要关掉 LKMs, 在 kernel 设定档中加入这一行: <BR> <BR> options NOLKM <BR> <BR> <BR> o Portmap <BR> <BR> FreeBSD 出厂的预设值会将 portmap 这项功能打开。如果你不需要它的话,把它关掉。 <BR> 如果你没有跑任何需要呼叫 RPC 的程式的话,你就不需要跑这个程式。如果要关掉 <BR> portmap 这个程式,你可以去修改 /etc/rc.conf , 把 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -