定制微型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 #查看安装文档,文档中有详细的安装步骤
# ./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系统已经构建完成了。