四、提供远程连接功能
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 #查看安装文档,文档中有详细的安装步骤
# ./configure --help #编译选项信息帮助
./configure 不加任何选项,默认安装在/usr/local目录下
注意:千万不要修改以下pam认证的目录,使用宿主机系统默认的pam认证
(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服务,使用管理员账号登录
到现在,已经能顺利地使用远程连接正常登录访问目标机了。
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
测试:
五、提供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端口是否处于监听状态
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、在目标机上测试
到此,一个私人定制的微型Linux系统已经构建完成了。