定製微型Linux系統前篇:http://hjqjk.blog.51cto.com/5970897/1544888 nginx
4、提供遠程鏈接功能
shell
Dropbear是一個相對較小的SSH服務器和客戶端。它運行在一個基於POSIX的各類平臺。 Dropbear是開源軟件,在麻省理工學院式的許可證。 Dropbear是特別有用的「嵌入」式的Linux(或其餘Unix)系統,如無線路由器。vim
dropbear: 更小環境下,提供簡單ssh遠程鏈接服務安全
一、在宿主機上編譯dropbear並移植dropbear, dropbearkey, dbclient, scp到目標機上bash
(1)下載、解壓dropbear-2013.58.tar.bz2服務器
# tar xf dropbear-2013.58.tar.bz2
(2)編譯安裝dropbear-2013.58.tar.bz2less
# 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認證ssh
(3)移植dropbear, dropbearkey, dbclient, scp命令到目標機上ide
使用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
二、詳細配置
爲目標機上的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服務,使用管理員帳號登陸
到如今,已經能順利地使用遠程鏈接正常登陸訪問目標機了。
三、讓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可否正常使用
下載並解壓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端口是否處於監聽狀態
二、移植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
三、在目標機上測試
到此,一個私人定製的微型Linux系統已經構建完成了。