先日、ディスク故障でデータ復旧させたBUFFALOのNAS TeraStationですが、同一機種の古いものがいくつかあったので合わせて買い替えました。
廃棄予定のもう使わないTeraStationが出てきたので、いろいろ触ってみることに。
LinkStation用に作られたacp_commanderというJavaのコマンドラインツールはTeraStationでも使えるみたいで、rootを取得できるので試してみました。
acp_commanderのダウンロードとJavaの準備
acp_commanderは、GitHubからダウンロードできます。
ダウンロードしたら適当な場所に配置します。
acp_commanderはJavaのコマンドラインツールなので、PCにJava(JDK・JRE)をインストールしておきます。
Oracle公式サイトから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:
…
主なオプションはこちらです。
オプション | 概要 |
---|---|
-t | TeraStation/LinkStationのIPアドレスを指定 |
-pw | adminのパスワードを指定 |
-ip | IPアドレスを変更する |
-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に対してやりたい放題というわけです。
BUFFALO TeraStationの詳細は、こちらのリンクからご確認いただけます。
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/変更したパスワード
で問題なくログインできました。
中のLinuxのディストリビューションってdebianなのかな?
「/etc/debian_version」のファイルはあったけど空でした。
$ cat /etc/debian_version
$ cat /etc/issue
BUFFALO INC. TeraStation series
最後に
今回は、Javaコマンドラインツールのacp_commanderでTeraStationのrootを取得し、SSH接続できるようにしてみました。
ハックする以外にも、トラブルで管理画面に繋がらず何ともできないときとかにも使えると思います。
BUFFALO TeraStationの詳細は、こちらのリンクからご確認いただけます。
コメント