定制微型Linux系统前篇:http://hjqjk.blog.51cto.com/5970897/1544888


四、提供远程连接功能

    Dropbear是一个相对较小的SSH服务器和客户端。它运行在一个基于POSIX的各种平台。     Dropbear是开源软件,在麻省理工学院式的许可证。 Dropbear是特别有用的“嵌入”式的Linux(或其他Unix)系统,如无线路由器。

    dropbear: 更小环境下,提供简单ssh远程连接服务

 

1、在宿主机上编译dropbear并移植dropbear, dropbearkey, dbclient, scp到目标机上

 

1)下载、解压dropbear-2013.58.tar.bz2

# tar xf dropbear-2013.58.tar.bz2


2)编译安装dropbear-2013.58.tar.bz2

# cd dropbear-2013.58
# ./configure
# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

 

# less INSTALL  #查看安装文档,文档中有详细的安装步骤

wKioL1P8etqQVGyXAAHv6mRuGyQ757.jpg

 

# ./configure --help  #编译选项信息帮助
./configure 不加任何选项,默认安装在/usr/local目录下


wKioL1P8e33Alr-AAAERjFbkx2U772.jpg

注意:千万不要修改以下pam认证的目录,使用宿主机系统默认的pam认证

wKioL1P8e5yh7wZbAAAp6NZev_U571.jpg

 

(3)移植dropbear, dropbearkey, dbclient, scp命令到目标机上

使用bincp.sh脚本复制命令,把dropbear移植到目标机上

[root@localhost ~]# ./bincp.sh
Plz enter a command: dropbear
Plz enter a command: dbclient              
Plz enter a command: dropbearkey
Plz enter a command: /usr/local/bin/scp
Plz enter a command: quit


2、详细配置

为目标机上的dropbear提供两个密钥文件

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



dropbear要认证用户而认证用户要用到名称解析(nsswitch),这就意味着要把nsswitch的库libnss复制过去,然后给nsswitch提供配置文件。(这一步在以上已经做了,在此就不啰嗦了)

 

 

dropbear启动时在/var/run/下会生成一个pid文件,而这个目录在/mnt/sysroot中还没创建

# cd /mnt/sysroot
# mkdir var/run


 

dropbear在远程连接时会去检查你默认启动的shell是否为安全shell,不是安全shell则不允许登录。安全shell/etc/shells文件中指定。

[root@localhost sysroot]# vim etc/shells
/bin/sh
/bin/ash
/bin/hush
/bin/msh
/bin/bash
/sbin/nologin


 

到此,还是不能远程登录。当你远程登录系统时,所登录的终端是伪终端,伪终端是依赖于/dev/pts目录来实现的,而目标机上没有该目录,因此要在目标机上创建/dev/pts目录。

但是不能直接

# mkdir /mnt/sysroot/dev/pts

,因为当系统启动时,内核会挂载devpts

文件系统到/dev目录下,在/dev目录下的原有数据会被隐藏。

编辑 /mnt/sysroot/etc/fstab文件,加上以下一行:

devpts      /dev/pts    devpts  defaults    0 0

 


重新编辑/mnt/sysroot/etc/rc.d/rc.sysinit系统初始化脚本文件

#!/bin/sh
#
echo -e "Welcome to \033[43mCustomed\033[0m Linux"
echo "Remounting root filesystem"
mount -n -o remount,rw /dev/sda2 /
echo "Creating dev file"
mdev -s   # mdev-s 应该在mount -a 之前
echo "Mounting all filesystem"
mkdir /dev/pts
mount -a
[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network
[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && hostname localhost || hostname $HOSTNAME
ifconfig eth0 192.168.1.155   #给目标机提供IP地址
ifconfig lo 127.0.0.1


 

 

dropbear的相关命令设定环境变量,编辑/mnt/sysroot/etc/profile,添加以下一行

export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"


 

下面测试一下能否远程连接目标机

开启目标机系统,开启dropbear服务,使用管理员账号登录

wKiom1P8e8rDF6bIAAAWnXJYs08195.jpg


wKiom1P8e-fgzKenAAI5QsFkGdM377.jpg


wKioL1P8fQ6Qt3tkAAIQkGVJgp8252.jpg

到现在,已经能顺利地使用远程连接正常登录访问目标机了。

 

3、让dropbear开机自动启动

问题:那如何让dropbear在这个小型Linux系统中开机自动启动?

答:

(1)在/mnt/sysroot/etc/init.d目录下提供dropbear的服务脚本

#!/bin/bash
#
dbprog="/usr/local/sbin/dropbear"
dbkeygen="/usr/local/bin/dropbearkey"
dsskey="/etc/dropbear/dropbear_dss_host_key"
rsakey="/etc/dropbear/dropbear_rsa_host_key"
rsasize=1024
dbport=22
gendsskey() {
    if [ ! -f $dsskey ] ;then
        [ -d /etc/dropbear ] || mkdir /etc/dropbear
        echo "Generating dss key file."
        $dbkeygen -t dss -f $dsskey
    fi
}
genrsakey() {
    if [ ! -f $rsakey ] ;then
        [ -d /etc/dropbear ] || mkdir /etc/dropbear
        echo "Generating rsa key file."
        $dbkeygen -t rsa -s rsasize -f $rsakey
    fi
}
start() {
    gendsskey
    genrsakey
    if pidof $dbprog &> /dev/null;then
        echo "$dbprog is already running..."
        return 1
    else
        echo "Starting dropbear"
        $dbprog -p $dbport
        retval=$?
    fi
    if [ $retval -eq 0 ];then
        echo "OK."
        return 0
    else
        echo "Failure ..."
        return 1
    fi
}
stop() {
    if pidof $dbprog &> /dev/null ;then
        echo "stopping dropbear"
        killall $dbprog
        retval=$?
    else
        echo "$dbprog is not running..."
        return 1
fi
  if [ $retval -eq 0 ];then
        echo "OK."
        return 0
    else
        echo "Failure ..."
        return 1
    fi
}
status() {
    if pidof $dbprog &> /dev/null ;then
        echo "$dbprog is running..."
    else
        echo "$dbprog is stopped..."
    fi
}
restart() {
    stop
    sleep 2
    start
}
usage() {
    echo "Usage: `basename $0` {start|stop|restart|status}"
}
case $1 in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    restart
    ;;
status)
    status
    ;;
*)
    usage
    ;;
esac


 

2)设定开机自动执行dropbear脚本

# cd /mnt/sysroot/etc
# mkdir rc.start
# mkdir rc.stop
# cd rc.start/
# ln -sv ../init.d/dropbear 01dropbear   #这里要使用相对路径


 

重新编辑/mnt/sysroot/etc/rc.d/rc.sysinit脚本,在最后添加以下内容:

for i in /etc/rc.start/* ;do
    $i start
done


测试:

wKioL1P8fiywXywBAAEWsxCZLoE909.jpg

五、提供nginx功能

1、在宿主机上测试nginx能否正常使用

下载并解压nginx-1.4.7.tar.gz 

# tar xf nginx-1.4.7.tar.gz

 

解决依赖关系

# yum -y install pcre-devel


编译nginx

# useradd nginx  #注意:nginx是以普通用户nginx身份运行的,所以要先创建普通用户nginx
# cd nginx-1.4.7
# ./configure --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --without-pcre --without-http_rewrite_module


选项解释:

--conf-path=/etc/nginx/nginx.cnf   指定主配置文件的路径
--user=nginx   指定以nginx用户的身份运行
--group=nginx  指定以nginx组的身份运行


 

 

启动nginx

# service httpd stop  #注意:如果httpd服务已开启,先停止httpd服务
# cd /usr/local/sbin
# ./nginx
# ss -tnl | grep 80   # 查看80端口是否处于监听状态


wKioL1P8flCQKgACAAHumKD_YY0741.jpg

2、移植nginx到目标机上

复制nginx的配置文件到目标机上

# cp -r /etc/nginx/ /mnt/sysroot/etc/


 

复制nginx安装目录下的所有文件到目标机上

# cp -r /usr/local/nginx/ /mnt/sysroot/usr/local/


 

为目标机移植nginx程序的依赖库,使用bincp.sh脚本

[root@localhost ~]# ./bincp.sh
Plz enter a command: /usr/local/nginx/sbin/nginx
Plz enter a command: quit


 

 

为目标机上的nginx提供普通用户nginx

# grep "^nginx" /etc/passwd >> /mnt/sysroot/etc/passwd
# grep "^nginx" /etc/shadow >> /mnt/sysroot/etc/shadow 
# grep "^nginx" /etc/group >> /mnt/sysroot/etc/group
# sync


 

3、在目标机上测试

wKiom1P8fU7hlQuPAAJbx2lCvtE905.jpg

wKioL1P8fnSyijVXAAIL1LAc5n4460.jpg

 

到此,一个私人定制的微型Linux系统已经构建完成了。