BUFFALO NAS TeraStationをacp_commanderでroot取得・SSH接続

TeraStationLinux
この記事は約10分で読めます。

先日、ディスク故障でデータ復旧させたBUFFALOのNAS TeraStationですが、同一機種の古いものがいくつかあったので合わせて買い替えました。

廃棄予定のもう使わないTeraStationが出てきたので、いろいろ触ってみることに。
LinkStation用に作られたacp_commanderというJavaのコマンドラインツールはTeraStationでも使えるみたいで、rootを取得できるので試してみました。

なお、今回のバージョンは以下の通りです。

  • TeraStation TS-WXL/R1 Series ファームウェア:1.72
  • acp_commander Version 0.4.1(beta)

acp_commanderのダウンロードとJavaの準備

acp_commanderはこちらのリンクからダウンロードできます。

ダウンロードしたら適当な場所に配置します。

acp_commanderはJavaのコマンドラインツールなので、PCにJava(JDK・JRE)をインストールしておきます。
こちらのリンクからJDKをダウンロードしてインストールします。

インストール後は、Javaをインストールしたフォルダのbinフォルダ「C:\Program Files\Java\jdk1.8.0_231\bin」にPATHを通しておきます。
PATHを通す手順については、こちらの記事を参考にしてください。

acp_commanderの使い方

acp_commanderのREADMEには、

WARNING: This is experimental software that might brick your linkstation!
(警告:これは、リンクステーションを破壊する可能性のある実験的なソフトウェアです!)

出典:GitHub – Stonie/acp-commander

と書かれています。
使用には十分注意しましょう。

acp_commanderの配置フォルダで、オプションなしの以下のコマンドを実行すると、使用できるオプションが出てきます。
「-h」「-u」オプションでも同じような情報が出力されます。

> java -jar acp_commander.jar

10 31, 2019 4:25:17 午後 java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
ACP_commander out of the nas-central.org (linkstationwiki.net) project.
Used to send ACP-commands to Buffalo linkstation(R) LS-PRO.
WARNING: This is experimental software that might brick your linkstation!

Version 0.4.1 (beta)

Usage:  acp_commander [options] -t target

options are:
…

主なオプションはこちら。

オプション概要
-tTeraStation/LinkStationのIPアドレスを指定
-pwadminのパスワードを指定
-ipIPアドレスを変更する
-fネットワーク上のTeraStation/LinkStationを探す
-o「telnetd」と「passwd -d root」コマンドを送る
(rootのパスワードを削除する)
-cシェルコマンドを送る
-sインタラクティブシェル(対話型)
-cb/bootをクリアする
-emmode次回起動をEMモードにする
-normmode次回起動をノーマルモードにする
-reboot再起動する
-shutdownシャットダウンする

主な使い方としては、

> java -jar acp_commander.jar -t 192.168.1.11 -pw adminpassword

10 31, 2019 4:23:24 午後 java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
ACP_commander out of the nas-central.org (linkstationwiki.net) project.
Used to send ACP-commands to Buffalo linkstation(R) LS-PRO.

WARNING: This is experimental software that might brick your linkstation!

Using random connID value = 9446F9708DB4
Using target:   NAS-1/192.168.1.11

のようにターゲットとなるTeraStation/LinkStationのIPアドレスとadminのパスワードを指定し、その他のオプションで実行したいことを記述します。

「-c」コマンドでシェルコマンドを送れるので、中身がLinuxのTeraStation/LinkStationに対してやりたい放題というわけです。

ただし、「-c」オプションでコマンドを送る場合は、なぜか「-ip」オプションを付けないとうまく動かなかったです。
「Changeing IP: ACP_STATE_PASSWORD_ERROR」と出ますが、同一IPアドレスを指定しておけば問題ないかと思います。

TeraStationのrootを取得してSSH接続可能にする

では、TeraStationのrootを取得します。
そして、SSH接続可能にしてみます。

rootのパスワード変更

まずは、以下のコマンドでrootのパスワードを変更します。

> java -jar acp_commander.jar -t 192.168.1.11 -ip 192.168.1.11 -pw adminpassword -c "(echo rootpassword; echo rootpassword) | passwd"

【出力結果】
>(echo rootpassword; echo rootpassword) | passwd
OK (ACP_STATE_OK)

()で括ったサブシェルとpasswdコマンドを|(パイプ)で繋げて、パスワード変更時の対話を自動入力しています。

SSHの設定変更

続いて、「/etc/sshd_config」ファイルを編集します。
念のためバックアップを取得しておきます。

> java -jar acp_commander.jar -t 192.168.1.11 -ip 192.168.1.11 -pw adminpassword -c "ls -l /etc/sshd*"

【出力結果】
>ls -l /etc/sshd*
-rw-------    1 root     root         2505 Nov  1 13:49 /etc/sshd_config


> java -jar acp_commander.jar -t 192.168.1.11 -ip 192.168.1.11 -pw adminpassword -c "cp /etc/sshd_config /etc/sshd_config.20191031"

【出力結果】
>cp /etc/sshd_config /etc/sshd_config.20191031
OK (ACP_STATE_OK)

「/etc/sshd_config」ファイルを確認すると、SSHは普通にパスワード認証で行えるようで、「PermitRootLogin no」を「PermitRootLogin yes」に変更するだけで良さそうです。
変更は、文字列を置換するsedコマンドを使用しました。

> java -jar acp_commander.jar -t 192.168.1.11 -ip 192.168.1.11 -pw adminpassword -c "cat /etc/sshd_config"

【出力結果】
>cat /etc/sshd_config
#       $OpenBSD: sshd_config,v 1.65 2003/08/28 12:54:34 markus Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
…


> java -jar acp_commander.jar -t 192.168.1.11 -ip 192.168.1.11 -pw adminpassword -c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config"

【出力結果】
>sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config
OK (ACP_STATE_OK)
  • sedコマンドのオプション
    • -i … ファイルを直接編集する。
    • s/置換前/置換後/g … 「置換前」の文字列にマッチした部分を「置換後」の文字列に全て置き換えるスクリプトコマンド。

最後に、sshdを再起動します。

> java -jar acp_commander.jar -t 192.168.1.11 -ip 192.168.1.11 -pw adminpassword -c "/etc/init.d/sshd.sh restart"

【出力結果】
>/etc/init.d/sshd.sh restart
load_info ItemValue = off
LoadConfFileStringEx:key=[ad_dns] not found in /etc/melco/info.
LoadConfFileOnOffEx:key=[info_visible] not found in /etc/melco/info.
LoadConfFileStringEx:key=[array2] not found in /etc/melco/diskinfo.
file:/etc/sftponly_config
userinfo finished
groupname admin
groupname guest
groupname hdusers
file:/etc/pam.d/sshd
no replicatin task

rootの取得とSSHの設定変更が完了しました。

クライアントのTeraTermでSSH接続

では、クライアントPCからSSH接続してみます。
ソフトはTeraTermを使用しています。

  • ホスト … TeraStationのIPアドレス
  • ポート番号 … 22
  • ID/パスワード … root/変更したパスワード

で問題なくログインできました。

以前、LinkStationがおかしくなって起動できなくなったときは「-cb」オプションでbootクリアしたら復活できました。
rootを取得する以外にもいろいろ使えると思います。

中のLinuxのディストリビューションってdebianなのかな?
「/etc/debian_version」のファイルはあったけど空でした。

$ cat /etc/debian_version

$ cat /etc/issue
BUFFALO INC. TeraStation series

最後に

今回は、Javaコマンドラインツールのacp_commanderTeraStationのrootを取得し、SSH接続できるようにしてみました。
ハックする以外にも、トラブルで管理画面に繋がらず何ともできないときとかにも使えると思います。

Linux
えふめん

大阪在住、30代。
業務系SE・社内SEの仕事を通じて学んだこと、PCトラブルで困って調べたこと、手作業を効率化して改善したこと、WordPressのブログ運営などの記事を書いています。

えふめんをフォローする
\よかったらシェアしてね/
この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
俺の開発研究所

コメント

タイトルとURLをコピーしました