详解基于BusyBox、DropBear、Ngnix制作完整的嵌入式(3)

现在我们来做个测试:
说明:
这里我们的实验环境用的vmware Workstation,所以我们重新创建个虚拟机:步骤如下:
点击:File->New Virtual Machine..(ctrl+n)->Custom(advanced)->Next->(default)Next->(default)Next->更改Guest opevating system选项改为linux,然后将
Version版本改为Red Hat Enterprise Linux 5 ->Next->保持默认也可作相应的设置->Next->设置内存为64即可->选择桥接方式(这里我们使用第一选项)->Next->
选择硬盘,这里我们选择第二选项(就是已存在的磁盘)-Next->浏览我们虚拟机添加的那块IDE硬盘即可->Finish

下面我们来做下扩张内容:

1、为新构建的微型Linux启用虚拟控制台
# cd /mnt/sysroot
将 etc/inittab文件改为如下内容:
::sysinit:/etc/init.d/rc.sysinit
tty1::askfirst:/bin/sh
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh
tty5::askfirst:/bin/sh
tty6::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
:wq
注:因为我们使用的是busybox制作的根文件系统,所以关于init所使用的配置文件/etc/inittab的格式有所不同。

2、已经实现了虚拟控制台,但其仍是直接进入系统,且系统没有用户帐号等安全设施,所以接下来的工作就是实现为系统用户添加账号(以root为例)
我们知道关于用户都会设置到一下文件:
/etc/passwd
/etc/group
/etc/shadow
步骤如下:
(1)、为目标主机建立passwd帐号文件
# cd /mnt/sysroot
# vim etc/passwd
添加如下内容:
root:x:0:0::/root:/bin/sh
:wq
# mkdir root ##为root用户创建“家”目录:

(2)、为目标主机建立group帐号文件
# vim etc/group
添加如下内容:
root:x:0:
:wq

(3)、为目标主机建立shadow影子口令文件,这里采用直接复制宿主机的shadow文件中关于root口令行的行来实现
# grep "^root" /etc/shadow > etc/shadow

注:等目标主机启动时,root用户的口令也是宿主机的root用户的口令。您可以在目标主机启动以后再动手更改root用户的口令。
更改口令命令为:
# passwd

这样就是可以实现用户的登陆:

下面我们在进一步扩展,让我们真正了解linux的启动流程

注:一下更改就在宿主机上完成

1、为系统登录时提供banner信息
注:我们知道提供banner信息所使用的配置文件为/etc/issue,直接在/mnt/sysroot/etc/创建issue文件
这个可以通过宿主机来实现,也可以直接在目标主机上进行配置。
# vi /etc/issue
添加如下内容:
Welcome to ##欢迎信息
Kernel \r
注:这里的内容可以根据你的需要显示的内容进行修改相应修改


2、在系统启动时为系统提供主机名称:
(1)、创建保存主机名称的配置文件
# mkdir /etc/sysconfig
# vi /etc/sysconfig/network
添加如下内容:
HOSTNAME=www.magedu.com
:wq

(2)、编辑系统初始化脚本,实现开机过程中设定主机名称
# vi /etc/init.d/rc.sysinit
添加如下内容:
HOSTNAME=
[ -e /etc/sysconfig/network && -r /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z ${HOSTNAME} ] && HOSTNAME="localhost"
/bin/hostname ${HOSTNAME}
:wq

这样,我们的制作的微型嵌入式Linux系统就完善了许多。
下面,我们使用dropbear软件实现远程SSH连接(SHH2)

1、通过dropbear为系统提供ssh远程连接服务
1、编译安装dropbear
# cd /usr/src
# tar xf dropbear-2013.56.tar.bz2
# cd dropbear-2013.56
# ./configure
# make
# make install

2、移植dropbear至目标系统

下面我们来写一个脚本,脚本功能实现二进制程序及二进制文件所依赖的库文件复制到/mnt/syroot/bin及/mnt/sysroot/lib目录中,脚本如下:
#!/bin/bash
#
read -t 30 -p "Target System Directory[/mnt/sysroot]: " DEST
DEST=${DEST:-/mnt/sysroot}

libcp() {
LIBPATH=${1%/*} ##截取机名 如/bin/bash 所显示的结果为bash
[ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
}
#判读目录是否存在,如果不存在则创建,存在将二进制命令复制到相对目录下
bincp() {
CMDPATH=${1%/*}
[ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
## 判断我们输入的命令所依赖的库目录是否存在,不存在则创建,存在则执行复制工作。

for LIB in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
libcp $LIB
done
} ##使用ldd命令常看二进制程序所用到的库文件,并执行复制工作

read -p "Your command: " CMD
until [ $CMD == 'q' ]; do
! which $CMD && echo "Wrong command" && read -p "Input again:" CMD && continue
COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
bincp $COMMAND
echo "copy $COMMAND finished."
read -p "Continue: " CMD
done ##调用bincp函数来执行操作
# chmod +x bincp.sh(脚本名称)
好了,接下来就运行bincp.sh脚本将,输入dropbear、dropbearkey和dbclient即可;这些命令会被存储于目标系统的/usr/local/sbin或/usr/local/bin目录中。

3、为远程登录的用户提供伪终端设备文件
# vim /mnt/sysroot/etc/fstab,添加如下一行:
devpts /dev/pts devpts mode=620 0 0
:wq
创建所需要的目录:
# mkdir /mnt/sysroot/dev/pts

4、为目标系统的dropbear生成主机密钥
默认情况下,dropbear到/etc/dropbear目录中查找使用的rsa格式主机密钥(默认名称为dropbear_rsa_host_key)和dss格式的主机密钥
(默认名称为dropbear_dss_host_key)。其中,rsa格式可使用不同长度的密钥,但dss格式只使用1024位的密钥。

# mkdir /mnt/sysroot/etc/dropbear
# dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
# dropbearkey -t rsa -f /etc/dropbear/dropbear_dss_host_key

在生成rsa格式的key时,其长度指定部分-s 2048可以省略,也可以为其指定为其它长度,但长度需要为8的整数倍。
说明:此步骤也可以在目标主机上进行,但路径要做相应的修改。

5、定义安全shell
安全起见,dropbear默认情况下仅允许其默认shell出现在/etc/shells文件中的用户远程登录,因此,这里还需要创建/etc/shells文件,并添加所有允许的shell。
# cat >> /mnt/sysroot/etc/shells << EOF
/bin/sh
/bin/ash
/bin/hush
/bin/bash
EOF

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20005.html