LS420D funcスクリプトの導入とsshd,telnetdのrootログイン有効化(FW1.30)

LS420DをFW1.30にアップデートしたらssh接続ができなくなった。ちょこっと調べたら、LS-CHLのsshd起動不可と同じ様な”SUPPORT_SFTP=0”チェックが増えていた。initrd.buffalo内のnas_featureを修正しないとSUPPORT_SFTP=1で動作しないが、sshdが常に起動していないといけない使い方ではないので、funcスクリプトで使いたい時にsshd,telnetdを起動するようにする。しかし、LS420Dではまだfuncスクリプトを導入していないので、まずはfuncスクリプトをサックと作っちゃいましょう。/proc/buffalo/kernevntを見ながらfuncボタンを押すとFUNCSW_pushedが割込みとして出てくる。kernelmon⇒kernelmon_exec.sh⇒libfuncswという感じにファイルが読み込まれる、編集が一番楽そうなlibfuncswを弄る事にする。LS-WXL,LS-WVLはlibfuncsw.shだったかな?ほぼ同じなのでlibfuncswの最後にstarthack.shをコールする様にする。LS420DはRAID機なので、HDDを取り出してLinuxPCに接続してファイルを変更してもうまく動作しないので、FWアップデートで変更を入れます。initrd.imgに修正を入れinitrd.imgを再作成するスクリプトにstarthack.shも同時に作る様にしましょう。新しく作るのが面倒なので、LS-WXL,LS-WVLで使っていたchginitrd.shを改造する。最新のFWが入っているので、FWアップデータのデバッグモードの強制アップデートでfuncスクリプトを導入する。後は、sshd,telnetdのrootログイン有効化(FW1.30)を行うスクリプト(sshd-telnetd-use.sh)を作るだけ。スクリプトの内容を下記に示す。rootのパスワードはadminのパスワードと同じにする。sshdのrootログイン有効化の内容を下記に示します。・sshd_configの#PermitRootLoginをPermitRootLoginに変更する。・nas_featureのSUPPORT_SFTP=0をSUPPORT_SFTP=1に変更する。・sshd.sh startを行いsshdを起動する。telnetdのrootログイン有効化の内容を下記に示します。・login、system-authのpam_securetty.soがある行をコメント化する。

・telnetdの起動(busybox telnetd)

使い方はいたって簡単です、ざっくり手順を書きます。1.LinuxPCにchginitrd.sh、FW1.30のinitrd.imgを置きLinuxPCにrootでログインしchginitrd.shを実行する。2.出来上がったinitrd.imgをFW1.30のアップデータに入れFW1.30にアップデートする。3.1でstarthack.shができるのでLS420Dの共有ディレクトリにhackディレクトリを作成しstarthack.shを置く。4.LS420Dの共有ディレクトリ/hack配下にsshd-telnetd-use.shを置く。5.starthack.sh、sshd-telnetd-use.shの内容を確認しfuncボタンを押す。

6.ssh接続かtelnet接続でrootでログインする。(パスワードはadminのものを使用する)

ssh接続を終わらせる時はsshd.sh stopを行うか再起動を行って下さい。
telnet接続を終わらせる時はbusybox telnetdのプロセスを殺すか再起動を行って下さい。

chginitrd.sh:initrd.imgに修正を入れinitrd.imgを再作成するスクリプト。#!/bin/sh -x## filname : chginitrd.sh## initrd.imgに修正を入れinitrd.imgを再作成する。# initrd.buffaloへの追加機能:# 1.funcスクリプトに対応。(別途”共有ディレクトリ/hack/starthack.sh”が必要)## 不要な機能はコメント化するか削除して下さい。## 注意事項:# ・本スクリプトはLS400シリーズ(LS420D)用です。# ・本スクリプトと同じディレクトリに initrd.img が必須。# ・本スクリプトで作成した initrd.buffalo の追加機能を使用できるのは、#  FUNCTIONボタンが有るLinkStation LS420D です。# ・パスワードはスクリプト内に設定する。# ・LinkStationの共有ディレクトリのhack配下をフルアクセスできれば、簡単にroot権限で#  LinkStationを操作できてしまいますので、LinkStationを外のネットワークに接続しないで下さい。#  (家庭内LANでも家族の悪戯に注意して下さい)## Copyright (C) 2009-2013 Nekoshin. All Rights Reserved.##===============================================================================

# 変数宣言

# パスワード設定PASSWORD1=’パスワードを入れて下さい’PASSWORD2=’パスワードを入れて下さい’PASSWORD3=’パスワードを入れて下さい’

PASSWORD4=’パスワードを入れて下さい’

# ファイル名設定HDDIMG=’initrd.img’

ROOTIMG=’initrd.buffalo’

# スクリプト開始ディレクトリをワークディレクトリとして設定する。
WORKDIR=$(pwd)

#===============================================================================
# メイン

#——————————————————————————-# ディレクトリ作成と対象ファイルのコピーmkdir ${WORKDIR}/chgworkcd ${WORKDIR}/chgwork

cp ../${HDDIMG} .

#——————————————————————————-# 対象ファイルのパスワードを外す。for PASSWORD in ${PASSWORD1} ${PASSWORD2} ${PASSWORD3} ${PASSWORD4}do        # 解凍を実行する。        unzip -P ${PASSWORD} ${HDDIMG}        # 実行結果判定        if [ ${?} = 0 ]        then                 # 正常終了ならループを抜ける。                break        fi        # 全てのパスワードでNGか        if [ ${PASSWORD} = ${PASSWORD4} ]        then                 # 全てのパスワードが無効のため処理を終了する。                echo password ng                cd ${WORKDIR}                rm -fr ${WORKDIR}/chgwork                exit 1        fi

done

echo ‘############################################################’echo “OK password ${PASSWORD}”

echo ‘############################################################’

#——————————————————————————-# 対象ファイルの展開を行う。dd if=${WORKDIR}/chgwork/initrd.buffalo of=${WORKDIR}/chgwork/initrd.gz bs=64 skip=1

gunzip ${WORKDIR}/chgwork/initrd.gz

# マウントポイントを作成する。rm -fr ${WORKDIR}/chgwork/rootfsmkdir ${WORKDIR}/chgwork/rootfs

MNTDIR=${WORKDIR}/chgwork/rootfs

# マウントする。cd ${MNTDIR}

cat ${WORKDIR}/chgwork/initrd | cpio -idv

#===============================================================================# ここから入れたい処理を記述する

#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#===============================================================================# 1.funcスクリプトに対応。(別途”共有ディレクトリ/hack/starthack.sh”が必要)# funcスクリプトを実装する。# libfuncsw の確認if [ ! -e ${MNTDIR}/usr/local/lib/libfuncsw.orig ]then        cd ${MNTDIR}/usr/local/lib        cp -a libfuncsw libfuncsw.orig        sed -e ‘s/^}/\        #>>>>>>>>>>>>>>>>>>> 2010.10.05 Nekoshin >>>>>>>>>>>>>>>>#\        if [ -d \/mnt\/disk1\/share\/hack ]\        then\                WORKDIR=\/mnt\/disk1\/share\/hack\                \${WORKDIR}\/starthack.sh \&\        elif [ -d \/mnt\/array1\/share\/hack ]\        then\                WORKDIR=\/mnt\/array1\/share\/hack\                \${WORKDIR}\/starthack.sh \&\        else\                echo on  > \/proc\/buffalo\/gpio\/led\/funcred_blink\                sleep 3\                echo off > \/proc\/buffalo\/gpio\/led\/funcred_blink\        fi\        #<<<<<<<<<<<<<<<<<<< 2010.10.05 Nekoshin <<<<<<<<<<<<<<<<#\}\

 /’ libfuncsw.orig > libfuncsw

        # 修正が正常か確認するため、修正ファイルをコピーする。        cp libfuncsw ${WORKDIR}/.else        echo libfuncsw is no make.

fi

# funcスクリプト実行部を作成する。# initrd.buffalo 内に保存するだけで、コピー先(ユーザデータ領域)がマウントされていないため、# 起動時にコピーは行わない。(コピーできない)if [ ! -e ${MNTDIR}/usr/local/sbin/starthack.sh ]then        cd ${MNTDIR}/usr/local/sbin        cat > starthack.sh << EOF#!/bin/sh## filename : starthack.sh## funcスクリプトでfuncボタンが押された時にroot権限で起動されるスクリプトです。# 本スクリプトを修正する事によりLinkStationのログインしなくても色々できます。## 注意事項# ・本スクリプトはLinkStationの 共有ディレクトリ/hack 配下に置く事。# ・LinkStation単体で動作できるがキーボードが無いため、キー入力を必要とする処理を#  スクリプトに入れないで下さい。# ・LS420Dでしか動作確認していません。# ・LED制御を行いますのでLinkStationのFWから点灯されたLEDが消灯する場合が有ります。## Copyright (C) 2009-2013 Nekoshin. All Rights Reserved.#

#===============================================================================

# LEDの操作を行うディレクトリ。
LEDDIR=/proc/buffalo/gpio/led

# 共有ディレクトリは通常モードか?if [ -d /mnt/disk1/share/hack ]then        # 通常モード。        WORKDIR=/mnt/disk1/share/hack

        CURRENTDIR=/mnt/disk1/share

# 共有ディレクトリはRAIDモードか?elif [ -d /mnt/array1/share/hack ]then        # RAIDモード。        WORKDIR=/mnt/array1/share/hack        CURRENTDIR=/mnt/array1/shareelse        # 共有ディレクトリが無ければ赤点灯で終了、赤点灯はすぐ消える        echo on > \${LEDDIR}/funcred        sleep 2        echo off > \${LEDDIR}/funcred        exit 1

fi

# ここまで動作すれば白点灯させる、白点灯はすぐ消える。
echo on > \${LEDDIR}/func

# 共有ディレクトリshareに移動する。
cd \${CURRENTDIR}

#——————————————————————————# 動かしたいスクリプト等を下記に書く。無ければコメントにする。

# (動かしたいスクリプト等には実行権が有る事)

# デンジャラスtelnetd実行(強制rootログイン)
#\${WORKDIR}/outpass/telnetd

# sshd/telnetd有効化
 \${WORKDIR}/sshd-telnetd-use.sh

#——————————————————————————# 白点灯を消灯する。sleep 2

echo off > \${LEDDIR}/func

exit 0EOF        # アクセス権を設定する。

        chmod 777 starthack.sh

        # 作成が正常か確認するため、作成ファイルをコピーする。        cp starthack.sh ${WORKDIR}/.else        echo starthack.sh is no make.

fi

#===============================================================================

#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<# ここまでに入れたい処理を記述する

#===============================================================================

#——————————————————————————-

# initrd.buffaloを作成する。cd ${MNTDIR}find . | cpio -o -H newc | gzip > ${WORKDIR}/chgwork/initrd.gzcd ${WORKDIR}/chgwork

mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d ${WORKDIR}/chgwork/initrd.gz ${WORKDIR}/chgwork/${ROOTIMG}

# 修正後の initrd.buffalo を取り出す。chmod 644 ${ROOTIMG}

cp -a ${ROOTIMG} ../${ROOTIMG}.func

# 対象ファイルの圧縮を行う。chmod 644 ${ROOTIMG}zip -P ${PASSWORD} ${HDDIMG} ${ROOTIMG}

mv ${HDDIMG} ../.

# 後始末を行う。cd ${WORKDIR}

rm -fr chgwork

exit 0

sshd-telnetd-use.sh:rootのパスワードをadminのパスワードと同じにしsshd,telnetdをrootでログイン可能にするスクリプト。#!/bin/sh -x## filename : sshd-telnetd-use.sh## rootのパスワードはadminのパスワードと同じにする。# sshdをrootでログイン可能にする。# sshd、telnetdの有効化を行うかは有効化フラグで決める。## 注意事項# ・本スクリプトは共有ディレクトリのhack配下に有る事。# ・本スクリプトはFW1.30専用です、FW1.11には使用しないで下さい。## Copyright (C) 2009-2013 Nekoshin. All Rights Reserved.##===============================================================================#——————————————————————————-

# 変数宣言

# sshd有効化フラグ# yes : 有効化を行う no : 有効化を行わない

SSHD=yes

# telnetd有効化フラグ# yes : 有効化を行う no : 有効化を行わない

TELNETD=no

# ディレクトリの設定ETCINITD=/etc/init.d

ETCPAMD=/etc/pam.d

#——————————————————————————-
# メイン

# /proc/buffalo/firmware から PRODUCTID を取得する。PRODUCTID=`sed -n -e ‘s/^PRODUCTID=\(.*\)$/\1/p’ /proc/buffalo/firmware`# PRODUCTID から機種を特定し変数の設定を行う。case “${PRODUCTID}” in0x0000300B)        echo PRODUCTID = “${PRODUCTID}”        ;;*)        # 対象外の機種        echo PRODUCTID = “${PRODUCTID}” not supported.        exit 1        ;;

esac

#——————————————————————————-# rootパスワード設定(adminのパスワードと同じにする)# rootパスワードは変更済みか判定する。if [ ! -e /etc/shadow.orig ]then        # rootのパスワードはadminのパスワードと同じにする。        cp -a /etc/shadow /etc/shadow.orig        grep admin /etc/shadow.orig | sed -e ‘s/admin/root/’ > /etc/shadow        sed -e ‘1d’ /etc/shadow.orig >> /etc/shadow

fi

#——————————————————————————-# sshd有効化# sshd有効化を行うか判定する。if [ ${SSHD} = yes ]then        # sshd有効化を行う。        # rootでログイン可能となっているか判定する。        if [ ! -e /etc/sshd_config.orig ]        then                cp -a /etc/sshd_config /etc/sshd_config.orig                sed -e ‘s/^#PermitRootLogin/PermitRootLogin/’ /etc/sshd_config.orig > /etc/sshd_config

        fi

        # nas_featureの修正。起動毎に上書きされるのでベタで修正する。        cp -a /etc/nas_feature /etc/nas_feature.work

        sed -e ‘s/^SUPPORT_SFTP=0/SUPPORT_SFTP=1/’ /etc/nas_feature.work > /etc/nas_feature

        # sshdの起動        ${ETCINITD}/sshd.sh start

fi

#——————————————————————————-# telnetd有効化# telnetd有効化を行うか判定する。if [ ${TELNETD} = yes ]then        # rootでログイン可能となっているか判定する。        # /etc/pam.d/loginの確認        if [ ! -e ${ETCPAMD}/login.orig ]        then                cp -a ${ETCPAMD}/login ${ETCPAMD}/login.orig                sed -e ‘s/.*pam_securetty.so/#auth requisite pam_securetty.so/’ ${ETCPAMD}/login.orig > ${ETCPAMD}/login

        fi

        # /etc/pam.d/system-authの確認        if [ ! -e ${ETCPAMD}/system-auth.orig ]        then                cp -a ${ETCPAMD}/system-auth ${ETCPAMD}/system-auth.orig                sed -e ‘s/.*pam_securetty.so/#auth requisite pam_securetty.so/’ ${ETCPAMD}/system-auth.orig > ${ETCPAMD}/system-auth

        fi

        # telnetdの起動        busybox telnetd

fi

exit 0

私が個人的に調べたものであり、正確ではありません、私は保障しませんし責任も負いません、また動作保障もしません、ここにはメモとして残しているだけです。このメモを見て何かやり装置が壊れたり不具合が発生しても、私は一切関知しません、あくまでも自己責任でやってください。

Shared via Inoreader