基于busybox搭建功能完善的小型linux(二)

上篇博客已经介绍并完成了linux的搭建,现在我们来完善下这个小系统,以下操作都基于宿主机完成

一、启用虚拟控制台,并且为系统添加用户账户

vim /mnt/sysroot/etc/inittab

改为如下内容:

::sysinit:/etc/rc.d/rc.sysinit
::respawn:/sbin/getty 9600 tty1
::respawn:/sbin/getty 9600 tty2
::respawn:/sbin/getty 9600 tty3
::respawn:/sbin/getty 9600 tty4
::respawn:/sbin/getty 9600 tty5
::respawn:/sbin/getty 9600 tty6
::ctrlaltdel:/bin/reboot
::shutdown:/bin/umount -a -r


1、为目标主机建立passwd帐号文件


为目标机创建2个用户root,gulong

       vim /mnt/sysroot/etc/passwd

  添加以下内容

root:x:0:0:root:/root:/bin/sh
gulong:x:506:507::/home/gulong:/bin/sh


创建家目录

[root@www ~]# mkdir  -pv /mnt/sysroot/home/gulong
[root@www ~]# mkdir  /mnt/sysroot/root


2、为目标主机建立group帐号文件

[root@www ~]#  grep  "^root" /etc/group >>  /mnt/sysroot/etc/group
[root@www ~]#  grep  "^gulong" /etc/group >>  /mnt/sysroot/etc/group


3、为目标主机创建shadow密码文件

[root@www ~]#  grep  "^root" /etc/shadow >>  /mnt/sysroot/etc/shadow
[root@www ~]#  grep  "^gulong" /etc/shadow >>  /mnt/sysroot/etc/shadow


4、重启目标机测试

wKiom1M8GsqxEqtnAAB3WPfey-0384.jpg


wKioL1M8Gs_ytvZqAACBoTZjkcI865.jpg


二、在系统登录时提供banner信息、主机名称

1.创建  /etc/issue 文件(开机欢迎信息)

添加如下内容:

Welcome to Gulong Linux ...
Kernel \r


2.创建保存主机名称的配置文件

[root@www sysroot]#  mkdir etc/sysconfig
[root@www sysroot]#  vi  etc/sysconfig/network
//添加如下内容:
NETWORKING=yes
HOSTNAME=www.gulong.com


3.编辑系统初始化脚本,实现开机过程中设定主机名称

[root@www sysroot]# vim etc/init.d/rc.sysinit
//添加以下内容:
[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME=localhost
/bin/hostname $HOSTNAME


wKioL1M9WAWA0-PqAAHfh20Ykk4522.jpg


把宿主机关机,启动目标机测试

wKiom1M9WIGhPyyGAAB7xK3IKbw730.jpg


三、修改终端提示符

创建/etc/profile文件

[root@www ~]# vim /mnt/sysroot/etc/profile
//添加如下内容
export PS1='[\u@\h \W]\$ '
export PATH=$PATH:/usr/local/sbin:/usr/local/bin


重启目标机:

wKioL1M9XQDT2MoaAABpSGEOg-M186.jpg


四、通过dropbear为目标系统提供ssh远程连接服务

1、编译安装dropbear

[root@www ~]# tar xf  dropbear-2013.58.tar.bz2
[root@www ~]# cd  dropbear-2013.58
[root@www dropbear-2013.58]#  ./configure
[root@www dropbear-2013.58]#  make PROGRAMS="dropbear dbclient dropbearkey scp"
[root@www dropbear-2013.58]#  make PROGRAMS="dropbear dbclient dropbearkey scp" install


2、移植dropbear至目标系统

宿主机上使用此脚本移植dropbear,bincp.sh脚本内容如下:


#!/bin/bash
#
declare -i DebugLevel=0
Target=/mnt/sysroot
[ -d $Target ] || mkdir $Target &> /dev/null
read -p "A command: " Command
while [ $Command != 'q' -a $Command != 'Q' ]; do
Command=`which $Command | grep -v "^alias" | grep -o "[^[:space:]]*"`
[ $DebugLevel -eq 1 ] && echo $Command
ComDir=${Command%/*}
[ $DebugLevel -eq 1 ] && echo $ComDir
[ -d ${Target}${ComDir} ] || mkdir -p ${Target}${ComDir}
[ ! -f ${Target}${Command} ] && cp $Command ${Target}${Command} && echo "Copy $Command to $Target finished."
for Lib in `ldd $Command | grep -o "[^[:space:]]*/lib[^[:space:]]*"`; do
  LibDir=${Lib%/*}
  [ $DebugLevel -eq 1 ] && echo $LibDir
  [ -d ${Target}${LibDir} ] || mkdir -p ${Target}${LibDir}
  [ ! -f ${Target}${Lib} ] && cp $Lib ${Target}${Lib} && echo "Copy $Lib to $Target finished."
done
read -p "A command: " Command
done


接下来运行此脚本,分别输入dropbear、dropbearkey和dbclient,bash即可;这些命令会被存储于目标系统的/usr/local/sbin或/usr/local/bin目录中。


3、为远程登录的用户提供伪终端设备文件

编辑/etc/fstab文件添加如下内容

devpts    /dev/pts    devpts  default  0 0

wKioL1M-OPfx4CkIAADmjftlT8s652.jpg


4、为目标系统的dropbear生成主机密钥

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


[root@www ~]# mkdir /mnt/sysroot/etc/dropbear
[root@www ~]# dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key -s 2048
[root@www ~]# dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key


5、定义安全shell

dropbear默认情况下仅允许其默认shell出现在/etc/shells文件中的用户远程登录

[root@www ~]# vim /mnt/sysroot/etc/shells
//添加如下内容:
/bin/sh
/bin/ash
/bin/hush
/bin/bash
/sbin/nologin


6、为目标主机提供网络服务转换机制

   在宿主机上使用默认选项编译的dropbear将依赖nsswitch实现用户名称解析,因此,还需要为目标主机提供nss相关的库文件及配置文件。


[root@www ~]# vim /mnt/sysroot/etc/nsswitch.conf
//添加如下内容
passwd:     files
shadow:     files
group:      files
hosts:      files dns


复制所需要的库文件:


[root@www ~]# mkdir /mnt/sysroot/usr/lib64/ //有此目录就不要创建了哦,亲!
[root@www ~]# cp -d /lib64/libnss_files*  /mnt/sysroot/lib64/
[root@www ~]#  cp -d /usr/lib64/libnss3.so /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/


7、创建dropbear的服务脚本

[root@www sysroot]# mkdir etc/rc.d/init.d
[root@www sysroot]# vim  etc/rc.d/init.d/dropbear


7.1.添加如下服务脚本内容:


//为了dropbear服务脚本正常工作,把这些复制到目标机上
[root@www ~]# mkdir /mnt/sysroot/var/lock/subsys
[root@www sbin]# cp /sbin/consoletype /mnt/sysroot/sbin/

脚本内容如下:


#!/bin/bash
              #
              # description: dropbear ssh daemon
              # chkconfig: 2345 66 33
              #
              dsskey=/etc/dropbear/dropbear_dss_host_key
              rsakey=/etc/dropbear/dropbear_rsa_host_key
              lockfile=/var/lock/subsys/dropbear
              pidfile=/var/run/dropbear.pid
              dropbear=/usr/local/sbin/dropbear
              dropbearkey=/usr/local/bin/dropbearkey
              [ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
              [ -r /etc/sysconfig/dropbear ] && . /etc/sysconfig/dropbear
              keysize=${keysize:-1024}
              port=${port:-22}
              gendsskey() {
                   [ -d /etc/dropbear ] || mkdir /etc/dropbear
                   echo -n "Starting generate the dss key: "
                   $dropbearkey -t dss -f $dsskey &> /dev/null
                   RETVAL=$?
                   if [ $RETVAL -eq 0 ]; then
                        success
                        echo
                        return 0
                   else
                        failure
                        echo
                        return 1
                   fi
              }
              genrsakey() {
                   [ -d /etc/dropbear ] || mkdir /etc/dropbear
                   echo -n "Starting generate the rsa key: "
                   $dropbearkey -t rsa -s $keysize -f $rsakey &> /dev/null
                   RETVAL=$?
                   if [ $RETVAL -eq 0 ]; then
                        success
                        echo
                        return 0
                   else
                        failure
                        echo
                        return 1
                   fi
              }
              start() {
                   [ -e $dsskey ] || gendsskey
                   [ -e $rsakey ] || genrsakey
                   if [ -e $lockfile ]; then
                        echo -n "dropbear daemon is already running: "
                        success
                        echo
                        exit 0
                   fi
                   echo -n "Starting dropbear: "
                   daemon --pidfile="$pidfile" $dropbear -p $port -d $dsskey -r $rsakey
                   RETVAL=$?
                   echo
                   if [ $RETVAL -eq 0 ]; then
                        touch $lockfile
                        return 0
                   else
                        rm -f $lockfile $pidfile
                        return 1
                   fi
              }
              stop() {
                   if [ ! -e $lockfile ]; then
                        echo -n "dropbear service is stopped: "
                        success
                        echo
                        exit 1
                   fi
                   echo -n "Stopping dropbear daemon: "
                   killproc dropbear
                   RETVAL=$?
                   echo
                                                                                                                                                                                                                                                                                                                                       
                   if [ $RETVAL -eq 0 ]; then
                        rm -f $lockfile $pidfile
                        return 0
                   else
                        return 1
                   fi
              }
              status() {
                   if [ -e $lockfile ]; then
                        echo "dropbear is running..."
                   else
                        echo "dropbear is stopped..."
                   fi
              }
              usage() {
                   echo "Usage: dropbear {start|stop|restart|status|gendsskey|genrsakey}"
              }
              case $1 in
              start)
                   start ;;
              stop)
                   stop ;;
              restart)
                   stop
                   start
                   ;;
              status)
                   status
                   ;;
              gendsskey)
                   gendsskey
                   ;;
              genrsakey)
                   genrsakey
                   ;;
              *)
                   usage
                   ;;
              esac


7.2 给dropbea执行权限

[root@www sysroot]#chmod +x  etc/rc.d/init.d/dropbear
[root@www sysroot]# cp /etc/rc.d/init.d/functions etc/rc.d/init.d/  //复制dropber调用的functions脚本至目标机


7.3 创建规范化开机启动、关机停止服务、


[root@www sysroot]# cd etc/rc.d/
[root@www rc.d]# ln -sv init.d/dropbear  dropbear.start //创建dropbear启动脚本链接
[root@www rc.d]# ln -sv init.d/dropbear  dropbear.stop  //创建dropbear停止脚本链接
[root@www rc.d]# vim rc.sysinit
 //添加下图红色内容

wKioL1M-QcTAwvs9AAGlZPCCNfc109.jpg


7.4创建关机时的服务脚本rc.sysdown

[root@www etc]#  vim /mnt/sysroot/etc/rc.d/rc.sysdown
//添加以下内容:
#!/bin/sh
#
sync
sleep 2
sync
/etc/rc.d/*.stop stop
/bin/umount -a -r
poweroff
                                                                                                                                                                                                                                                                                                                                                
[root@www etc]# chmod +x /mnt/sysroot/etc/rc.d/rc.sysdown
//给此脚本执行权限


7.5编辑initab文件

[root@www etc]# vim /mnt/sysroot/etc/inittab
//修改此内容
::shutdown:/etc/rc.d/rc.sysdown

wKiom1M-Q7fgkMjiAADOjlZKAao873.jpg


8、重启目标机测试远程登录

wKiom1M-oSiCbn62AAFle8fCuTU329.jpg

wKioL1M-R7bROVPDAAJYSlH3YP0528.jpg

wKiom1M-SBXSGgnZAAFoEtLWsoQ979.jpg


这样目标机就可以远程登录了!


五、通过nginx提供web服务

1.编译安装nginx

[root@www ~]# tar xf nginx-1.4.2.tar.gz
[root@www ~]# cd nginx-1.4.2
[root@www nginx-1.4.2]# ./configure --prefix=/usr/local --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --without-pcre --without-http_rewrite_module --without-http_geo_module --without-http_uwsgi_module --without-http_fastcgi_module --without-http_scgi_module --without-http_memcached_module
[root@www nginx-1.4.2]# make && make install


创建nginx用户


# groupadd -r nginx
# useradd -r -g nginx nginx


2.移植nginx至目标系统

[root@www ~]# bash bincp.sh
nginx


3.移植配置文件至目标系统

[root@www ~]# mkdir  /mnt/sysroot/etc/nginx/
[root@www ~]# mkdir /mnt/sysroot/var/log/nginx
[root@www ~]# mkdir /mnt/sysroot/usr/local/html
[root@www ~]# mkdir /mnt/sysroot/usr/local/logs
[root@www ~]# cp /etc/nginx/*  /mnt/sysroot/etc/nginx/


4.复制nginx用户信息


[root@www ~]# grep "^nginx" /etc/passwd >> /mnt/sysroot/etc/passwd
[root@www ~]# grep "^nginx" /etc/group >> /mnt/sysroot/etc/group
[root@www ~]# grep "^nginx" /etc/shadow >> /mnt/sysroot/etc/shadow


5、创建测试页面

[root@www nginx-1.4.2]# cp /usr/local/html/* /mnt/sysroot/usr/local/html/


6、测试

启动目标主机,

然后使用如下命令启动nginx,即可通过浏览器测试访问。

# /usr/local/nginx

wKioL1M-svmRuHhDAAD7Bp58EmA565.jpg

wKiom1M-fkuDqTraAAJwsKAtjVs821.jpg


好了,到现在一个功能完善的微型linux已经制作完成,不足之处,请多加指点!

附:bzImage,linux启动盘下载地址

linux

bzImage

你可能感兴趣的:(扩展linux)