📄 00000001.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: mephisto (魔鬼*修心养性*重新做人), 信区: Linux <BR>标 题: 增加Linux系统安全性的一种方法 (转载) <BR>发信站: BBS 水木清华站 (Thu Sep 2 01:24:55 1999) <BR> <BR>【 以下文字转载自 Security 讨论区 】 <BR>【 原文由 howareyou 所发表 】 <BR>Linux缺省的安全等级是0,如果将其升到1,就可以一定程度上提高系统的安全性.安全等级 <BR>为1的时候,它会禁止修改ex2fs系统中文件的immutable和append-only位,同时禁止装入 <BR>/移除module.所以我们可以先用chattr +i <file>将大部分的可执行文件,动态连接库, <BR>一些重要的系统文件(inetd.conf,securetty,hosts.allow,hosts.deny,rc.d下的启 <BR>动script...)加上immutable位,这样"黑客"就很难在你的机器上放置木马和留后门了. <BR>(即便他已经得到了root权限,当然通过直接硬盘读写仍然可以修改,但比较麻烦而且危险 <BR>). <BR>"黑客"们一旦进入系统获得root,首先会清除系统的记录文件.你可以给一些系统记录文件 <BR>(wtmp,messages,syslog...)增加append-only位,使"黑客"不能轻易的修改它们.要抓 <BR>他们就容易多了.:-) <BR>修改安全等级比较直接的办法是直接修改内核源码.将linux/kernel/sched.c中的 <BR>securelevel设成1即可.不过如果要改变安全等级的话需要重新编译内核,我太懒,不想那 <BR>么麻烦.:-) <BR>为什么不用module呢?我写了个很简单的lkm和一个client程序来完成安全等级的切换. <BR> <BR>方法: insmod lkm; clt -h; <BR> <BR>注意:普通用户也可以执行clt来切换安全等级,所以最好是在clt和lkm中加段密码检查, <BR>如果密码不对就不允许执行.:-) <BR> <BR>这两个程序在Redhat 5.2(2.0.36)下编译运行通过.对于2.2.x的内核,securelevel <BR>变成了securebits,简单的将它改到1,会连setuid()都被禁止了,这样普通用户就不能 <BR>登陆了.如果谁对2.2.x比较熟悉,请不吝赐教,共同提高嘛.:) <BR> <BR><在测试这些程序以前,请备份重要数据.本人不为运行此程序带来的任何损失负责.> <BR> <BR>(一旦securelevel=1,kernel将不允许装入modlue,所以你的kerneld可能不能正 <BR>常工作) <BR>(关于chattr,lsaddr请man chattr和man lsattr) <BR> <BR> <A HREF="mailto:warning3@hotmail.com">warning3@hotmail.com</A> <BR> <BR>/**************************** lkm.c ********************************/ <BR> <BR> <BR>/* Simple lkm to secure Linux. <BR> * This module can be used to change the securelevel of Linux. <BR> * Running the client will switch the securelevel. <BR> * <BR> * gcc -O3 -Wall -c lkm.c <BR> * insmod lkm <BR> * <BR> * It is tested in Redhat 5.2 (2.0.36). <BR> * (It should be modified if you want to run it in 2.2.x kernel). <BR> * It is really very simple,but we just for educational purposes.:-) <BR> * <BR> * <A HREF="mailto:warning3@hotmail.com">warning3@hotmail.com</A> <BR> */ <BR> <BR>#define MODULE <BR>#define __KERNEL__ <BR> <BR>#include <linux/config.h> <BR>#include <linux/module.h> <BR>#include <linux/version.h> <BR>#include <linux/errno.h> <BR>#include <linux/types.h> <BR>#include <linux/fs.h> <BR>#include <linux/string.h> <BR>#include <linux/mm.h> <BR>#include <linux/proc_fs.h> <BR>#include <asm/segment.h> <BR>#include <asm/unistd.h> <BR>#include <linux/dirent.h> <BR>#include <asm/unistd.h> <BR>#include <linux/sockios.h> <BR>#include <linux/if.h> <BR> <BR>#define __NR_secureswitch 250 <BR> <BR>extern void *sys_call_table[]; <BR> <BR>int sys_secureswitch(int secure) <BR>{ <BR> if(secure==0) securelevel=0; <BR> if(secure==1) securelevel=1; <BR> return securelevel; <BR>} <BR> <BR>int init_module(void) <BR>{ <BR> sys_call_table[__NR_secureswitch] = (void *)sys_secureswitch; <BR> return 0; <BR>} <BR> <BR>void cleanup_module(void) <BR>{ <BR> sys_call_table[__NR_secureswitch] = NULL; <BR> return; <BR>} <BR> <BR> <BR>/************************ clt.c **************************/ <BR> <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -