LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3285|回复: 6

用Busybox,kernel,dropbear,syslog在CF(compact flash)上建立的安全策略详细过程

[复制链接]
发表于 2005-8-24 11:09:34 | 显示全部楼层 |阅读模式
项目具体目标以及实现过程(我将时刻保持完善此文档,如果版主有空的话请版主帮我按genv的说法来对文档进行高亮或者区别对待,这样让看的人也舒服点。我不知道如何做,谢谢了)

目标:我们将在CF(Compact falsh   大小为8M)卡上建立一个小型的linux系统。并对其增加一些安全策略。

整个系统采用最新的linux2.6.29内核重新进行编译作为CF卡上内核,采用BUSYBOX文件系统作为CF卡上的文件系统,在此系统上能实现三种不同用户权限的访问控制,以及远程访问此小CF卡系统时,我们采用dropbear来代替ssh访问,以获得更高的安全性,在最后我们在小系统上实现了本地日志远程主机存储。

==============================================
1.第一步:安装slackware的环境,并编译linux内核让它满足相关的要求.
编译kernel使得编译完的bzImage支持8M的compact flash卡和相关网络硬件。(我们采用的是linux-2.4.29.tar.gz的内核)

2.第二步:配置filesystem.

有俩种方案:
1).使用busybox和tinylogin。
2).使用dev_kit_intro.tar包( A Simple Development Kit for use with the embedded and Linux intro ducuments - based on Craige Hollabrough PH.D),我这有这个包,不知道谁有空间放这个.
我们采用的是第二种办法,至于第一种办法的实现,我过一段时间写个专门文档来完成。

要实现的功能:
1.)支持ping,ifconfig。但是不支持ssh,因为我们要在后面用dropbear专门来代替ssh。
2.)能够登陆login,,能够增加用户aduser
3.)能够设置三种步同权限的用户。

将编好的内核和FS拷到CF卡中,并test是否能够完成上述功能。

3.第三步:
安装dropbear到CF卡的小文件系统中,并能支持ssh登陆。

4第四步:实现syslog远程日志存储。
主要是在CF卡上进行dropbear登陆,命令操作的信息全部及时能保存到远程的台式机上,使得系统更加安全。备份系统日志.

==============================================
我的邮箱是:wikicc@gmail.com 有好建议或者问题请联系我。
 楼主| 发表于 2005-8-24 11:10:18 | 显示全部楼层
####slackware环境的安装

如何安装slackware,linuxsir上有一篇图解安装教程,大家可以参照一下进行安装。
这里面要注意就是这么几点:

1.在选择安装包的时候,我们可以不选有关X的安装包,因为我们做这个不需要在X-windows
下做,不选的好处,一是,安装速度快,二安装过程中包装的越少,感觉出错的可能性越小


2.在我们后来的测试过程中,不论是以后要进行编译的内核还是做好的小文件系统,我们都
采用lilo这个启动工具来测试和启动系统.
所以在选grub还是lilo的时候,选择lilo.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-24 11:12:53 | 显示全部楼层
####编译linux内核 (网卡的支持很重要)
1.Networking options
这一大项中,只需要把下列项目编译进内核:
Packet socket :mmapped IO
TCP/IP networking
2.网卡   Network device support (这一块你必须根据你CF卡上的网卡来选择相应的网卡
动)请确定是否已经把PCI的支持选项选上了,(在Geneal setup)里.没有PCI的支持,PCI的网卡将
不能选.选择Y,这样就可以支持网卡了,其余都选择N.然后点Ethernet(10 or 100 Mbit)按钮选择你
要的网卡驱动,你可以把最常见的几种Reltek8139,NE2000,3COM等网卡编译进内核.虽然网卡
的驱动通常都很小, 但是不要太贪心,选2~3个就足够了,否则你的内核就会一下子多出几十K
.在我先前编译的CF-linux内核中,我把
============
via-rhine网卡编译了进去,是因为我打造bCF-linux的机器上只有一块那个芯片的网卡.
============
3.虚拟终端和虚拟控制台
除了Virtual terminal和Support for console on terminal两项,其他全选N.

Virtual terminal 即虚拟终端,这是一般linux必备选项.否则你的linux启动后,在屏幕看不
到任何东西.另外还负责键盘输入信息等等.只有在某些嵌入式linux应用场合才会不要这个
项,因为这些linux通常都不用操作.

Support for console on terminal
在虚拟终端上的控制台.他支持在终端上各种信息的输出,这也是必备的.

接下来的几个大项:
Multimedia devices
Crypto Hardware support
全部选择N.
4.File sytems这一块
其中有三个是你必需选的:
/proc file system support 缺了他,很多命令和软件就不能运行.
Second extended fs support CF-Linux的基本文件系统.
ISO 9660 CDROM filesytem support 除非你不想用光盘.

5.ATA/IDE/MFM/RLL support
选择Y,然后下面的'IDE,ATA and ATAPI Block Devices'按钮就被激活

下面几项请选择Y,其余都可以是N.
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
Include IDE/ATA-2 DISK support
Auto-Geometry Resizing support
Include IDE/ATA CDROM support

6.Console drivers
这是支持linux在字符模式下高分辨率显示的内核模块.前面三个全部选择Y,
Frame-buffer support按钮是灰色的不能选,别急,回到第一个大选项:
Code maturity level options 选择Y,就可以激活这个按钮了.

下面几个选项需要选择Y:
Support for framebuffer devices
VESA VGA graphics console
你也可以选择其他的显卡驱动,比如nVidia的,但是VESA和VGA是通用性最好的

Support only 8 pixels wide fonts
这个一定要选,否当你给内核传递vga=788参数,让linux在字符界面下高分辨率显示的时候,
统会因为找不到合适的小字体而返回到低分辨率模式.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-24 11:13:45 | 显示全部楼层
#### 关于建立文件系统以及转移到CF卡全过程

  使用dev_kit_intro.tar包( A Simple Development Kit for us
e with the embedded and Linux intro ducuments - based on Craige Hollabrough PH.D),我这有这个包,不知道谁有外网空间我可以上

传上去.

第 一 大步骤:配置dev_fs
   tar -tjf dev_kit_intro.tar.bz2  test the package
   tar -xjf dev_kit_intro.tar.bz2
   cd dev_kit_intro/src/fs
   tar -xzvf busybox-0.60.5
   cd busybox-0.60.5
   vi Config.h                           //这一步骤很重要,你可以在Config.h文件配置filesystem支持的命令和功能,请仔细阅读此文档

.
   mv Config.h ../BB_Config              //将Config.h改为BB_Config,因为dev_fs编译的脚本里面默认的配置文件为BB_Config
   cd /usr/src/dev_kit_intro
   ./build.sh                            //执行编译脚本

注意:在Config.h中一定要选上支持login,ifconfig,ping等命令,而ssh和telnet则不要选,因为我们要建立的是一个安全系统.

得到了/opt/ecdk-0.1-i386/i386/dev_fs文件目录,
然后将dev_fs copy为newsmallfs,在newsmallfs里面进行操作.
   cp -pRd dev_fs/* newsmallfs/

第 二 大步骤:裁减编译好的dev_fs系统,因为CF只有8M,而编译好的文件有100M
把dev_fs进行编译,编译好大约101M
然后把dev_fs裁减为2038K
具体过程我写了个制作smallfilesytem的scripts(我过段时间再将每段的意思详细讲解一下)
如下所示:    //为后面注释说明  **为关键步骤或者为易出错步骤
此scripts名字为:  ./smallfs.sh
#!/bin/bash
BASEDIR=/opt/ecdk-0.1-i386/i386/newsmallfs    //编译完dev_fs之后的文件目录

rm -rf $BASEDIR/share                       //在newsmallfs目录下删除一些不影响小系统功能的一些目录,具体这些目录或者文件有什么

用途,请在做这
rm -rf $BASEDIR/include                     //个时候man或者google一下   
rm -rf $BASEDIR/libexec
rm -rf $BASEDIR/info
rm -rf $BASEDIR/bin/iconv
rm -rf $BASEDIR/bin/rpcgen
rm -rf $BASEDIR/bin/tzselect
rm -rf $BASEDIR/bin/catchsegv
rm -rf $BASEDIR/bin/ldd*
rm -rf $BASEDIR/bin/mtrace
rm -rf $BASEDIR/bin/xtrace
rm -rf $BASEDIR/bin/gencat
rm -rf $BASEDIR/bin/sprof
rm -rf $BASEDIR/bin/pcprofiledump
rm -rf $BASEDIR/bin/getconf
rm -rf $BASEDIR/bin/locale*
rm -rf $BASEDIR/bin/getent
rm -rf $BASEDIR/bin/glibcbug

rm -rf $BASEDIR/lib/*.a                  **
rm -rf $BASEDIR/lib/libc.so             //这一步必须要先删除libc.so之后再建立libc.so与libc-2.2.5之间的连接            
cd $BASEDIR/lib/
ln libc-2.2.5.so libc.so
export PATH=/opt/ecdk-0.1-i386/i386/binPATH                     **

i386-linux-strip $BASEDIR/lib/*.so
rm -rf gconv

rm -rf $BASEDIR/sbin/iconvconfig
rm -rf $BASEDIR/sbin/nscd*
rm -rf $BASEDIR/sbin/rpcinfo
rm -rf $BASEDIR/sbin/sln
rm -rf $BASEDIR/sbin/zdump
rm -rf $BASEDIR/sbin/zic

//用ld.so.cache ld.so.conf文件来代替ldconfig库文件,系统占用的空间大大的减少了
ldconfig -C /opt/ecdk-0.1-i386/i386/newsmallfs/etc/ld.so.cache -f /opt/ecdk-0.1-i386/i386/newsmallfs/etc/ld.so.conf   **

rm -rf $BASEDIR/sbin/ldconfig

du -s $BASEDIR (你可以在进行每一步骤之后都运行一下du命令来查看裁减之后系统的大小)

第 三 大步骤: test the minisystem by chroot.
  SHELL=/bin/ash chroot /opt/ecdk-0.1-i386/i386/newsmallfs

test login,tty,change password,adduser,pingifconfig

配置小文件系统的几个关键
1./etc/inittab文件里面的写法:
::sysinit:/etc/init.d/rcS ::askfirst:/bin/sh
tty1::respawn:/bin/getty 38400 tty1                     //**为关键语句
tty2::respawn:/bin/getty 38400 tty2
# Stuff to do when restarting the init process
::restart:/bin/init
# Stuff to do before rebooting
::ctrlaltdel:/bin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/bin/swapoff -a

2./dev/下   主要是重新建console,因为距离时间太长了,手边也没有cf卡,所以忘了具体console是出现什么问题了,不过以后我会完善此文档.
建立设备文件名 可以从/dev/目录下直接拷过来。不过为了减少错误还是自己建最好。
首先到/dev目录,查询设备的号。
方法一:
如我机子上:
root@hui:/dev# file ram0
ram0: block special (1/0)
方法二:
root@hui:/dev# ls -l ram0
brw-r-----  1 root disk 1, 0 1996-05-15 07:57 ram0

这样我们可以建立ram0这样一个设备。
#mknod ram0 c 1 0
其中,ram,ram0,tty,tty1,null,console等是必备的.

3.这一俩天再继续完成后续的工作,先happy一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-24 11:15:22 | 显示全部楼层
1.        在主机上安装Dropbear
-首先读install文件t
-根据项目制定的安全策略修改options.h:
让最大连接数变成2
Change   MAX_AUTH_TRIES  parameter to 2
-指定PATH
export PATH=/opt/ecdk-0.1-i386/i386/binPATH
-设定编译参数,这一步尤其重要,Make参数中的CC=i386-linux-gcc
./configure --build=i586-linux --host=i386-linux --disable-zlib
make LDFLAGS="-Wl,-rpath,/lib" CC=i386-linux-gcc
make install
默认安装到Dropbear to /usr/local/sbin, /usr/local/bin目录
在/etc底下建立一个dropbear的目录
在 dropbear目录下, 生成 server keys,
  ./dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
  ./dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
启动dropbear服务
./dropbear, or "./dropbear -h"
然后. cat /var/run/dropbear.pid看看dropbear进程是否已经打开
然后再在其他主机上进行SSH登陆,连续输入俩次错误用户或密码,看第三次进行连接的时候是否被dropbear拒绝登陆。
2.        在CF卡上安装Dropbear过程.
在CF卡小文件系统上建立
usr/local, usr/local/bin, usr/local/sbin, etc/dropbear,  var/run目录
在dev下面建立cdrom和urandom设备
在/usr/local/bin目录下运行
  ./dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
  ./dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
运行 /usr/local/sbin/dropbear
查看dropbear进程  cat /var/run/dropbear.pid
再在远程主机进行ssh登陆并测试是否满足项目所制定的安全策略的要求.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-24 11:16:34 | 显示全部楼层
*****可惜和本机的日志混在一块了
不知道如何避免跟远程主机的日志分开,请高手指教

A机和B机,
A机做日志数据存储服务器,装的slackware系统。
B机是syslog日志产生。在我们的项目里面就是CF卡.

1.CF卡上的syslog的配置

在我们已经建立的小系统里面的任意位置
新建一个文件,名字为syslog.conf

syslog.conf内容为

*.info             @A
kern.*             @A
*.authpriv        @A


A为远程主机得IP或者主机名。

2.远程主机的设置。

配置 /etc/syslog.conf文件

*.info             /var/log-cf-info  (保存日志的文件名)
kern.*             /var/log-cf-kern
*.authpriv        /var/log-cf-ssh
----
如何测试?

1.启动远程主机的syslog服务
cd /etc/rc.d/
./rc.syslog stop
./rc.syslog start

2.在CF卡上,如果不清楚下面命令的意思,可以先用syslogd -h 查看Busybox里面的syslogd的用法。

syslogd -n -R 192.186.1.30:514 -L(remote machine's IP) -f syslog.conf  (这个地方的syslog.conf可以为任意名字,可以在系统里面的

任意位置。但是用-f指定位置时要写对路径)

启动dropbear服务,用非A,非B主机进行远程访问CF小系统。

3.查看A机/log-cf-info和/var/log-cf-ssh
会看到对CF卡的访问记录已经记录在A机上了。这样就不怕别人修改CF卡上的日志,而随时可以恢复和查看是否已经被人改过日志。
回复 支持 反对

使用道具 举报

发表于 2005-8-24 15:38:18 | 显示全部楼层
太乱了.作用是什么?
我都没看明白.
还有请好好利用

  1. code
复制代码

[php]
code
[/php]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表